Commit Graph

8599 Commits

Author SHA1 Message Date
SyncIt21
0e899b7b1d Fixes runtime when baking foods that don't have reagents. (#78675)
## About The Pull Request
Fixes #78672

Not all baked foods have reagents
![Screenshot
(313)](https://github.com/tgstation/tgstation/assets/110812394/c2b2440a-f94e-42c7-9524-7316714aef2e)

but when it does then we can clear them and transfer reagents from the
original object to the final baked product

## Changelog
🆑
fix: Aloe and other baked foods that don't have reagents can be baked
again without turning to ash
/🆑

---------

Co-authored-by: Emmett Gaines <ninjanomnom@gmail.com>
2023-09-30 12:59:49 -04:00
ArcaneMusic
9073290d8a ArCargo: Adds the Galactic Materials Stock Market V1.2 (Free Market Edition) (#78500)
## About The Pull Request

**This PR is a rerelease of #78164, with some bells and whistles.** As
such, most of the core functionality is the same, but with some tweaks
to balance the gameplay and prevent bike levels of profit. I've tried to
bold the new additions to make it easier to read for those coming back
for the second pass.


![image](https://github.com/tgstation/tgstation/assets/41715314/ff9bf038-524d-44fc-81bb-c6ff97fef6dd)
This PR adds a new machine that can be bought called the **Galactic
Mineral Market** (GMM). The Galactic Mineral Market (GMM) allows you to
buy and sell minerals wholesale from the market machine. It goes
something like this:

### 1. Getting the Machine:
The GMM can be bought as an un-assembled machine for 600 credits from
cargo. It's a low cost, but its not mapped in standard, so if you're
confident in your miners, you shouldn't necessarily need one for the
department. Otherwise, it's available for other crewmembers to buy for
cost.

The cargo pack comes will all supplies necessary to finish the machine.
Tools not included.

### 2. Buying Low
Using the machine's UI, you can see all traded minerals and their
associated prices. Buy prices are played straight, and can be bought for
material price, times the quantity. The order is then instantly placed
on the cargo shuttle, and will be deducted from the buyer's account on
shuttle send. **A single order can only have 10 different stacks of
materials in it. So, that can be 100 sheets of iron and 1 of everything
else, or 500 sheets of iron. After that you're blocked from buying more
sheets until you've sent the order.**

Cargo staff with standard cargo access may toggle the machine to order
directly from the cargo budget. Otherwise, materials are only purchased
from private accounts.

All purchases are treated as private and must be opened by the recipient
like private orders.

### 3. Selling High

It's stocks time. To sell minerals on the market, simply insert any
relevant metal stock into the machine. This produces a totally original
and not-a-bounty-cube stock block, which can be sold on the cargo
shuttle for cargo funds. Stock blocks can also be price-tagged as well
following their standard process.

**Stock blocks start out a bright pink and are worth the value of that
material at that time, but over time their color will degrade. After a
full 5 minutes, stock blocks will switch over to a purple hue, and their
value will once again become liquid, subject to the current market
value. This encourages players to be a bit more fast on their feet than
before instead of just waiting forever for all of their investments to
arrive at the perfect value, before the inevitable "rest of the game"
tries to upend your investing.**

Sold cargo stocks are subject at a 20% processing fee as part of the
galactic mineral market.
### 4. Outside Factors

**In-game events like the Crab-17 or the Market crash event will cause
stocks to bottom out completely, and for the market to become
unavailable until the market stabilizes. Thankfully, once the market has
crashed, typically stocks will recovery and gain back some value,
allowing for fast acting market movers to capitalize on rough markets.**

**Additionally, low value materials like iron and glass have an extra
stipulation, as their value goes all the way down to 0 credits. In that
case, you are unable to buy them at that value as a market protection.
Be careful that you don't see a reset or crash when you're planning on
selling your horde of iron and glass stocks!**

Additionally, market events can occur during the round that can more
sharply adjust a single stock's price and completely rebound it's
trajectory. These events are always mentioned in the station
announcement's economics report.

### Other notes:
The market does not cover all minerals, partially for consistency
purposes as well as for balance reasons. Plasma, being a unique material
that only Nanotrasen has their hands on, is the sole exporter of plasma
in the system, so it stands to reason that it's not on the market, and
remains a solo export. Bananium, as it has a rare and expensive
conversion rate, works the opposite way, and as such isn't listed on the
market either, with the sole source being single cargo sales. All others
just don't make much sense to include into the market at this second, so
I left them out for now.

**Alright now below I'm going to cover the math and shit so if that's
not what you care about then please scroll past.**
<details>
  <summary>Warning: Arcane is about to talk about the math</summary>
Alright.
So this adds a new stock_market subsystem, which fires once every 20
seconds. I'm still fairly new to subsystem design so I'm probably going
to need some feedback on cleaning this up to make it look nicer and run
smoother.

So we have 4 associated lists, each attached to the relevant traded
datum; this tracks prices, market trends, how long that trend is going
to last in SS fires, and market quantity.

Prices fluctuate between 0.5x and 3x the material's single sheet value.
This could be tweaked even farther in the future, but for now I'm
keeping it at this nice clean margin. Prices fluctuate based on a
gaussian normal distribution that is centered on different points based
on their **trend**. Upward trending materials are centered in such a way
that they'll almost certainly go upwards, but being that it's based on a
random chance, not always. Vis versa, downward trends should tend to
lose value at about the same rate. We also change our rounding based on
this trend data, in order to prevent low price values like iron and
glass from getting stuck in the same value or freefall drop over time
just because of rounding down. Similarly, neutral trending materials
will not change nearly as much, and will generally stay at around the
same amount.

When buying or selling a material, the quantity of that material will
change on the market. The magnitude of that change depends on how much
of that material currently exists on the market. Buying a low quantity
material like diamond for example will tangibly increase that material's
cost, while buying stacks and stacks of iron and glass won't do much
damage to the price of iron as there's usually around 500 full stacks on
the market to start with. It's applied at a relative percentage of
(qty_changed / new_total_on_market) * price of goods bought/sold at.

In addition to that, there are random "market events" that can occur
randomly, which you might miss if you don't follow the newscaster
economy news. These three events are fairly barebones now, but in
general they have a 1% chance of happening per material, and can more
dramatically increase, decrease, or fully reset the value of a material
on the market back to it's standard value. This opens up for doing more
with it in the future, but that's a later problem.
</details>


## Why It's Good For The Game

This independently resolves some issues related to #78040, that being
that lowpop stations, or shifts with few miners would have a new way to
be able to still get some access to minerals in a given round. This also
provides a unique minigame and alternative way to acquire money in a
given shift, using minerals.

**"But Arcane,** I hear you ask. **"Isn't this just the same thing you
tried doing way back when and then reverted in #50537?**
Well, fuck man, how you doing I haven't see you around in forever also
no you're completely wrong and here's why

**This PR is no longer contingent on the rest of ArcMining in it's
current iteration.** I have introduced some extra factors into the
gameplay as well to try and curb the creation of bikes within gameplay.
This also provides a massive benefit to round progression and gives the
QM and the cargo members the ability to prevent round progress from
stalling by buying round-critical resources.

Not to mention, as the GMM is not cargo required, more cargo integrated,
it also functions as economy content for the rest of the crew.

## Changelog
🆑
add: A new export has arrived in the imports section, the Galactic
Materials Market! You can use this to buy and sell minerals for profit
or cost, as well as stock your station when you don't have any miners.
add: Insert sheets of minerals into the Galactic Materials Market to
convert them into a stock block, allowing you to lock in your price for
5 minutes. Wait too long and it'll be subject to market value again!
add: Minerals can be bought on the market either using the station's
cargo budget by cargo crew, or privately by everyone else.
del: Any material stacks that can be bought and sold on the market
before have been removed from the cargo catalog.
/🆑

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
2023-09-30 08:58:56 -04:00
Emmett Gaines
e8d12b29fe Removes all spawn locations of the awakened plush except the bus ruin (#78559)
It's supposed to be a coderbus easter egg, stop putting it elsewhere. I
want it to stay rare enough that it confuses people when it makes it to
the station.

The secure closet had it on the loot table and due to how that's coded
it has to have something replace the slot (or rework the loot spawning
code there) so I put a live bomb in the slot instead.

🆑 ninjanomnom
del: An easter egg plushie that was spawning where it shouldn't has been
brought back home.
add: The secure closet can now spawn live gibtonite, enjoy your free
bomb.
/🆑
2023-09-30 04:31:50 +02:00
Jacquerel
7d7f55ee53 Heretic Ascension Tweaks (#78472)
## About The Pull Request

Some changes to Cosmic and Knock heretic ascensions, in response to
feedback.

- Cosmic Heretics can no longer control their summon while jaunted. 
- Additionally the death link element the Star Gazer used... wouldn't
work if there was more than one cosmic heretic. I refactored it into a
component, so that it would.

Frankly there are probably a lot of _other_ abilities which shouldn't be
usable while jaunted but are, but I have been burned in the past by
adding defaults which were applied too widely so we'll leave it
case-by-case for now.

- The Knock rift can no longer summon Flesh Worms of any kind.
- But it _can_ summon fire sharks (we really need to reflavour these...)
and any future "basic mob" heretic mobs (or ones which are converted).
- Additionally the rift can't be clicked by ghosts while it's polling
ghosts automatically because that would create funky empty-minded mobs.
- Finally it goes away when the heretic dies.

## Why It's Good For The Game

For Cosmic Heretics, controlling the Star Gazer in conjunction with
Space Jaunt essentially meant that the heretic was playing an RTS as an
invincible observer with an invulnerable unit, now they have to actually
be present and killable in order to sic The Beast on you.

For Knock Heretics, Minor Flesh Worms are a proof of concept which was
never meant to be used except by admins. They're _barely_ weaker than a
normal flesh worm, extraordinarily tanky, delete walls, and generally
devalue the Flesh path ascension.
Vanishing upon heretic death is because every _other_ ascension is at
least theoretically stoppable except this one. Now this one is too.
It's still _very hard_ to kill the heretic because every _10 seconds_
they can transform into a heretic mob which acts as an extra health
pool.

## Changelog

🆑
fix: If two cosmic heretics ascend in the same round, their star gazer
survival will be linked to each individual heretic and not shared by
just one of them.
fix: You can't click the Knock heretic portal to join as a mob while
already signed up to become a mob.
balance: Cosmic heretics can't order the Star Gazer around while
jaunting.
balance: The Knock Heretic portal cannot summon Flesh Worms, but can
summon Fire Sharks.
balance: The Knock Heretic portal will disperse if its creator is
killed.
/🆑
2023-09-29 16:52:19 -04:00
nikothedude
2bdadebbad Moves gauze removal signals to gauze destroy, removing weird seep_gauze usages + misc improvements (#78570)
## About The Pull Request

Title. 
## Why It's Good For The Game
Gauze removal was handled by using seep_gauze(9999) instead of just
deleting it, which was really fucking weird??
 
This makes behavior more sensical and modular (you can remove gauze
without using seep_gauze now).
## Changelog
🆑
code: Gauze removal is now handled by the gauze's destroy instead of
seep_gauze
/🆑
2023-09-29 16:45:43 -04:00
Helg2
bab9db355f Adds on z impact interaction for SM. (#78428)
## About The Pull Request
Adds interaction for supermatter crystal when it falls on
something/someone.
I changed intercept_z_fall line that prevents sm dusting itself from
continue to return because it didn't spin/dust on fall.
## Why It's Good For The Game
Presumably a little bit more chaos.
## Changelog
🆑
add: SM crystal can now dust someone or something if it falls on it.
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-09-29 19:55:36 +01:00
admeeer
d6e8c56941 Fixes getting dusted when you spray paint the SM (#78666)
## About The Pull Request
Hopefully? implemented the correct fix. It _does_ work, but I don't know
if its the best possible fix. Should resolve #78456
## Why It's Good For The Game
Better consistency 
## Changelog
🆑
fix: You can now spray paint the SM without getting dusted
/🆑
2023-09-29 11:44:22 -06:00
Jeremiah
88c3f4bfa4 bitrunning hotfix 2 [NO GBP] (#78633)
Bitrunning releated fixes
---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2023-09-29 08:58:05 +02:00
MrMelbert
9e1c71f794 Reworks transformation sting to be temporarily in living mobs, forever in dead mobs (#78502)
## About The Pull Request

- Reworks transformation sting. 
- Transformation sting is now temporary, lasting 8 minutes (number not
final) in humans.
      - If used on a monkey, it lasts forever instead. 
- While the target mob is dead or in stasis, the duration will not
progress, making it functionally infinite until revived and taken off
stasis, where it will resume its timer where it left off.
   - Chemical cost reduced to 33
   - DNA cost reduced to 2

- Removes TRAIT_NO_TRANSFORMATION_STING, instead just checks for
TRAIT_NO_DNA_COPY
   - These were essentially the same traits, so I just combined the two

- Organizes some trait lists alphabetically

- Adds TRAIT_STASIS, to allow for reacting to mobs entering and exiting
stasis via COMSIGS
- Everything that checks IS_IN_STASIS now checks HAS_TRAIT TRAIT_STASIS,
which is probably more performant, so that's a bonus.

## Why It's Good For The Game

A lot of people don't like the current iteration of Transformation
Sting, me included

Right now it's only use is for a meme - you make the entire station into
felinids until you get lynched, and that's it.

It's not really a healthy ability for ling's current kit, so this pr
attempts to soft rework it to make it a bit more in line with how ling
should be acting - turning it into a source of short term confusion
between people, or using it on a body to cover your tracks.

This accomplish it two fold - One, it is now cheap enough to use twice
in rapid succession, allowing for quick on-the-spot "BE CONFUSED"
situations while you abscond. Two, as mentioned in the last paragraph,
you can poke a body of someone you murder to obfuscate the crime scene
and maybe help out in taking over someone's identity.

## Changelog

🆑 Melbert
balance: Transformation sting now lasts 8 minutes, down from permanent.
However, the effect is paused for dead and stasis mobs, making it
permanent SO LONG AS they stay dead or in stasis. The effect is also
permanent if used on a monkey.
balance: Transformation sting now costs 33 chemicals, down from 50. 
balance: Transformation sting now costs 2 dna points, down from 3. 
fix: Transformation sting works on monkeys again.
refactor: Refactored a bit of human randomization. 
/🆑
2023-09-28 13:47:39 -06:00
Ghom
1242bf98d1 [NO GBP] fixes crab walking (#78648)
## About The Pull Request
the sideway movement element isn't working as intended, because
apparently the client dir and not the mob's (which is always SOUTH) was
being sent with the signal, and the existence of the `turn(dir, angle)`
proc hadn't crossed my mind while I coded the element.

## Why It's Good For The Game
This fixes the above.

## Changelog

🆑
fix: Fixed crabs not correctly (kinda) walking sideway.
/🆑
2023-09-28 13:42:23 -06:00
Jacquerel
79ab52c0ed Only drop wall-mounted objects on turf change if it changes into a floor (#78651)
## About The Pull Request

Fixes #78643
It was clearly the intent of this feature to drop stuff onto the ground
when the wall is destroyed.
If we turn a wall into a _different_ wall then there isn't any need to
do this.

If there's some side effect to this that I haven't thought about, I
haven't thought about it.

## Why It's Good For The Game

Dimensional anomalies aren't supposed to destroy lights, fire alarms,
APCs, and air alarms.

## Changelog

🆑
fix: Dimensional Anomalies no longer destroy wall-mounted equipment.
/🆑
2023-09-28 13:42:00 -06:00
MrMelbert
9ebfb27940 Fix roundstart crewmembers not getting their radio hint message / Examine blocks out starting job information (#78647)
## About The Pull Request

- Fixes roundstart jobs not getting information from
`radio_help_message`

- Adds extra information for the Captain

- Examine blocks out roundstart / latejoin job information

Roundstart:


![image](https://github.com/tgstation/tgstation/assets/51863163/908b5618-fd74-443d-9683-2f98e83a4ef4)

Latejoin:


![image](https://github.com/tgstation/tgstation/assets/51863163/52dc0404-07c6-4c68-91be-b645e70cf6d6)

## Why It's Good For The Game

1. Roundstart mobs weren't getting radio information due to them not
being cliented yet, this has been fixed.
2. The roundstart block was pretty cumbersome to read and easy to have
your eyes glaze over, this should make it easier.

## Changelog

🆑 Melbert
qol: Examine blocked out roundstart / latejoin job information.
qol: Captain gets a little bit more information about how their radio
works roundstart.
fix: Fixed roundstart players not getting radio information.
/🆑
2023-09-28 11:37:52 -06:00
Sealed101
9e8f8371e8 Fixes lobstrosities becoming unmovable when killed during their charge windup (#78533)
## About The Pull Request

Hooks `charge_end()` on charger's death signal and shuffles the proc a
bit to accord for a non-moveloop source. This lets the charger to
properly unregister signals for its charge movement effects and unblocks
its movement via `actively_moving` var (which would be blocked in
`on_move()`).

## Changelog

🆑
fix: fixed lobstrosities becoming unmovable when killed during their
charge windup
/🆑
2023-09-27 22:02:11 -04:00
san7890
b368687208 Turns Robot Customers into Basic Mobs (#78611) 2023-09-27 21:15:37 -04:00
LemonInTheDark
99950517aa Quick Harddel Fixeees (#78253) 2023-09-27 21:05:55 -04:00
san7890
24ee1a4681 Refactors Snakes into Basic Animals (#78612) 2023-09-27 20:55:34 -04:00
Jacquerel
f861532d24 Basic Legion & Hivelord (#78624) 2023-09-27 18:41:07 -04:00
Jacquerel
0b8501cead Borgs will slow down when stuff is thrown at them (#78561)
## About The Pull Request

This feature was added in #75819 but didn't work, for two reasons.
Reason one: it was checking for throwing impact on the "I got shot by a
bullet" proc and then checking the throwforce of a bullet (generally 0,
because you don't throw those).
Reason two: the duration was throwforce / 10 seconds. This would apply a
slowdown which was usually one or fewer seconds, which might as well not
exist.

The solution to this is to assign it to the correct proc and give it a
flat duration for anything over a threshold of damage.
Currently this is 3 seconds for anything with 10 or more force (such as
the humble iron rod). You can reapply it by just throwing more stuff.

## Why It's Good For The Game

Cyborgs don't suffer health-based slowdown like humans.
This is good because cyborg combat should be similar to humans, but bad
because our move speed config is so ludicrously high that it makes
fighting anyone at full speed a real pain in the ass.
Since flashes have been nerfed to require two clicks in order to stun a
cyborg, you have to be able to catch them to apply the second click.
Throwing something at them should make this more likely.

## Changelog

🆑
fix: Throwing things at cyborgs will now slow them down, as intended
balance: Adjusted the calculation of throwforce -> slowdown for cyborgs
such that it is simply a flat duration for anything above a certain
damage threshold (the value of throwing iron rods)
/🆑
2023-09-27 15:51:01 -06:00
DATAxPUNGED
33b2124112 You can now pick the limb you want replaced with the Prosthetic Limb Quirk. (#78517)
## About The Pull Request

The Prosthetic Limb quirk allows you to pick the limb you want. The
default is still random
## Why It's Good For The Game

Good for character customization, which is always nice. Statics who got
a specific limb replaced can now represent that properly in-game.
Also, this makes the quirk show up on the dummy on the character
customization again. This *does* cause a slight issue where when you
switch to another character, it keeps the previous' skin color, but it's
minor enough that i think the benefits are worth the drawback. If asked
i will make it not appear on the dummy though.
## Changelog
DATA_, with great help from Kapu🆑
add: You can now choose the prosthetic you want with the Prosthetic Limb
quirk.
/🆑
2023-09-27 19:44:17 +01:00
Tim
d24cd6e32b Fix altars not allowing items to be sacrificed (#78542)
## About The Pull Request
Fixes #78529
Caused by #78429

They forgot to include the `!` operator when doing an early return for
sacrificial items. Also cleaned up a little bit of the code.

## Why It's Good For The Game
Chaplains can now perform their holy duties properly.

## Changelog
🆑
fix: Fix altars not allowing items to be sacrificed
/🆑
2023-09-27 15:53:58 +01:00
carlarctg
8d57758420 Converts slapcrafting into a component (#78450)
## About The Pull Request

Converts slapcrafting into a component!

The component is added on to an ingredient (presumably the main
ingredient) with a list of recipes attached. If you interact an
ingredient (if no ignredients, a tool) with it, you will start crafting
the recipe. If there's multiple, pick between them with a radial menu.

Opening on draft as there's just a liiiiil bit left to do. The actual
wired rod was left for last.

## Why It's Good For The Game

Slapcrafting is simply better and more accessible and less laggy than
menu crafting. By making it a component we can attach it to things in
which it'd make sense to while stopping unintended weirdness that might
arise from this being global.

Additionally the way examine lets you see crafting recipes opens up
visibility for those, which allows new players to learn about them in a
intuitive manner.

## Changelog

🆑
refactor: Turned slapcrafting into a component! You can examine
compatible items to see what recipes they can be used in, and what the
ingredients for them are. For example, spears and the head-on-spear
crafting recipe.
/🆑
2023-09-27 12:38:10 +01:00
Sealed101
bc6ba40852 Prevent things from the feature list generating on turfs with flora (#78558)
## About The Pull Request

which basically means no geysers on the same turf as a plant turf.
they're both structures but the for loop before this one checks for
same-type structures in a radius. and bush geysers look stupid! and
weird! and stupid!

## Changelog

🆑
fix: fixed geysers spawning on turfs with plants
/🆑
2023-09-27 07:00:44 +02:00
carlarctg
047f7aa316 Fixed headless zambos and the oversight of no bio armor resistance (#78589)
## About The Pull Request

Fixed zombies being able to infect headless corpses (Including former
zombies)

Fixed bio armor being totally useless against zombies. Now it checks how
hurt your limb is: If it's more than the bio armor value, you get
infected. THICKMATERIAL clothing guarantees at least 25 damage required
to infect you, non-thick clothing reduces effective defence by 25. In
practice this means people with MODsuits, biosuits will resist infection
unless they're pummeled into crit, and wearing a firesuit will save you
from the first few slashes.

Fixed the bomb hood armor not having the same bio armor value as bomb
armor.

Added a message to the zed when they succesfully infect someone.

Turned some proc names into snake_case rather than, uh, nospacecase.

## Why It's Good For The Game

> Fixed zombies being able to infect headless corpses (Including former
zombies)

This is pretty cool but it also means you can't actually permanently
kill a zombie if they just get slashed again by another zombie.

> Fixed bio armor being totally useless against zombies. Now it checks
how hurt your limb is: If it's more than the bio armor value, you get
infected. THICKMATERIAL clothing guarantees at least 25 damage required
to infect you, non-thick clothing reduces effective defence by 25. In
practice this means people with MODsuits, biosuits will resist infection
unless they're pummeled into crit, and wearing a firesuit will save you
from the first few slashes.

Melbert told me this is an oversight, so I, uh, 'fixed' it? This also
lets people have some true actual defence against zombie infections,
without making them immune to it.

> Fixed the bomb hood armor not having the same bio armor value as bomb
armor.

Bug I noticed while going over bio armors. 

> Added a message to the zed when they succesfully infect someone.

QoL and good feedback

> Turned some proc names into snake_case rather than, uh, nospacecase.

what the hell do you call isuckatnamignprocs(). what case is that.
cougarcase?

## Changelog

🆑
fix: Fixed zombies being able to infect headless corpses (Including
former zombies)
fix: Fixed bio armor being totally useless against zombies. Now it
checks how hurt your limb is: If it's more than the bio armor value, you
get infected. THICKMATERIAL clothing guarantees at least 25 damage
required to infect you, non-thick clothing reduces effective defence by
25. In practice this means people with MODsuits, biosuits will resist
infection unless they're pummeled into crit, and wearing a firesuit will
save you from the first few slashes.
fix: Fixed the bomb hood armor not having the same bio armor value as
bomb armor.
qol: Added a message to the zed when they succesfully infect someone.
code: Turned some proc names into snake_case rather than, uh,
nospacecase.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-09-27 06:56:41 +02:00
GPeckman
efcff341a9 Planetary atmos fix (#78602)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

The code for generating random atmospheres for lavaland and icemoon has
variables that define the minimum and maximum pressure that the
atmosphere can be. However, due to an oversight, it was possible for the
actual pressure to be below this minimum. This caused problems for the
flight potion wings, as the wings will not work if the pressure is lower
than the minimum lavaland/icemoon pressure.

I tested this by making a quick test proc that would generate lavaland
atmos 100 times, and count how often the final pressure was lower than
the minimum pressure. I ran it a few times after making my changes, and
it returned 0 failures every time, so I'm confident that my code works.

<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

## Why It's Good For The Game

I think its good practice for minimums and maximums variables like this
to actually be hard limits. Furthermore, if there's _one_ place that
mining loot should actually be useful, then its outside where you mine.

<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
fix: The flight potion wings will no longer fail to work on
lavaland/icemoon on rare occasions.
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
2023-09-27 06:52:32 +02:00
MrMelbert
a69ede8114 Adds respawn config option forcing respawn as another character slot (#78459)
## About The Pull Request

Adds an option to the respawn config which forces you to pick another
character (slot) before you respawn.

## Why It's Good For The Game

Just an idea i'm throwing out there, not necessarily pushing for it to
be enabled on any servers.

Respawning as an alternative character can be a good way to make people
less frustrated at dying, particularly if paired with the cooldown
config that already exists:

"Oh shucks, I died and got my head cut off and got absorbed and got
spaced by some changeling. I won't be able to finish my project or
whatever. At least in 15 minutes I may be able to join as my botanist
character to try something else rather than having to wait an hour and a
half for the round to tick over."

Also nice for downstream support. 

(Obviously you can just, *ban* people who respawn as the same character,
use an honor system, but codifying it seems better than not.)

## Changelog

🆑 Melbert
config: Adds a config option for player respawning that enables
respawns, but forces you pick a new character.
config: "NORESPAWN" has been replaced with "ALLOW_RESPAWN 0". Unlimited
respawns is "ALLOW_RESPAWN 1" and character limited respawns is
"ALLOW_RESPAWN 2".
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-09-26 19:17:37 -06:00
Iamgoofball
dd87788877 TTS: Gas Mask muffling, Hailer Mask voice effects, support for more filters that use samplerate, voice effects for lizards, ethereals, and xenomorphs. (#78567)
## About The Pull Request


https://github.com/tgstation/tgstation/assets/4081722/7c8df2e2-8795-4048-b11e-e831f749a097


https://github.com/tgstation/tgstation/assets/4081722/d0bec7fd-25b1-4bdd-98a6-0ebfea749551


https://github.com/tgstation/tgstation/assets/4081722/31c0259a-2bd4-4575-a758-a2044ccf17b0


## Why It's Good For The Game

Improves TTS audio immersion.

## Changelog
🆑
qol: Gas masks now muffle your voice with TTS.
qol: Security Hailer masks now disguise your voice to protect your right
to brutalize greytiders.
qol: Lizards, Ethereals, and Xenomorphs now have a vocal effect.
qol: Security Records now show someone's voice name.
/🆑
2023-09-27 01:01:47 +00:00
distributivgesetz
5ae576d39f Fixes a callback qdeletion during acid component deletion (#78536)
## About The Pull Request

Title summarizes all.

## Why It's Good For The Game

callback qdel bad runtime good

## Changelog

nothing playerfacing lets be real
2023-09-26 15:29:22 -06:00
Jacquerel
517d33e6f0 Basic blob mobs (#78520)
## About The Pull Request

I remembered today that blob code is ass, especially blob spores.
There's still a lot to improve but I cleaned up _some_ of it by
converting these mobs.
Now they use a newer framework and more signal handling as compared to
circular references.

I _expect_ the behaviour here to largely be the same as it was or
similar. I haven't added anything fancy or new.

This is a reasonably big PR but at least all of the files are small?
Everything here touched every other thing enough that it didnt make
sense to split up sorry.

Other things I did in code:
- Experimented with replacing the `mob/blob` subtype with a component.
Don't know if this is genius or stupid.
- AI subtree which just walks somewhere. We've used this behaviour a lot
but never given it its own subtree.
- Blob Spores and Zombies are two different mobs now instead of being
one mob which just changes every single one of its properties.
- Made a few living defence procs call super, because the only thing
super does was send a signal and we weren't doing that for no reason.
Also added a couple extra signals for intercepts we did not have.

## Changelog

🆑
fix: Blob spores will respond to rallies more reliably (it won't runtime
every time they try and pathfind).
fix: Blobbernaut pain animation overlays should align with the direction
the mob is facing instead of always facing South
refactor: Blob spores, zombies, and blobbernauts now all use the basic
mob framework. They should work the same, but please report any issues.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
2023-09-26 15:28:26 -06:00
Ben10Omintrix
a65d88dd03 basic mobs ranged attacks can check for friendly fire (#78451)
## About The Pull Request
basic mobs can check for friends in the way before firing a attack. if
they find someone in the way they will try to adjust their position so
their friends dont get hit by the projectiles


## Why It's Good For The Game
nice optional feature people can put on the monsters they create

## Changelog
🆑
add: added ranged attack friendly fire checks for basic mobs. minebots
and hivebots will now try to avoid shooting their friends
/🆑
2023-09-25 16:19:58 -06:00
tattle
2a73427ee0 Add new sounds for animals, basic animals make sound on audible emote (#78499)
## About The Pull Why It's Good For The Game Request
More sound immersion. Also just makes sense for sounds to play when an
animal is both saying something and using an audible emote.

Crab click: https://freesound.org/people/JarredGibb/sounds/263882/
Chitter: https://freesound.org/people/ForSoundDesign/sounds/687302/
Chicks: https://pixabay.com/sound-effects/chicks-very-young-56075/
Chicken: https://freesound.org/people/Breviceps/sounds/456803/


https://github.com/tgstation/tgstation/assets/66640614/29cd4e8e-b9c3-4f71-be0d-8c3f3de40eba


https://github.com/tgstation/tgstation/assets/66640614/9a24c1a8-0707-43ad-adec-b7ce1eddb5f6


https://github.com/tgstation/tgstation/assets/66640614/21cc37ae-c49c-461a-83c5-271f6d577fc6

## Changelog
🆑 tattle
qol: Basic animals now make sounds for audible emotes
sound: Added new sound effects for chicks, chickens, crabs, and insects
/🆑

Co-authored-by: tattle <article.disaster@gmail.com>
2023-09-25 15:55:16 -06:00
carlarctg
c4ac48f382 Refactored Mirrors (#77842)
## About The Pull Request

Heavily refactored mirrors to be less ass cancer 1998 code. Player
facing changes are that mirrors now use a radial menu, women can get
beards in magic mirrors, made the magic mirror 'change sex' option Woke
(it supports the 4 official genders and physique as well)

Fixed Pride Mirror teleporting you into the space on the first use. Now
it waits until you officially cancel and say 'I am Done' so you can
customize yourself to your liking.

With a change this big theres bound to be some small tidbits added here
and there (bald people get sad if they try to change their hairdo)

## Why It's Good For The Game

Bad code is bad and I need gbp and I am too hot and too tired to make a
proper description

## Changelog

🆑
refactor: Heavily refactored mirrors to be less ass cancer 1998 code.
Player facing changes are that mirrors now use a radial menu, women can
get beards in magic mirrors, made the magic mirror 'change sex' option
Woke (it supports the 4 official genders and physique as well)
fix: Fixed Pride Mirror teleporting you into the space on the first use.
Now it waits until you officially cancel and say 'I am Done' so you can
customize yourself to your liking.
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
2023-09-25 19:39:39 +00:00
GPeckman
3cf748f223 Fixes tackling issues with stun immune tacklers (#78494)
## About The Pull Request

When a human uses gripper gloves and such to perform a tackle, it does
some stuff with knockdowns. First, at the start of the tackle, the
tackler is given 1 or 2 seconds of knockdown. This knockdown bypasses
stun immunity. If the tackle and its rolled to be an expert or monster
tackle, then this initial knockdown is cleared. However, the knockdown
clearing does NOT bypass stun immunity. This ironically meant that stun
immune tacklers would remain knocked down when landing a monster tackle,
and it would cause a runtime because knocked down people can't grab.
This PR just makes the knockdown clear bypass stun immunity as well.
Closes #78441.
2023-09-25 12:49:15 -05:00
san7890
840a1f3694 Fixes map votes of only one choice (#78509)
## About The Pull Request

Unfortunately, back in #70340 (4085e792ab)
which was declared to fix the issue of having only one map to vote for,
I cocked up a part of it. For some reason, the part where it states that
only one map could be voted for would only play on the emergency shuttle
leaving. I think I did this because of the fact that the mapvote would
auto-call, and this didn't really respect the fact that people would
also call their own votes with only one map to vote for. Thus, the vote
would fire with one map to choose for and there wouldn't be the message
on there being only one map to vote for that I added in the
aforementioned PR. This brings it back to the intended working
condition.
2023-09-25 12:47:53 -05:00
jimmyl
cf5360acd8 [no gbp] fixes blackboard speech error (#78551)
## About The Pull Request

i changed initial to list()

## Why It's Good For The Game


![image](https://github.com/tgstation/tgstation/assets/70376633/4c289c2e-8974-4c4e-9d91-f2502134165d)

## Changelog
i dont think runtimes are playerfacing

---------

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
2023-09-25 09:23:47 -04:00
lessthanthree
eaf115805f Successful restart vote restarts on current map (#78510)
## About The Pull Request

A successful restart vote will revert any pending map change. Also
performs the end round task so persistence data gets saved.

## Why It's Good For The Game

Admin request for lowpop hours.

## Changelog

🆑 LT3
admin: Successful restart votes will now restart on the current map
code: End round and persistence data will be saved before executing
successful restart vote
/🆑
2023-09-25 02:29:34 +01:00
Pickle-Coding
64cbbdbf2c [NO GBP]Zap strength is now measured in joules. NT CIMs will now display the power transmission from the zaps, accounting for every factor. (#78310)
## About The Pull Request
Zap strength is now measured in joules. Scales everything to account for
this.

NT CIMS will now display the zap power transmission in watts, instead of
a modifier. This will allow you to actually see how much power the
supermatter is generating accurately, without knowledge of hidden
multipliers. NT CIMs will also show the internal energy gain from heat
in eV/K/s, so you can easily figure out how internal energy gain works,
and how much energy gain it actually gives. The internal energy
measurement will also adjust its prefix. Internal energy is now a
measure of internal energy, rather than internal energy density,
removing the "/cm^3".

Here is what it looked like: 
![Screenshot
(25)](https://github.com/tgstation/tgstation/assets/58013024/781323d4-db91-4a78-9a46-8152022993ed)


This image was created on an earlier commit where the numbers were wrong
due to a hidden multiplier that got removed later, so keep that in mind.

Also fixes inactive supermatters unnecessarily scaling delta time. The
high energy (>5GeV) additional zaps now also scale with delta time.

The code in this PR is absolute garbage trash and there are some major
issues, so I'm drafting this for now.
## Why It's Good For The Game
Makes it more clear what the factors add, and also how much power the SM
is releasing. Zap strength being measured in joules will simplify a lot
of things, making power balance more clear rather than guessimating.
Adjusting the prefix for internal energy is just the natural thing to
do. The per cubic centimeter part of internal energy would imply it is
energy density, however it is functionally not. It would probably
confuse people thinking the volume of the turf or the size of the
supermatter actually matters for what the internal energy does, when it
does not (except for gas absorption I guess, which changes heating/mol
requirements, but nothing else), so I am removing that part.
## Changelog
🆑
qol: NT CIMs shows how much power the supermatter is releasing.
qol: NT CIMs internal energy will adjust its prefix.
qol: Energy displays (such as multitooling grid) will use the full range
of SI prefixes available, up to the peta prefix if you somehow managed
to reach that.
del: Removes the per cubic centimeter part of internal energy.
fix: Fix unnecessary delta time scaling on inactive supermatters.
fix: Fix high energy zaps not scaling with delta time.
fix: Fixes grounding rods lying about potential power you can generate.
code: Convert supermatter_zap() and tesla_zap() zap_str argument unit to
be in joules, and scales everything that uses that argument.
/🆑
2023-09-25 10:51:40 +13:00
MrMelbert
7c2cb68a35 Changelings can now speak through their decoy brain if placed in an MMI (#78342)
## About The Pull Request

- If a changeling's decoy brain is placed in an MMI, they will now be
prompted to speak through it.
- They can speak through the decoy even if incapacitated or dead (or
fake-dead).


https://github.com/tgstation/tgstation/assets/51863163/804bd48a-c4b8-4feb-b021-019ea70e4b8e

## Why It's Good For The Game

The oft-controversial ling MMI test has been brought up time and time
again so I figure I throw my cards in for a solution.

We want as few ways as possible for people to hard and fast discover
whether someone is an antag, especially changling which is supposed to
revel in paranoia. This soft-patches out a big way, the MMI test, in
which you place a ling's brain in an MMI to determine if it's vestigial
and therefore, a ling.

Now the ling player can provide some benefit of the doubt by speaking
through the brain as normal, appearing active while actually in their
body still.

## Changelog

🆑 Melbert
add: Changelings can now speak through their decoy brain if it is placed
in an MMI, to maintain the illusion they are actually dead and have been
debrained.
/🆑
2023-09-24 07:17:23 +00:00
Ghom
6fa13af5be Fixes beams rendering below mobs by default. The fishing line is no longer emissive. (#78170)
## About The Pull Request
That of beams being layered below mobs has been a minor issue ever since
that mess that is FoV was implemented (with the exception of chain
lighting of the 'lighting' holoparasite type). I'm changing the plane of
beams to GAME_PLANE_UPPER_FOV_HIDDEN along a couple other things.

## Why It's Good For The Game
Re-read the above section, also fishing lines shouldn't generally glow
in the dark like very thin lightsabers, and them being layered below
mobs has always been a peeve to me.

## Changelog

🆑
fix: Fixed beams rendering below mobs by default.
fix: The fishing line beam is no longer emissive (it doesn't glow in the
dark).
/🆑

---------

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
2023-09-23 21:37:07 -04:00
jimmyl
5db7992b09 basicmob clowns (#78448)
## About The Pull Request

this is a mostly 1 to 1 port of simpleanimal clowns to basicmob clowns
this means they have 1 more brain cell
and they waddle



https://github.com/tgstation/tgstation/assets/70376633/0c5f01c7-fea2-4d8c-9fc1-764c1557e1b8



## Why It's Good For The Game


![image](https://github.com/tgstation/tgstation/assets/70376633/f92c85ea-33f2-4cf3-858f-103c0958ff97)

## Changelog
🆑
refactor: clowns are basicmobs now
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-09-23 14:46:11 +00:00
Jeremiah
a3849062b8 Feature: bitrunner, a new supply role (READY) (#77259)
## About The Pull Request
[Design doc](https://hackmd.io/@shadowh4nd/r1P7atPjn) 

Adds a new supply role centered on short dungeon-esque runs with a focus
on unifying the job with the fun part. Some virtual domains are combat
related, some are silly, some focus on "objectives". Avatar health is
linked to your physical presence and retries are limited.


<details>
<summary>Photos, WIP</summary>

Net pod stasis

![netpod](https://github.com/tgstation/tgstation/assets/42397676/d99073a4-2438-4600-83c0-cafb7b3fee55)

Server loaded

![](https://cdn.discordapp.com/attachments/1131433451841662996/1135304774976278759/dreamseeker_N14j6dwLcK.gif)

Server cooldown

![](https://cdn.discordapp.com/attachments/1131433451841662996/1135304775945179217/dreamseeker_NkIwWLJZma.gif)

the quantum console UI
![Screenshot 2023-08-05
105742](https://github.com/tgstation/tgstation/assets/42397676/3a45feaf-8c80-46b2-81c9-355932d1b014)

Cyber police antag page
![Screenshot 2023-08-16
205303](https://github.com/tgstation/tgstation/assets/42397676/fc28bcdd-2a2a-487b-927c-904f224c1b89)

A safehouse

![image](https://github.com/tgstation/tgstation/assets/42397676/c22ac115-4e00-432a-aeeb-b6afdb1ef750)

Domain info page, every domain gets this (and sometimes help text)
![Screenshot 2023-08-04
141859](https://github.com/tgstation/tgstation/assets/42397676/ba9ed6d9-a318-4466-b246-d2da0fa05676)

Me getting steamrolled in one of the missions

![syndicant](https://github.com/tgstation/tgstation/assets/42397676/3eb3099a-f9b2-4431-854d-50d8cad9b7f0)

Ghost roles getting notified that server is kicking them out
![Screenshot 2023-08-04
135454](https://github.com/tgstation/tgstation/assets/42397676/edab916c-6255-4b83-b2e7-155df2f03aab)

Players enjoying the new combat missions
![Screenshot 2023-08-05
005727](https://github.com/tgstation/tgstation/assets/42397676/e302a66f-610d-4fe1-82e0-7c8aec3913ea)

Players exploring some of the virtual maps
![Screenshot 2023-08-06
220919](https://github.com/tgstation/tgstation/assets/42397676/75a92a0b-6aa1-4bac-8fd1-c9fb47c955da)

(Not part of the PR, but)
![Screenshot 2023-08-06
221527](https://github.com/tgstation/tgstation/assets/42397676/012475ec-bfa5-4fd3-9dcb-31d222bb7bef)

New bitrunner vendor

![dreamseeker_V62h2BGdEl](https://github.com/tgstation/tgstation/assets/42397676/37ca8f69-f75e-45c9-b324-e6b31696c7b7)

</details>

## Why It's Good For The Game
Content, firstly, and moreso being supply department content.

The framework that this implements is a great (preauthorized)
replacement for two systems which are collecting dust: BEPIS and the
gateway. They integrate into this system and it's a direct upgrade.

This adds a way for the players on station to generate materials (if
that remains). The nice part about it is that I can throw balance and
believability to the wind, as unlike its unrelated predecessor VR or
away missions, bitrunning entirely washes its hands of the map and mobs
each reboot.

It offers a very expandable map framework to add content and it's all
fairly well documented.

I'd like to add a feature that represents the idea that jobs don't have
to be mundane and "external" jobs can stay tied to the main gameplay
loop.

## Changelog
jlsnow301, kinneb, mmmiracles, ical92, spockye
🆑
add: Adds Bitrunning to supply department- a semi-offstation role that
rewards teamwork.
add: Adds new machines to complement the job- net pod, quantum server,
quantum consoles, and the nexacache vendor.
add: Adds several new maps which can be loaded and unloaded at will.
add: Some flair for the new bitrunning vendor.
add: Adds a new antagonist for the virtual domain only. Short lived
ghost role that fights bitrunners.
del: Removes the BEPIS machine, moves its tech into the Bitrunning
vendor.
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->

---------

Co-authored-by: MMMiracles <lolaccount1@hotmail.com>
Co-authored-by: Ical <wolfsgamingtips@gmail.com>
Co-authored-by: spockye <79304582+spockye@users.noreply.github.com>
Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
2023-09-23 11:14:12 +02:00
Jacquerel
ad81ca6f4c Allows admins to overrule God (#78429)
## About The Pull Request

Adds a "manage religious sect" verb to the "game" menu of the admin
panel.
It can be used to assign the chaplain's sect if they haven't picked one
yet, or reassign it (to a different one, or to nothing) if they already
have.
This is likely mostly going to be used for ahelps where someone
misclicks or suddenly logs off and wants to be replaced by a different
chaplain with different ideas.

## Why It's Good For The Game

Admins asked me to make it

## Changelog

🆑
admin: Admins can now reset or modify the chaplain's sect from a UI
panel
/🆑
2023-09-22 19:13:38 -06:00
Jacquerel
b2ecd81be4 Basic Mob Brimdemon (#78424)
## About The Pull Request

Fixes #71330

The brimdemon was basically already perfect (well, it has a novel means
of attacking) so I didn't get too fancy with this one, it's _largely_
just a straightforward conversion.
Following this change it's a little slower to back off, but better at
lining up with people in order to blast them. Additionally, its beam is
now a mob ability so you can give it to other mobs if you so desire.

Because I can't help doing a _little_ tinkering, Brimdemons now explode
2.5 seconds after they die, after a brief warning animation.

## Why It's Good For The Game

Simple mobs must die

## Changelog

🆑
add: Brimdemon corpses release an explosion shortly after death, just to
keep you on your toes.
refactor: Brimdemons now use the basic mob framework which (should)
improve their pathfinding somewhat. Please bug report any unusual
behaviour.
admin: The brimdemon's beam ability can be given to any mob, for your
Binding of Isaac event
/🆑
2023-09-22 19:12:43 -06:00
lessthanthree
2fe2418c0f Fix ghosts/godmode mobs causing supermatter resonance (#78492)
## About The Pull Request

Adds the incorporeal/godmode check to living mob interactions with the
supermatter. Already in hand_hit() but there are other procs that can be
triggered as well.

## Why It's Good For The Game

Ghost animals, revenants, mobs with godmode enabled should not cause
supermatter resonance messages when interacting with it.

Fixes https://github.com/tgstation/tgstation/issues/78490

## Changelog

🆑 LT3
fix: Ghosts and godmode mobs will no longer create resonance when
touching the supermatter crystal
/🆑
2023-09-22 21:39:00 +01:00
lessthanthree
00fc613f07 Dusting Poly causes a power surge (#78495)
## About The Pull Request

With surges now added, causes a power surge event when Poly is dusted on
the supermatter crystal.

Requires https://github.com/tgstation/tgstation/pull/78492

## Why It's Good For The Game

Adds some flavor to killing the engineering department's pet.

## Changelog

🆑 LT3
add: Poly now causes a power surge when dusted by the supermatter
crystal
/🆑
2023-09-22 16:36:02 -04:00
lizardqueenlexi
84ca9d8278 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.
/🆑
2023-09-22 20:32:39 +02:00
Ben10Omintrix
0976420f2f 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!

![petalcolors](https://github.com/tgstation/tgstation/assets/138636438/7c657c49-9186-4563-a93f-eba35e335ce9)


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.


![plantbotany](https://github.com/tgstation/tgstation/assets/138636438/4cde0613-0869-4fea-8851-2e6f4680d9d7)

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
/🆑
2023-09-22 15:28:48 +01:00
Sealed101
1b483e7b28 Prevents moonicorns from placing fairy grass on space/chasm/lava/water turfs (#78368)
## About The Pull Request

Apparently space turfs aren't openspace. Who knew!
They already don't create bridges over openspace turfs, so no reason for
em to make space bridges either.

## Changelog

🆑
fix: fixed moonicorns making space/chasm/lava/water bridges with their
fairy grass
/🆑
2023-09-21 05:47:40 -04:00
Jacquerel
7025e5da5e Replaces "Bread" smite with "Objectify" (#78445)
Instead of turning people into bread, the bread smite can now turn people into any object (including bread).
2023-09-21 08:24:37 +02:00
Shadow-Quill
428828373d RCD construction effects no longer fall into chasms (#78446)
## About The Pull Request

Adds the construction effect to the chasm blacklist.

## Why It's Good For The Game


![image](https://github.com/tgstation/tgstation/assets/44811257/76a9cb90-19d9-447b-85d2-56916d8cd8ca)
Fixes #78440 

## Changelog
🆑
fix: RCD Construction effects will no longer fall into chasms.
/🆑
2023-09-20 14:43:52 -06:00
Coconutwarrior97
7b9d3d5ce6 Holo para refund fix (#78431)
## About The Pull Request
Holoparasite injector can be refunded if its been used, this is because
the uplink_reimburse element is not removed from it when its used. Added
some signal code to it so that this is fixed.

## Why It's Good For The Game
Fixes a bug.

## Changelog

Fixes a bug allowing holopara injectors to be refundable when used. 

🆑
fix: Fixes a bug allowing holopara injectors to be refundable when used.
/🆑
2023-09-20 14:27:59 -06:00