Commit Graph

1977 Commits

Author SHA1 Message Date
MrMelbert
12505721e6 Fixes some heartbeat things we didn't do (#82327)
## About The Pull Request

The things discussed in the comments of #82305 were not done before it
was merged. Hindsight is 20/20, shoulda drafted it

## Changelog

🆑 Melbret
fix: Revival Surgery, Strange Reagent, and the Reviver Implant will
restart your heart when you are revived
/🆑
2024-03-31 14:19:46 -06:00
_0Steven
a0d7c41f7f Let ethereals starve again (#82308)
## About The Pull Request

Ethereals use energy as 'food', so of course #81579 had to touch them.
To bring them in line with the new standard, the Ethereal charge levels
were updated to be in megajoules.

466b3df048/code/__DEFINES/mobs.dm (L292-L299)

7fa8daad63/code/__DEFINES/mobs.dm (L285-L292)
However! This forgot to update the rate at which Ethereals passively
discharge.

7fa8daad63/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm (L11-L14)

7fa8daad63/code/__DEFINES/mobs.dm (L437)
Meaning it's effectively a thousand times less with the new charge
levels.

So we simply update this define to be in kilowatts.
```dm
#define ETHEREAL_CHARGE_FACTOR (0.8 KILO WATTS) //factor at which ethereal's charge decreases per second
```
## Why It's Good For The Game

Fixes issue with ethereal hunger caused by #81579.
## Changelog
🆑
fix: Ethereal starvation has been updated to the new joules/watts
standard. Congratulations Ethereals! You can starve again!
/🆑
2024-03-31 14:34:16 +02:00
Profakos
b20c982404 Converts slimes to basic mobs (#82176)
## About The Pull Request

After months of preparation, and further months of work, I am finally
done. Please bear with me, as this is a massive refactor, but I have
already atomized everything I could. This is now ready for review.

General

- 	The hilbert hotel slimes are now a subtype instead of a varedit.
- The `use_mob_ability` subtree now also accepts non cooldown abilities.
If set_behaviours is set up properly, mobs won't keep continously
triggering it as if it were a 0 second cooldown action. The alternative
would have been turning the slime abilities into cooldown abilities.
- Wrestling off a slime now signs up to the `COMSIG_ATOM_ATTACK_HAND`
signal, instead of being part of attack_hand.
- Adds datum/ai_controller/controller as a fourth, optional argument to
`/datum/ai_behavior/find_hunt_target/valid_dinner()` to make it possible
to access blackboard keys.
- Slimes no longer attack windows if they would accidentally move into
them (when the conditions are met), since random walk behaviour ignores
tiles they can't go in. It was also not worth to keep. Did you know this
was the sole override of `ObjBump()`?
- Examine was made less snowflaky/bespoke. Also added a new element:
`/datum/element/basic_health_examine`, which is a simple bespoke element
that prints out a custom message based on how damaged the basic mob it
is attached to is.
- Slimes only perform knockdown instead of paralysis, as they can attack
more often now, and paralysis is not that fun.
- LAssailant has been removed due being archaic code. To befriend a
slime, you have to spawn a monkey with the slime console, or feed them a
sheet of plasma. Simple grabbing the monkey or stuffing them in
disposals do not work anymore. Slime console spawned monkeys will have a
visible status effect, with pheromones coming off them to make this
clearer.

Actions
- 	Feeding, reproduction and evolution is no longer a verb.
- Slime feeding is no longer an action button. You have to use right
click, or as previously, mousedrop. Slimes can always unbuckle from mobs
they are attached to.

Hunger 

- Instead randomly changing the starvation and max nutrition values
while growing up, evolution costs 200 nutrion. This makes the code more
readable, and behaviour more predictable, while still giving the
intended time between evolving and splitting. As a result, I could also
turn these into defines.
- Added a component that handles doing an effect over time while buckled
to a mob, until the mob dies or you get unbuckled.
- Slimes gained nutrition is no longer randomly multiplied by the damage
config value, but rather gain nutrition equal to twice the damage dealt.
You'll have to eat one monkey to evolve, just as before.
- Slimes do not heal passively. They only heal from eating. It was a
rather miniscule value that did not have much effect.
- Slimes generate electricity from hunger threshold, instead of the
random amount of hunger threshold + 100.

Environment

- Slimes take 15 damage from cold every second, instead of using a
complex formula (that also decreased the damage up to a point?).
- Slimes still heal from burn damage, but this is now set on the damage
coefficient list.
- Slimes instead of getting stunned by the cold, freeze in an ice cube.
BZ instead of setting them unconscious, calls the stasis status effect,
allowing you to safely stash your hungry slimes for later. They also no
longer slow down from the cold, as they are already slowed down by the
damage they get. Conversely they no longer get a speed up from a random
amount of temperature. I could be convinced to readd this either as part
of the basic sensitive component, or a similar one.

AI
- Removed the attacked_stacks system. Slimes will just perform regular
retaliation if you hit them in a harmful manner.
- Slimes now use the pet orders component. They will interrupt their
feeding when given a command by their master.
- Slimes have their own subtrees. I tried to replicate as much as I
could from the old code, dividing ancient code artifacts and intentional
stuff, so there might be some weirdness.
- Slime speech has been almost fully reduced to basic blorbing, as you
can not even understand them anymore, and most of them require the slime
to loop through all of their surroundings.
- Discipline does not have stacks either. Disciplined baby slimes have a
chance to clear their attack and hunt blackboard keys. All slimes will
stop feeding on the target otherwise.
- Since discipline is not a stack, rabidity instead gets removed at a
10% chance per disciplining.
- 	Slimes faces are a bit more randomly picked now.

## Why It's Good For The Game

- We want to convert all simple animals to basic mobs. Old slime code
was also very strange, and had some systems that have been replicated by
components.
- Slimes fully paralyzing you is not fun at all. Knockdown should give
you a fighting chance when a slime would like to eat you.
- Slimes slow down from the heavy damage they get from the cold, so I
don't think they need extra slowdown, nor do they need to speed up from
warmth, as they are already fast.
- Slimes turning into an icecube instead of becoming paralyzed from the
cold is more fun for the slimes, as they can break out for a few
moments. It is also funny.
- Slimes entering proper stasis from BZ is not just a visual indicator
of a slime that is safe to approach, but also keeps the slimes's hunger
value in check, allowing it to not starve while stopped. They can also
look around and blorble, instead of staring at a black screen, if player
controlled.
- The attack_stack and discipline_stack behaviours were rather
overcomplicated, and the xenobio mains I talked with didn't even know it
was a thing, so I argue it needed simplification.
- The bespoke friendship system of slimes was also too complicated.
Slimes slowly gained levels of trust, and at certain levels commands
costed friendship, and other levels, they did not. The binary friend/not
friend system that everything else in the game uses is much more
sensible.
- Using right click for feeding is much more sensible than using an
action, and then picking someone from a dropdown.
- Slime speech was very soulful but not only did it loop through
everything in sight, you couldn't even understand it unless you spoke
slime. Maybe it can be readded later in a different form.
- Slime's passive healing was miniscule, and having them rely on feeding
is more interesting.

also
fixes #81463

## Changelog

🆑
refactor: Slimes are now basic mobs. Please report any strange
behaviours!
balance: Slimes only stun you for two seconds when they shock you, the
rest of the duration is a knockdown.
balance: Slimes are not stunned from the cold, but rather, get frozen in
a freon icecube. BZ also puts them in complete stasis, instead of making
them unconscious. Their speed is likewise unchanged by temperatures.
balance: Slimes do not passively heal, they instead rely on feeding.
fix: Slimes can use the buckling screen alert to unbuckle and stop
feeding, along with clicking on the mob they are riding
/🆑
2024-03-27 16:40:52 -06:00
lessthanthree
5289bf367c Fixes starting self surgery (#82255)
## About The Pull Request

Fixes being unable to start self-surgery while laying down.

Closes https://github.com/tgstation/tgstation/issues/82034

## Changelog

🆑 LT3
fix: Fixed being unable to start self surgery
/🆑
2024-03-26 20:04:09 -06:00
Alexios
68032b2587 Readability Pass to Advanced Medical Tools (#82225)
## About The Pull Request

Update the sprites of the advanced surgical toolset, giving them
distinct colors and updating their lighting to reduce shades and
increase visual readability at normal resolutions.


![image](https://github.com/tgstation/tgstation/assets/32783144/4daa4f95-2415-4d60-a666-361ebfc52281)

![image](https://github.com/tgstation/tgstation/assets/32783144/b3dfba7b-3db9-42ab-b088-a6e592a3297a)

![image](https://github.com/tgstation/tgstation/assets/32783144/65efec62-aaec-4e86-8a3c-5a57aa08198e)


## Why It's Good For The Game

Currently, the advanced surgical toolset over-relies on the tooltip to
communicate item state quickly and accurately. This PR adds both color
differentials, and enhances the shape of the existing tools to help a
player tell them apart quickly and accurately. Additionally, it assists
in defining the general shape of the item with cleaned up shading to
decrease noisy patterns in the sprite.
## Changelog
🆑
image: Updated the Advanced Surgical Tool's sprites
code: Updated the Advanced Surgical Tool's light code
/🆑
2024-03-26 20:14:50 -04:00
MrMelbert
afe1b7443c Fix species var/hair_color not being used for, well, hair color (#82168)
## About The Pull Request

`var/hair_color` for species was intended to be used as a "this species
uses this type of hair color thing"

But at some point that got completely lost and now it's only used for
sprite accessories

This fixes that. That means Slimepeople now have properly slimey hair.
And Ethereals are less snowflake once more.

## Changelog

🆑 Melbert
fix: Fixed Slimepeople's hair not matching their slimey colors. 
/🆑
2024-03-24 13:25:46 -06:00
MrMelbert
959c15cdbe Fix some slime species subtypes not having burn resistance (#82164)
## About The Pull Request

All slime species limb subtypes now inherent from the parent `/jelly`
subtype, giving them all their proper burn resistance.

## Changelog

🆑 Melbert
fix: Slimepeople and Luminescents are now 50% burn resistant like
Stargazers
/🆑
2024-03-24 13:25:03 -06:00
MrMelbert
a8fc9cf7e2 Makes Bioware into Status Effects because they're just Status Effects but their own datum (#81989)
- Refactors `/datum/bioware` -> `/datum/status_effect/bioware`. 
- Literally everything bioware datum does is done by the status effect
API, including handing dupes / unique keys
- Tallies all blackbox surgeries done rather than just nerve splicing
2024-03-23 21:01:28 +00:00
MrMelbert
aa38fb4227 Jellyperson Hair Fix B: "If you're gonna have it, do it right" (#82167)
## About The Pull Request

#76074 Accidentally made all Slimepeople types have all head flags, when
Jellypeople and Luminescents should not have.

This is a proposed alternate fix to #82166 which, rather than removing
all hair from all jellypeople types (except slimes) , it makes all
jellypeople hair look like slime (like slimepeople).

This PR also fixes jellies have some head flags they shouldn't. 

## Changelog

🆑 Melberet
fix: Jellyperson, Luminescent, and Stargazer hair no longer look bad.
All jellyperson types no longer have eyesockets.
/🆑
2024-03-23 14:59:52 -06:00
Pickle-Coding
c1f11f26ce Converts arbitrary energy units to the joule. Fixes conservation of energy issues relating to charging cells. (#81579)
## About The Pull Request
Removes all arbitrary energy and power units in the codebase. Everything
is replaced with the joule and watt, with 1 = 1 joule, or 1 watt if you
are going to multiply by time. This is a visible change, where all
arbitrary energy units you see in the game will get proper prefixed
units of energy.

With power cells being converted to the joule, charging one joule of a
power cell will require one joule of energy.

The grid will now store energy, instead of power. When an energy usage
is described as using the watt, a power to energy conversion based on
the relevant subsystem's timing (usually multiplying by seconds_per_tick
or applying power_to_energy()) is needed before adding or removing from
the grid. Power usages that are described as the watt is really anything
you would scale by time before applying the load. If it's described as a
joule, no time conversion is needed. Players will still read the grid as
power, having no visible change.

Machines that dynamically use power with the use_power() proc will
directly drain from the grid (and apc cell if there isn't enough)
instead of just tallying it up on the dynamic power usages for the area.
This should be more robust at conserving energy as the surplus is
updated on the go, preventing charging cells from nothing.

APCs no longer consume power for the dynamic power usage channels. APCs
will consume power for static power usages. Because static power usages
are added up without checking surplus, static power consumption will be
applied before any machine processes. This will give a more truthful
surplus for dynamic power consumers.

APCs will display how much power it is using for charging the cell. APC
cell charging applies power in its own channel, which gets added up to
the total. This will prevent invisible power usage you see when looking
at the power monitoring console.

After testing in MetaStation, I found roundstart power consumption to be
around 406kW after all APCs get fully charged. During the roundstart APC
charge rush, the power consumption can get as high as over 2MW (up to
25kW per roundstart APC charging) as long as there's that much
available.

Because of the absurd potential power consumption of charging APCs near
roundstart, I have changed how APCs decide to charge. APCs will now
charge only after all other machines have processed in the machines
processing subsystem. This will make sure APC charging won't disrupt
machines taking from the grid, and should stop APCs getting their power
drained due to others demanding too much power while charging. I have
removed the delays for APC charging too, so they start charging
immediately whenever there's excess power. It also stops them turning
red when a small amount of cell gets drained (airlocks opening and shit
during APC charge rush), as they immediately become fully charged
(unless too much energy got drained somehow) before changing icon.

Engineering SMES now start at 100% charge instead of 75%. I noticed
cells were draining earlier than usual after these changes, so I am
making them start maxed to try and combat that.

These changes will fix all conservation of energy issues relating to
charging powercells.
## Why It's Good For The Game
Closes #73438
Closes #75789
Closes #80634
Closes #82031

Makes it much easier to interface with the power system in the codebase.
It's more intuitive. Removes a bunch of conservation of energy issues,
making energy and power much more meaningful. It will help the
simulation remain immersive as players won't encounter energy
duplication so easily. Arbitrary energy units getting replaced with the
joule will also tell people more meaningful information when reading it.
APC charging will feel more snappy.
## Changelog
🆑
fix: Fixes conservation of energy issues relating to charging
powercells.
qol: APCs will display how much power they are using to charge their
cell. This is accounted for in the power monitoring console.
qol: All arbitrary power cell energy units you see are replaced with
prefixed joules.
balance: As a consequence of the conservation of energy issues getting
fixed, the power consumption for charging cells is now very significant.
balance: APCs only use surplus power from the grid after every machine
processes when charging, preventing APCs from causing others to
discharge while charging.
balance: Engineering SMES start at max charge to combat the increased
energy loss due to conservation of energy fixes.
/🆑

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-03-23 16:58:56 +01:00
Bilbo367
466b3df048 Refactor removing unused defines. (#82115)
## About The Pull Request

Refactors a lot of the unused defines.

## Why It's Good For The Game

Refactors a lot of the unused defines.

## Changelog
Nothing player facing

---------

Co-authored-by: san7890 <the@san7890.com>
2024-03-22 21:29:35 -06:00
Varoxus
5a3938ce3e Fat trait fix attempt 2 (#81947)
## About The Pull Request
Adds in a new trait to handle the tackle defense bonus that was
previously granted by `TRAIT_FAT` to solve a few problems that were
occurring downstream, this new trait is handled by the stomach organ and
handles it all automatically. Also edits the lipoplasty check to see
that the target is fat from eating too much.

## Why It's Good For The Game
No functions will have their results altered by the change and it will
help solve some some issues downstream.

---------

Co-authored-by: san7890 <the@san7890.com>
2024-03-21 20:30:56 -06:00
Vekter
8b0f2f50b2 Ports additional Felinid ears from Orbstation (#82066)
## About The Pull Request
Adds 5 new ear options from Orbstation, originally PRed in
lizardqueenlexi/orbstation#360. Sprites by @Or-Fi-S.

Big:

![image](https://github.com/tgstation/tgstation/assets/7019927/5f847130-e5f5-44cc-adb4-c740c4c4f69b)

Coeurl (FFXIV Miqo'te style):

![image](https://github.com/tgstation/tgstation/assets/7019927/34448bee-d6af-4d3c-b796-384ec9904368)

Fold:

![image](https://github.com/tgstation/tgstation/assets/7019927/a7dafd05-f652-460e-9386-f7fcbef696e9)

Lynx:

![image](https://github.com/tgstation/tgstation/assets/7019927/174ff630-6eb8-4bb9-8f4f-791b70356c58)

Round:

![image](https://github.com/tgstation/tgstation/assets/7019927/b3a24d1b-66fa-4883-8c27-871ae8966d6c)

Also makes it so the code guarantees that custom ears on a felinid
actually count as felinid ears and not human ones, as the code wasn't
checking properly when preferences were applied. There's probably a
cleaner, more permanent way to do this and a refactor is needed
somewhere down the line (man that sprite accessories file is getting
long huh) but I'll leave that to a more competent coder.

## Why It's Good For The Game
More customization options are good also Cobby said I could


![image](https://github.com/tgstation/tgstation/assets/7019927/56bbe285-068f-41a1-92cc-9f3861875090)

## Changelog
🆑
add: Added 5 new Felinid ear options, ported from Orbstation! (Sprites
by Or-Fi-S)
/🆑

---------

Co-authored-by: _0Steven <jaydondegenerschool@gmail.com>
2024-03-19 19:42:58 -06:00
Nidvex250
9a9298ed5d Allows the use of wirecutters for Tend Wounds (#82069)
## About The Pull Request
I've always found it weird that we can clamp bleeders, excise infection,
and attach grafts to hearts with wirecutters, yet we can't use this same
logic to stitch someone back together via Tend Wounds with wirecutters.
This update remedies that.
This will only touch the Tend Wounds surgery procedure as I don't see
using wirecutters to fix someone's brain as a good idea since the tool
is a tad bulky in design, but something as broad as regular damage to a
body should be fine. (But feel free to start a conversation about that,
I'm curious what other medical mains think)
I will respect the original PR though and have the wirecutters set for
60, below the screwdriver's 65. I have tested the code and made sure
that the wirecutters were usable on the hemostat step.
## Why It's Good For The Game
This adds consistency to Tend Wounds and follows the logic other
surgeries give as it's reasonable to think that if you can clamp
bleeders with wirecutters then surely you can tend basic wounds with
them. I've definitely seen a few ghetto surgeons do exactly this and
accidentally kill a person they were trying to save, so I hope that this
tweak will prevent these accidental deaths in the future.
## Changelog
🆑
qol: Can now use wirecutters when performing Tend Wounds.
/🆑
2024-03-19 10:05:55 +01:00
tattle
8844c1078b Getting shrunk makes your voice small (#82025)
## About The Pull Request

![image](https://github.com/tgstation/tgstation/assets/66640614/83822a60-1324-45f2-9893-4a1628484d03)

![image](https://github.com/tgstation/tgstation/assets/66640614/9c22a846-d1b7-4b78-b773-cbfc1686528f)

![image](https://github.com/tgstation/tgstation/assets/66640614/84779e0c-02d8-4d0c-bbeb-c5bd176c4b6d)

![image](https://github.com/tgstation/tgstation/assets/66640614/90e76a29-8e8b-4a9e-86c5-3183fe8b60ee)


## Why It's Good For The Game
I think it's funny. Plus I like what helium introduced with the small
text, and wanted to add it to more places.

## Changelog
🆑 Tattle
add: Getting shrunk makes you talk small
/🆑

---------

Co-authored-by: tattle <article.disaster@gmail.com>
2024-03-16 20:03:27 +01:00
LemonInTheDark
ef714c1c34 Overlay Lighting Color/Intensity Pass (#81425)
## About The Pull Request

I was looking at screenshots of the game and realized we had a lot of
light sources that were really... flat.

Medium intensity, not colored at all, cringe.

So I went over all the uses of overlay styled lighting (since I've done
matrix lighting already) and gave them more unique features. Colors that
match the sprite they're used with, intensity to produce vibes, that
sort of thing.

It's kinda impossible to go one by one cause there's a LOT.

I may have gone a bit overboard with a few, I'm messing around with some
things like giving bots colors based off their department, etc. We'll
see how this all turns out.

Oh also I tweaked how the cone of overlay lighting is drawn. It seemed a
bit too present to me so I dropped the alpha down from like 200 to 120
at max (so it's roughly half of the mask's alpha so it's less
overwhelming

## Why It's Good For The Game

Lighting should be impactful, subtle and colorful

<details>
<summary>
Old Lights
</summary>


![dreamseeker_QJ5bFZxd63](https://github.com/tgstation/tgstation/assets/58055496/8ae74a95-32cb-473f-830a-ab4e1073a581)

![dreamseeker_DPVgI8wOoN](https://github.com/tgstation/tgstation/assets/58055496/149095af-a08a-4038-bf18-9e3401327452)

![dreamseeker_pyEmTAb37x](https://github.com/tgstation/tgstation/assets/58055496/6dbb6cf8-2ed7-4bc0-9d19-c64849088a33)

![dreamseeker_aDfvnea6YD](https://github.com/tgstation/tgstation/assets/58055496/4ed983e1-6be3-4513-ba3b-cecde08ccd38)

![dreamseeker_RnkQSwmxmc](https://github.com/tgstation/tgstation/assets/58055496/63e0210e-e1b1-42f0-be64-53d67c43f689)

![dreamseeker_G8NSC3lzAk](https://github.com/tgstation/tgstation/assets/58055496/93001925-904d-4061-8874-1d17bb225a90)

![dreamseeker_yASfxtbHDR](https://github.com/tgstation/tgstation/assets/58055496/ce0ae9ad-9067-44e0-9491-3ef331bbbb84)

![dreamseeker_4ecBbG5urI](https://github.com/tgstation/tgstation/assets/58055496/ce82f471-15c7-40ce-bc08-be4f5dc8a3b7)

![dreamseeker_udYlv8uAce](https://github.com/tgstation/tgstation/assets/58055496/c516a278-852b-44b8-ba7c-1203cea3f845)

![dreamseeker_bc2120Fnmr](https://github.com/tgstation/tgstation/assets/58055496/87a1429a-2329-4dd5-8c7b-ff44f54a08bb)

</details>

<details>
<summary>
New Lights
</summary>


![dreamseeker_0H11TyhGgx](https://github.com/tgstation/tgstation/assets/58055496/75b68a25-055e-488c-af82-b062dbe7413e)

![dreamseeker_2B9AENHsfl](https://github.com/tgstation/tgstation/assets/58055496/b52d441c-6ed3-495b-9ebd-9b0c9f924f30)

![dreamseeker_3vOVRRMTSP](https://github.com/tgstation/tgstation/assets/58055496/b265578f-34cc-4a0a-80ea-3237fb83df33)

![dreamseeker_5bTLup65rx](https://github.com/tgstation/tgstation/assets/58055496/6fcd3dc0-5927-458a-9f77-5582ad57a954)

![dreamseeker_iZzxZv4nfW](https://github.com/tgstation/tgstation/assets/58055496/67c3af13-2305-4130-936b-19ded08ccc4e)

![dreamseeker_Lhe9TSA0Av](https://github.com/tgstation/tgstation/assets/58055496/a5310e58-0ff1-45ac-bb81-b4a0212eb0ce)

![dreamseeker_ngQJUv0tV4](https://github.com/tgstation/tgstation/assets/58055496/c3d7423a-ab32-4401-9ffa-c4c3b7811334)

![dreamseeker_PL0z6sU7by](https://github.com/tgstation/tgstation/assets/58055496/2947d828-3aee-48c2-903f-2bf0db9077d2)

![dreamseeker_xineFZDzPA](https://github.com/tgstation/tgstation/assets/58055496/095ff8b0-51cf-4f7c-a2ee-752d9d7e87bd)

![dreamseeker_zpXxbZZakS](https://github.com/tgstation/tgstation/assets/58055496/c4200d35-a2fa-4c3f-8e88-1fd87f44cd46)

</details>

## Changelog
🆑
add: Tweaked the saturation, color and intensity of a bunch of lights
/🆑
2024-03-09 23:57:19 +00:00
John Willard
9ac81e1a64 New station trait job: Human AI (#81681)
## About The Pull Request

This PR does many things, I'll try to explain the basic/background stuff
to the main thing first:

1. Adds a new remote that allows a human to function like an AI. It
controls a fly that will fly around the station slowly, and when it
reaches a machine then the person can interact with it as if they were
an AI. This required changing a lot of silicon/AI checks with one that
also checks for this remote, and some messing with shared ui state.
2. Moves req_access from the obj and bot to ``/atom/movable`` which lets
it be shared between the two, no more copy-paste and one side lacking
features/checks/signals the other has.
3. Adds a check for AI config for AI-related station traits, which was
lacking prior

Now for the good part...
Adds a new station trait that replaces the AI with a Human.
This person is equipped with an AI headset (including Binary), an
advanced camera console, an omni door wand, the machine controller, and
their laws.
They are immune to the SAT's turrets (even if set to target borgs) and
are slow outside of the SAT, mimicing the actions of the AI.

They interact with the world through their advanced camera console,
which allows them to do most AI stuff needed, and the holopad they can
connect to without having to ring first (like Command can).

They are given a paper with the laws they must follow, but since they
are human they are able to bend it. Cyborgs that run the default lawset
are "slaved" to them via an unremovable law 0, so the Human AI can bend
the laws if they really need to (for their own survival n such), and
make the cyborgs obey their commands above laws, but in general this
shouldn't be a frequent occurrence. This does take into account the
unique AI trait, so it's not guaranteed Asimov.

When this station trait rolls, all Intellicards, AI uploads, and AI core
boards are destroyed and are unresearchable. They can be spawned by
admins in-game if necessary. Maybe in the future we can also exclude
Oldstation from this but I haven't really decided.

Extra perks:

Human AI spawns with a Robotic voicebox (unless they are a body purist)
and teleport blocking implant, so they can't use teleporters to bypass
their on-station slowdown.
They also have an infinite laser pointer that can be used to blind
through their camera console. This is unfortunately nerfed from the
recent borg balance PR that removed its stun. This was meant to be the
alternative to no longer being able to permanently lock borgs down like
AIs can (or more than one, for that matter).
They aren't affected by Roburgers, Acid, and Fuel's toxicity.
Bots salute them like they do Beepsky (which is now a trait)
They spawn with SyndEye to replace the AI's tracking ability
They do not have a bank account

### The machine remote

The machine remote has a little fly in it that flies to the machines it
is pointed to, working as the arms and legs of the Human AI. It scans
the machine and punches in the action the AI does, and is how the AI
accesses basically anything. This fly slowly moves from one machine to
the next, and can be recalled with Alt Click.
It works on machines and bots.

### Video (Low quality to fit Github)


https://github.com/tgstation/tgstation/assets/53777086/e16509f8-8bed-42b5-9fbf-7e37165a11e8

## Why It's Good For The Game

I've seen a funny screenshot one day of a person replacing the AI by
using a bunch of door remotes, camera console, crew monitoring console,
and a few other things. I've been thinking about that for a few years
and really wanted to make it official if not easier to make possible,
because it is an incredibly funny interaction.
This makes it a reality, and while they aren't as powerful as regular
AIs, I think it makes for better and funnier in-game moments. With the
same weight as Cargorilla (1), I hope this wouldn't be rolling too often
and ruin rounds, but instead show off the different capabilities that
Humans and AIs can do, to do the job of an AI. You win some you lose
some.

## Changelog

🆑 JohnFulpWillard, Tattax
add: Adds a new station trait job: The Human AI.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2024-03-09 23:48:39 +01:00
necromanceranne
86a89c8f02 Fixes spies having multi-use autosurgeons (#81876)
## About The Pull Request

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

## Why It's Good For The Game

Autosurgeons are deliberately not resuable for almost all instances they
show up in the game.

This is fine for a single use insertion of a highly illegal organ, the
autosurgeon then allowing you to entirely ignore surgery and player
interaction to get various power boosts via cybernetics from that point
onwards seems unintended.

## Changelog
🆑
fix: Spies no longer have access to infinite use autosurgeons.
/🆑
2024-03-08 20:00:32 +01:00
MrMelbert
47dc38fee2 Let's you talk through action figures, plushies, and toy mechs with .l and .r. Also a big clean up of say because its support for non-mobs was lackluster. (#81848) 2024-03-07 09:21:12 -07:00
MrMelbert
b8b420cfcb Food Bar Updates, moves it out of the alert "stack" and to the left of mood, makes it more snappy (#81834) 2024-03-06 14:46:01 -07:00
Bloop
b3443099b0 Fixes missing args in a few procs registered to COMSIG_LIVING_ELECTROCUTE_ACT (#81807)
## About The Pull Request

That's it really. 


![image](https://github.com/tgstation/tgstation/assets/13398309/08bd4dd7-b5e7-4c22-91b7-1dadf5776508)

It's supposed to have a `shock_source` arg, but 2/3 of the procs that
are registered to this signal don't include that in their args list.

## Why It's Good For The Game

Out of order positional args = bad.

## Changelog

Nothing player facing (probably)
2024-03-04 19:11:15 -07:00
13spacemen
f2e973a951 Photocopier butt sprites refactor (#81693)
## About The Pull Request

- Butt sprite pngs put into a single .dmi
- All living mobs can have butt sprites defined [maybe even ghosts in
the future?]
- Human butt sprites are based on the chest bodypart instead of species
- having a human chest and felinid tail shows felinid sprite
- Added fuzzy moth butt sprite from Paradise
- Butt sprites use defines
## Why It's Good For The Game
Cleaner code, more realistic and logical for humans on the chest rather
than species, moth player flavor, butt sprites did not need to be
separate pngs at all, and gives felinid tails some more "value"
## Changelog
🆑
refactor: Butt sprites are based on the chest bodypart for humans,
instead of the species
image: Moths have their own special butt sprites
/🆑
2024-03-01 11:19:55 -08:00
MrMelbert
977799a2e7 A red spy has entered the base: Adds Spies, a roundstart antagonist inspired by Goonstation's Spy-Thief (#81231)
# Disclaimer: No Goon code was referenced or used in the making of this
PR

## About The Pull Request

[Design Document (Read this for more
information)](https://hackmd.io/@L9JPMsZhRO2wI25rNI6GYg/rkYKM9Yc6)

This PR adds Spies as a new roundstart antagonist type, inspired by
Spy-Thiefs from Goonstation.

Spies are tasked with stealing various objects around the station, from
insulated gloves to the black box, from the clown's left leg to the
bridge's communications console.

For every item stolen, the Spy is rewarded with a random item from the
Syndicate Uplink, plus some items uniquely available to the Spy. Stolen
items are then shipped off and sold on the Black Market Uplink, allowing
the crew - or maybe some other evil-doers - to get their hands on them.


![image](https://github.com/tgstation/tgstation/assets/51863163/f057d480-4545-44da-b8fe-a8d09a5d2dcf)

More ideas for theft items and bounties are welcome. 

## Why It's Good For The Game

See the design document for more information. 

In short: Adds a solo antagonist which has less impact than your
Traitors and Heretics, but more impact than Paradox Clones and Thieves.
In other words: On the same tier as old traitors.

Seeks to embrace the sandbox aspect of antagonists more by having no
precise greentext objective, and instead some suggestions for chaos you
can embark in. Have fun with it!

## Changelog

🆑 Melbert
add: Spies may now roam the halls of Space Station 13. Watch your
belongings closely.
/🆑
2024-03-01 04:41:57 +00:00
Nick
8edf7d5f59 Adds notification when toggling hud implant (#81740)
## About The Pull Request
Does what it says on the tin. When you toggle a hud implant on/off,
you'll get a balloon notification telling you if it was
enabled/disabled.

Fixes #81654
## Why It's Good For The Game
Good for implants where it might not be immediately obvious whether
they're on or off, like the diagnostic HUD.
## Changelog
🆑
qol: HUD implants will now notify you when toggled on or off
/🆑
2024-02-29 11:45:19 -06:00
John Willard
126531d142 Smart monkeys now punch instead of bite (#81607)
## About The Pull Request

Split this off from https://github.com/tgstation/tgstation/pull/81598 in
hopes to keep it as atomic as I can.

Brought to you by the same guy that made monkeys able to do human things
if they were clever in https://github.com/tgstation/tgstation/pull/70331
you now also punch people if you are an intelligent monkey instead of
biting them, because you're now too civilized for such savagery.

I also replaced a PASSTABLE with PASSMOB because while it doesn't have
any in-game effects currently, it made no sense to check if a mob can
pass through a table to know if they should be knocking a mob over.

## Why It's Good For The Game

You're an intelligent being now, and you should be acting as such,
punching instead of biting sounded like an obvious addition to me but it
seems like it got left out and I didn't notice that until now.

## Changelog

🆑
qol: Intelligent monkeys now punch people instead of biting them.
/🆑
2024-02-27 02:13:14 +01:00
John Willard
aace5f46f4 You can do more things while floored (#81641)
## About The Pull Request

While on the floor, you can:
- Use the UIs of Atmos machinery (except thermomachine and bluespace gas
vendor), Holopads, Crayons (spray cans too), radios, and Disposal bins
- Close extinguisher cabinets with Right-Click
- Click and drag yourself onto a photocopier to climb onto it.

I also changed all instances of ``ui_status`` to have all the args it's
being passed, I was messing with it a bit but it's gonna be for a later
PR.

## Why It's Good For The Game

It's an extra layer of harmless realism, also nice QoL for people who do
not have functional legs and do not have a wheelchair.

## Changelog

🆑
qol: You can use atmos machines, holopads, crayons, spray cans, and
disposal bins while floored.
fix: You can close extinguisher cabinets while floored.
fix: You can climb onto a photocopier from the floor.
/🆑
2024-02-26 18:34:20 +01:00
13spacemen
f9b7588bc4 bodytypes to do with body shape and sprite handling have their own var (#81590)
## About The Pull Request
Bodytypes like BODYTYPE_HUMANOID, BODYTYPE_MONKEY, etc that have to do
with the shape of a human body and sprite handling, now have their own
"bodyshape" var instead of being in bodytype along with stuff like
BODYTYPE_ORGANIC, BODYTYPE_ROBOTIC; which have nothing to do with shapes
and sprites
## Why It's Good For The Game
the way these are used in the code is totally different to
BODYTYPE_ROBOTIC, which determine whether you can heal a limb with
medicine etc.
## Changelog
🆑
refactor: Bodytypes to do with character sprite shape now have their own
bodyshape var, all sprite handling is done with bodyshape and not
bodytype anymore
/🆑
2024-02-25 17:34:53 +01:00
13spacemen
ed6fced9b0 Footprint Sprites are BASED (on shoes and legs) (#81588)
Footprint sprites no longer have to be the same "shoe" sprite, they are
now based on what shoes you're wearing and what legs you have
They are also renamed, i.e., if they're paws, they're called pawprints
and not footprints
Shoes have priority over legs
I have changed monkey legs to have paw footprints

Code is from https://github.com/DaedalusDock/daedalusdock/pull/813,
except I renamed some defines and vars and tweaked it a bit

A future use for this is, adding human FOOT (not shoe) print sprites, so
people without shoes would make actual FEET print sprites
I didn't do this cuz I can't sprite, but it's possible now
Also didn't do this cuz I'd like to replace the existing footprints with
the more grimy Baystation footprints, they look much better, but that's
for a separate PR

Any lizard superfans could also sprite something for lizards, the
possibilities are endless
2024-02-22 18:04:08 +00:00
John Willard
3f44c2d816 Removes holographic monkey species (#81606)
## About The Pull Request

Split this off from https://github.com/tgstation/tgstation/pull/81598 in
hopes to keep it as atomic as I can.

Genericizes the things that holographic monkey species existed to
replace, so now we don't have to worry about having to copy paste this
to any future mob later down the line.

## Why It's Good For The Game

Removes a monkey species subtype, and a pretty bad one at that.
Preferably makes hologram mobs more consistent with eachother and
prevents copy paste happening everywhere in the future if any new mobs
ever gets added to the holodeck.

## Changelog

🆑
refactor: Holographic mobs now gives better feedback to players and
should more consistently not give any drops.
/🆑
2024-02-22 05:36:48 +00:00
MrMelbert
115fda380d Half fixes organ blood dna not updating (#81584)
## About The Pull Request

Organs have this mechanic where they store the first mob who owned it's
DNA

Anyways it was broken from the organ nullspace refactor because they
intended a block of code that shouldn't have been indented

But this only *half* fixes the issue, you see a problem here?


![image](https://github.com/tgstation/tgstation/assets/51863163/886dd926-3242-4305-825b-a715d6848281)

Yeah there's an order of operation thing going on here because you get
your organs before you get your species bloodtype
This only affects species with weird blood types (like lizards)
I'm not fixing it in this PR because it was certainly broken before and
needs a bit more unwinding somewhere

## Changelog

🆑 Melbert
fix: Organs have the blood DNA of their owns on them again
/🆑
2024-02-20 20:21:54 -07:00
Ghom
7e8328c0d2 Cardboard cutouts are now tactical. (#81245)
## About The Pull Request
Basically, this means players holding cardboard cutouts will now assume
their appearance, just like for potted plants. Good for pranking.

I've had to tweak the tactical component and the waddling element a bit
to get them to work as intended while dealing with the multiple sources
of the waddling element.

## Why It's Good For The Game
![](https://media1.tenor.com/m/X1GimXmuByYAAAAd/tom-cruise-doorbell.gif)

## Changelog

🆑
add: Players holding cardboard cutouts will now assume their appearance,
just like for potted plants.
/🆑
2024-02-17 17:17:18 +00:00
_0Steven
f64e5de1f6 Fix lizardperson spine preference dropdown not showing up (#81475)
## About The Pull Request

I was recently told about the fact that apparently spines are missing
from lizardperson customization.
Looking into it, it seems like this was caused by #80952 performing an
unrelated line removal, presumably by accident while copying something
over.

![image](https://github.com/tgstation/tgstation/assets/42909981/b7b306ed-16b9-4d27-b0db-55d3590b1003)
Re-adding this line seems to make it work fine.
## Why It's Good For The Game

Fixes the lizardperson spine preference dropdown not showing up in the
character menu.
## Changelog
🆑
fix: Fixed the lizardperson spine preference dropdown not showing up in
the character menu.
/🆑
2024-02-15 19:59:13 +01:00
Lucy
081b84c631 Painkillers now actually induce analgesic effects (#81335)
## About The Pull Request

This adds a new trait, `TRAIT_ANALGESIA`, and makes various painkillers
(+ tenacity trauma) apply said trait.

This prevents various pain-related effects, such as screaming due to
pain, and also provides a speed bonus during surgery.

## Why It's Good For The Game

Gives more of an incentive to actually use reagents such as morphine or
miner's salve.

## Changelog
🆑
add: Painkillers (i.e morphine, miner's salve) now actually induce
analgesic effects, preventing various pain-related effects, such as
screaming due to pain, and also provides a speed bonus during surgery.
add: The tenacity trauma (traumatic neuropathy) also applies analgesic
effects.
refactor: Simplified code related to reagents adding traits.
/🆑
2024-02-14 01:01:06 +01:00
siliconOpossum
6692314c1f Fixes various bloodied hand overlay related issues (#81430)
## About The Pull Request

Fixes #76900
I made it so bloodied hands use two separate overlays instead of jankily
swapping which icon is applied to the one overlay, because it was
literally never clearing the individual hand overlays, which is what
caused the linked issue

I also fixed your hands appearing bloodied when holding bloodied gloves,
this was caused by a _one character incorrect negation_
I remember this bug having been around for a long while I have no idea
how no one else has fixed this by now

Oh and also I think the overlays have never correctly updated when
removing or attaching limbs? Baffling, honestly.
## Why It's Good For The Game
Bugs are bad and these ones in particular were making me mad.
## Changelog
🆑
fix: Getting blood on your hand when you only have one no longer makes
your hands visually permanently bloody
fix: Holding bloodied gloves no longer makes your hands look bloody,
bloodied gloves now look bloody when worn, and damaged gloves now look
damaged when worn
fix: Gaining or losing an arm now correctly updates your hand overlays
/🆑
2024-02-12 21:53:11 +01:00
LemonInTheDark
70651816c2 Fixes complex lights not handling moving well, renames lighting defines (#81423)
## About The Pull Request

[Fixes static lights not
moving](ffef43c05a)

Worked fine when the owner moved, but if the owner was inside something
else, it would try and trigger an update on the PARENT's lights, which
are obviously not us.

[Renames MOVABLE_LIGHT and STATIC_LIGHT to better describe what they
do](de73a63bd4)

People keep trying to change the lighting system of lamps and it makes
me mad.
I choose OVERLAY_LIGHT and COMPLEX_LIGHT here, I couldn't figure out a
better name for turf matrix lighting. Suggestions welcome

## Why It's Good For The Game

Closes #80005
Hopefully improves understanding of lighting at a glance
## Changelog
🆑
fix: Fixes fancy lights not updating their source location when picked
up and moved
/🆑
2024-02-12 20:50:20 +01:00
LemonInTheDark
2adf2d3631 Removes the adapted flashlight (#81426)
## About The Pull Request

It doesn't need to exist, I killed see_in_dark so we can always see shit
emissives.

## Why It's Good For The Game

Cleaner code
2024-02-12 14:56:18 +01:00
LemonInTheDark
a15979a3ba Yeets CONSIG_ORGAN_WAG_TAIL (#81400)
## About The Pull Request

It was dumb. LITERALLY just a proc.

So let's replace it with a proc then, as a helper at least. I'll take
this chance to disambiguate tail code to make it a bit less messy, and
hand back usable args in case we want to react to our change in tail
status

## Why It's Good For The Game

Code's less shit (slightly)
2024-02-11 14:56:13 +01:00
MrMelbert
e09d4825a0 Fix Lipoplasty not existing (#81397)
## About The Pull Request

Fixes #81395

Boo-womp, as they say. 


![image](https://github.com/tgstation/tgstation/assets/51863163/531a1ffa-dfaf-4e0a-b8b7-ec9414514350)

## Changelog


🆑 Melbert
fix: Lipoplasty is An Option again
/🆑
2024-02-11 14:50:45 +01:00
John Willard
1389351ef9 You can now move and talk through statues and mannequins (#81188)
## About The Pull Request

I recently played a game where I rotated my skeleton model while
rotating my own character at the same time and it being in sync gave me
the realization on how cool it would be if the Coroner was able to
simply control the skeleton body.

I find skeleton displays very funny and I want to see more funny things
happen with them, so I thought this would be a good place to start, with
the benefits that it also works on mannequins and statues too so they
aren't left out.

Basically, while it is unanchored, if you have a statue/mannequin
grabbed, it will change its direction as you do, and speak the same
words you do. Your own messages can only be heard if the person is
directly next to you, revealing that it was you talking through it all
along.

I was originally gonna add this to the simple rotation component but
moved off when I decided to add talking through it, I left in the code
improvements I made to the component though since it is one of the
oldest components and hasn't been touched in a while.

Video demonstration (before I added the person also talking, just ignore
that missing)

https://github.com/tgstation/tgstation/assets/53777086/27242fc3-9649-418d-95cb-b31619319e97

While fixing the Toilet bong's rotation stuff I noticed a lot of it
wasn't up to proper code standards so I went over it and fixed issues I
had with it. It now doesn't give text saying you found something nasty
to species that still likes mice (like flypeople), and fixed its update
appearance to match the codebase standard set by the introduction of
``update_appearance`` many years ago.

## Why It's Good For The Game

It's a funny small idea I had and got inspired to add, it's a niche
mechanic that I think fits the aesthetic I am going for with Coroner and
also give a funny interaction with the human-like inanimate objects.

## Changelog

🆑
fix: Species that can eat mice don't get disgusted from seeing one in
the toilet bong.
add: Grabbing an unwrenched statue/mannequin/skeleton model will now
move its direction as you move yours, and you can talk through it.
/🆑
2024-02-08 14:19:31 +01:00
MrMelbert
a40986353d Fixes surgeries runtiming constantly when having the surgery initator open, fixes some surgeries missing sounds (#81307)
## About The Pull Request

Fixes #79318 

- See the issue for more information. I fixed the runtimes as expected,
and then removed `SURGERY_REQUIRE_LIMB` from some surgeries which don't
actually require a limb, such as implant removal, dissection, and living
revival. I could've easily missed some, and as a result some surgeries
are lost to the void and unselectable, but from what I could tell in
testing it seems... fine.

- Adds `SHOULD_CALL_PARENT` to surgery `can_start`. Cleans up some
surgery `can_start` overrides.

- Adds missing sounds to puncture repair surgery. 

## Changelog

🆑 Melbert
fix: Fixed Puncture Repair surgery not having surgical sounds
fix: Fixed Surgery Initiator potentially showing invalid surgeries 
/🆑
2024-02-08 13:37:02 +01:00
Higgin
3bace03395 [FIX] Makes Ghetto Surgery Behave In Line With Expectations (#81288)
## About The Pull Request

fixes #81142

Ghetto surgery was putting the floor on surgery success chances at 1% on
pretty routine surgery steps due to their speed. Seems like an oversight
to me as, even on a proper surgery table, you'd be looking at a 1%
chance to succeed on a bone saw step.

I've had two minds about how to address this. One was to make the
surgery success chance floored at the listed values for the tool, but
that would make floor surgery relatively more effective and also take
some of the use out for other modifiers like sterilizine, booze, and any
others we add in the future.

Instead, I did a little math - 

> the bone saw step has a time of 54 deciseconds
the cleaver has a value of 25, or a .25 implement_speed_mod when divided
by 100* _edit for clarity_
this means that if calculating speed_mod, you've got 1/.25 assuming no
other variables are different - or a speed_mod of 4.
this makes modded_time 4 * 54, or 216 - about twenty-two seconds.
SURGERY_SLOWDOWN_CAP_MULTIPLIER is 2
fail_prob then ends up being the smaller of 99 or 216 - 54(2),
216-108, gives you 108, which is larger than 99, so gives you a 1%
chance to succeed by default, the bare minimum.

raising SURGERY_SLOWDOWN_CAP_MULTIPLIER to 2.5 gives you instead about a
20% chance of success.
216 - 135 = 81, or a 19% chance. 

previously, if you tried to do it with the cleaver, you'd be looking at
a modded surgery time of 108 deciseconds, or about 11.
after this change, 14 - so there is a tradeoff if there were balance
concerns, but it seems like the tools available should not default to
being basically impossible to use if their given values are not
literally 1 in code or the wiki.

doesn't change regular surgery. just surgery under suboptimal conditions
or using ghetto tools.

also the butcher knife is literally for hacking through bones. gave it a
chance at least on par with the hatchet and raised the 'item' greater
than 10 force chance up to match its intended ~20% (assuming otherwise
perfect conditions.)

## Why It's Good For The Game

expected behavior good, trap options and false choices bad

## Changelog

🆑
fix: fixes ghetto surgery by gently adjusting time sensitivity cap and
making the cleaver not unintuitively bad at bone-sawing.
/🆑
2024-02-06 22:44:07 +01:00
Swift
6fae4400ab Less laughing from trace nitrous (#81223)
## About The Pull Request

Re-open of #80808 post embargo

I've increased the minimum amount of n2o required in the air to cause
giggling. Threshold is still well below the para and sleep values.

This should stop people randomly getting drugged and giggly from trace
amounts of gas.

I'm not gonna lie I had no idea how to fully dial this in, so the
numbers are an arbitrary ~~10x increase from .01 mol to .1 mol~~ 8x
increase from .01 mol to .08 mol.


## Why It's Good For The Game

After "extensive" real life testing I've determined that giggling and
euphoria from trace amounts of the gas is unrealistic.

Also it would be a lot less annoying. @Cheshify also called it qol so
I'm sticking with that.

<img alt="220f1c0470cef181192facef1374bf5c"
src="https://github.com/tgstation/tgstation/assets/26744576/1f42cc27-24d0-42c1-a233-f0bae9f1aa77">


## Changelog
🆑
qol: Increased threshold of trace n2o required to make euphoria and
giggles happen.
/🆑
2024-02-02 20:08:11 -08:00
_0Steven
045baf2442 Fix robotic voicebox tongue using the wrong proc. (#81206)
## About The Pull Request

The robotic voicebox tongue had the `can_speak_language(language)` proc
set to return `TRUE` regardless, however it doesn't seem like this is
actually called on a tongue anywhere else in the code. I _believe_ this
proc is on the atom level, and isn't for the tongue itself.
I think the correct proc would be
`could_speak_language(datum/language/language_path)`. which is defined
on the tongue and most importantly actually called when checking which
language a carbon can speak.
```dm
/mob/living/carbon/could_speak_language(datum/language/language_path)
	var/obj/item/organ/internal/tongue/spoken_with = get_organ_slot(ORGAN_SLOT_TONGUE)
		// the tower of babel needs to bypass the tongue language restrictions without giving omnitongue
		return HAS_MIND_TRAIT(src, TRAIT_TOWER_OF_BABEL) || spoken_with.could_speak_language(language_path)
```
## Why It's Good For The Game

It having `can_speak_language(language)` doesn't seem to actually be
doing anything, but its presence in the first place makes me feel like
this is unintentional. This fixes that.
## Changelog
🆑
fix: Robotic voicebox actually lets you speak any language again (as
long as you know it).
/🆑
2024-02-01 22:36:43 +01:00
13spacemen
832149261d Dynamic Husk Icons (#81080)
## About The Pull Request
Husk icons are now generated dynamically by greyscaling the limbs and
applying the husk blood overlay
rather than everything using the same husk sprite
## Why It's Good For The Game
Less sprites needed, also good for nonhuman races especially those with
non-humanoid shapes
All that is needed for a husk icon now is a blood overlay instead of an
entire limb set

Human, Lizard, Moth, Monkey husks

PIC IS A BIT OUTDATED, THE BLOOD IN PIC IS DARKER THAN HUSK BLOOD
(fixed) AND IT DOESNT "FIT" TO LIMB SPRITE (fixed)
![Screenshot 2024-01-24
025229](https://github.com/tgstation/tgstation/assets/46101244/12dfc3bc-9983-4dbc-8ace-a7130bb4a4e7)
## Changelog
🆑
refactor: Husk icons are now dynamically generated. See if you can
identify what species it was!
/🆑
2024-01-28 18:54:37 +01:00
MrMelbert
6062a5c859 Fixes bad register signal call in silverscale statue action (#81102)
## About The Pull Request

This is supposed to be an unregister not a register with no proc,
surprised we don't have a stack trace or something for calling Register
with no proc
2024-01-26 02:22:38 +01:00
SyncIt21
7a1b8d502c Fixes runtime when mineral scanning (#81049)
## About The Pull Request
Fixes this

![Screenshot
(384)](https://github.com/tgstation/tgstation/assets/110812394/2ec17f1d-e69b-400a-a8ab-47c205af56ed)


## Changelog
🆑
fix: fixes runtime when mineral scanning, passes right argument for
scanner in golem eyes
/🆑
2024-01-24 15:00:52 +01:00
MrMelbert
f0f31f8132 Fix sepsis burns disabling the limb forever until brain surgery (#81055)
## About The Pull Request

- Having a fully sepsis burn wound no longer disables that slot until
brain surgery. Replacing the limb restores use to the slot.
- I thought this was intentional by use of a brain trauma rather than
using `disabling` but I asked ryll and they said it was not intentional.
So.
- Also fixes losing control of a limb saying "human right arm" rather
than "right arm".


## Changelog

🆑 Melbert
fix: Replacing a limb fully claimed by an infested burn wound now
properly grants you control of the limb back
fix: Losing control of a limb now sounds less weird in chat
/🆑
2024-01-23 19:57:23 +01:00
ArcaneMusic
002051a3d5 ArcMining Pr Beta: Version 1.2 (#78524)
This one's not like the last one, so much so that I'm not even going to
outsource the PR description to a robot this time!
Basically, **You should read the PR body before assuming that everything
is the same as last time. It's not.**

## Video Summary
Click the link below to see a video summary of the main features of this
pull request.
https://youtu.be/Aho2omR0mjY?feature=shared

## About The Pull Request
This pull request serves as a large rework of minerals produced by
mining, and by extension mining itself. I'll try and list each change
and it's associated nuance here.

### Ore Vents
The biggest addition to the game with ArcMining is **Ore Vents**. Ore
vents spawn as a ruin on the map, placing a randomized ore vent onto map
generation. Ore vents spawn in 3 different sizes, **Small, Medium, and
Large**. These vents will pick from a pool of materials they can
generate, and will hang out across the map. A player can use a mining
scanner to discover an ore vent, granting a small quantity of **mining
points** to begin with. Once scanned, ore vents will show what minerals
that ore vent will generate after they're fully tapped.

Scanning the vent again will trigger the extraction process. A small
drone will fly down, called the NODE drone, and buckle onto the vent.
Your job during wave defense is to protect the drone and to defeat waves
of randomly spawning mobs (dependent on if you're on lavaland or on
icebox). The quantity, duration, and time between waves is scaled to the
size of the vent you're protecting. Starting by scanning and protecting
lower tier vents earlier in the shift is a safer bet than doing a large
vent in the first few minutes. The drone has 500 health, and can take a
good few hits, but leaving it alone will cause it to meet an unfortunate
end quite quickly.

Cooperation can be your best asset, as mining with allies can greatly
help with wave defense, and mineral points are granted to anyone who
helps with defending the ore vent equally (So 500 * size tier,
regardless of how much help you receive). Once complete, the ore vent
will have a mining machine constructed on top of it, and will start to
dredge up **Boulders** from the earth automatically. More on boulders
later.

Ore vents can be located based on your mining scanner, and will provide
an appropriate audio cue based on if the ore vent has been discovered or
not, and once processed will no longer alert you to it's presence.

**Each station comes with a free vent that produces exclusively iron and
glass, free of charge.** This is to help with shifts where the station
may not have shaft miners to produce minerals, and to provide the
station with a baseline amount of minerals where none may exist
otherwise.

### Mineral Generation
Mineral generation has been completely reworked. Previously, Mineral
Generation had a flat 13% spawn rate in-game. Once minerals spawned,
they would also have a chance to propagate their minerals to nearby
tiles, resulting in a rather massive pool of minerals that could spawn
throughout lavaland on the whole.

This tweaks that, by making minerals in walls spawn based on their
proximity to ore vents on maps that use cave generation. Both the
probability, and quantity of ores spawning in walls is scaled based on
distance, with ore vents looking like large caches of ores found in
walls. This makes following ores found in walls and checking their
quantity of minerals spawned a good indicator of how close you are to a
nearby vent in-round.

This means you can collect some points form both discovering ore vents
first, as well as collecting their surrounding ores, turn those in for
mining points, and then trading them in for gear upgrades to more
effectively take on ore vents. As a result of tweaking the balance of
this, the total amount of ores spawned in walls overall has been
decreased. However, by making more of the process time based, we still
result in a mostly balanced finished product.

### Boulder Processing
On station, there are now three new machines. These are the BRM, the
Refinery, and the Smelter.

- The BRM acts as a teleporter. Instead of needing to carry boulders
back to the station, you can activate the BRM, and it will automatically
pick boulders to teleport back to itself. You can use this to teleport
boulders dredged up from lavaland onto the station for processing. **The
BRM will only lock on to boulders that are resting on an ore vent.**
Moving boulders back by hand will mean you'll have to haul it back by
hand.
- The refinery processes the non-metallic materials out of boulders.
This process sends the materials straight to the ORM, and collects
mining points from the ores smelted in the machine. Swiping with an ID
card lets you withdraw those points for your own personal account, but
remember that these points are for your whole team to share from. The
**Mining points obtained from this process is only 75% of the amount an
equivalent amount of ores would provide.**
- The smelter works nearly identically, however the smelter produces
metallic materials out of boulders instead.
- Once a boulder has had all of it's materials extracted, it's broken
down and deleted from the line. Otherwise, the boulder is spat out for
the next machine to process it (either the refinery or smelter).
- Once there's no minerals left in a boulder of any type, the refinery
or smelter will break the boulder down.
- Boulders **do not stack onto tiles with each other**, so they'll block
each other when pulled or when moving on a conveyor belt.

Boulders can also be processed by hand. Using a mining tool on a boulder
with right click will allow you to break down a boulder into it's
composite ores, but limits you to a maximum of 10 ore per boulder, where
the full amount can be extracted using the proper processing machines.
Also, processing by hand does deal small amounts of stamina damage over
time, do breaking a full large boulder can be particularly taxing.

Additional Boulder Processing Machines can be built, with the BRM board
being obtained from the Protolathe, while the Smelter and Refinery
boards being obtainable from the Autolathe instead. A _boulder
processing beacon_ can also be obtained from the mining points vendor as
a reward to assist with boulder processing. Boulder processing beacons
can be used to spawn in a new BRM, refinery, and smelter on the tile the
user is standing on, however **you'll still need to link them to the
ORM**!

All three machines can be upgraded with Stock Parts, allowing for **more
boulders to be processed at a time**. It does not, however, increase the
amount of minerals received from boulders, or points earned.

### Mining Borg Tweaks
Mining borgs have been given some minor adjustments to compensate for
the changes to mining. Their mineral scanner, which now has an active
component to gameplay, is now a module as opposed to built into the mob.
This module allows for the same ability to discover and start waves of
monsters to fight.

Mining modules will find that their PKA now has a total of 90% mod
capacity as compared to the 80% they had before, to allow for more
robust defense of ore vents.

In addition, all borgs and AIs can interact with the BRM for boulder
collection.

### Mining Mech Tweaks
Mining Mechs have had their utility tweaked as a result of these changes
as well. Mineral scanners to be used on mining mechs now have a larger
radius by comparison to their handheld cousins. Similarly, it now has an
active scanning button, which will actively discovery nearby ore vents.
To begin wave defense, you will need to hop out and scan a second time
however, so that you can properly accept the risks of drawing a horde of
bloodthirsty wildlife towards you and your companions.

Mechs can also manually process boulders, similar to mining tools using
their drill.

### Golem Tweaks
Golems, being more gentle and less aggressive than humans, while being
made out of LITERAL ROCKS, have a greater need to secure access to ores
and minerals to eat. As such, they have adapted to be able to do two new
things:

- Golems may now right click ore vents to be able to manually haul a
boulder out of the vent. This costs a hefty amount of stamina, but it
allows for golems to avoid combat during regular gameplay.
- Golems may now left click a boulder with an open hand in order to
manually process a boulder like a pickaxe. While not faster, it is
consistent and prevents golems from starving if they have access to a
vent, but no ores, somehow.

### Gulag Tweaks
The labor camp, being a camp for rehabilitation and ~~excessive manual
labor~~ has been tweaked. Boulders now replace the random minerals
located on their island, and to acquire their prizes inside, much be
excavated and then broken out of the rock. Now YOU TOO can excavate
minerals and become a true mineral hero by working your way to freedom.

### Mining Point Changes
As a result of fewer mining points being available across the map due to
the new ore spawning mechanics, and the shift in how and when ores will
be coming in, almost every progress based mining point cost has been
reduced by around 10-20%. Many numbers are still subject to change at
present, but the idea is that core progress unlocks should be made a bit
more available earlier in the round before players can start to solo or
duo larger or more difficult ore vents, after which they'll be rolling
in ores.

### Rarities
Every once in awhile, an unusual boulder will get hauled up from the
mineral rich depths of lavaland. These **Artifact boulders** can
occasionally produce rare items, but for now they've mostly just been
pulling up **Strange objects** for science. Nanotrasen Natural Sciences
department will reward you extra points to be collected by boulder
processing machines for successfully extracting one. In the future, this
opens up a passive reward space that mining can reward to the station,
like providing cytology DNA samples, ancient seeds, or other artifacts.

### Misc notes

- Boulders can be stored in all varieties of ore boxes (ground, mech)
should you choose, however as mentioned it's best to leave them where
they spawn and teleport them to the station for convenience.
- Maps that are not subject to cave generation will find that they are
largely untouched in terms of mineral balance.
- Future or existing ruins can now be tweaked to have a mineral balance
cost, as the ore vent ruin does. This will allow us to spawn in more
interesting ruins for pre-made combat challenges.
- There are unique ore vents that spawn across the map, that will summon
a boss mob relevant to that map. If the boss mob is defeated, that vent
will spawn large boulders pulling from every possible ore type that can
spawn. Not for the faint of heart!
- Similarly, the number of ore vents and mineral budget is now
adjustable in the cave generation procs, so maps may spawn with more or
less ore vents as desired for balance.
- Artifact boulders opens up a LOT of room for possible future content
like archaeology, xenoarch, artisci, and other design spaces!
- Megafauna STILL SPAWN ON THE MAP. They just happen to spawn in
addition to boss ore vents.
- **I'll add more to this as I get asked questions and remember things,
this is a huge PR and I'm confident I've missed at least something**

## Why It's Good For The Game

I outlined a lot of this in #78040, so I'll try and keep this relatively
snappy this time, while noting that I've made some concessions to make
the whole system a lot more playable while not trying to break out
design decisions that are at the end of the day, better for the game and
the overall resource balance in round.

Minerals are a very poorly balanced system, and have been since their
inception many years ago. We heavily rely on mineral balance in round,
and yet we've really only balanced it by introducing so much supply that
there's no equivalent exchange for materials that doesn't just heavily
flood the exchanged material. For example, items printed from materials
that are otherwise considered "rare" on master exist in such quantities
and they'll never practically run out in our allotted 90 minute time
slot design. This PR adjusts how ores spawn to a point where we can
minimize the amount of ores that need to exist on the map for mining to
be able to progress, while still providing enough resources for the
station that it covers the needs of the station adequately.

Miners will need to be more strategic about what resources they've
collected, and be able to make decisions about which vents are worth the
risk of attempting to fight, how to prepare for a wave defense, and when
to head back up for upgrades, while finally giving them at least some
kind of incentive to work together and use different equipment.
Resonators make cleaning up the caves around vent easy, sandbags set up
easy defenses for your vent, mechs can serve as a wider range radar
while mining, all while still providing a new gameplay loop to mining.

By limiting the amount of ores that can enter the round from the
massive, massive amounts that were coming into the round beforehand (see
#78346 ), we can make ore processing more meaningful by adding more
gameplay to the processing of minerals. I have some plans for that,
however this PR already got bloated really REALLY badly due to scope
creep and the number of intersecting systems that rammed into each other
to make this PR possible. So that'll be next. Plus, as I've mentioned,
we open up places for ore processing to find fossils, relics, and other
things that can implemented down the line.

Overall, I don't expect this PR to save or kill ore balance, but we gain
a LOT more control over it through the use of our mining defines
attached to this PR, and at the end of the day, that's a great place to
start off of.

## Changelog

🆑
add: Added ore vents. Scanning them with mining scanners shows what
minerals they contain. Scan again to fight off a horde of beasts as your
drone assistant excavates the vent, so the ore vent will produce mineral
boulders!
bal: Ores that spawn in walls now spawn based on their proximity to ore
vents, with their chance to spawn and their minerals contained scaling
from low to high.
add: Added the BRM, Refinery, and Smelter. These pieces of equipment are
used to process ore boulders into minerals for the station. Stock Part
upgrades allow more boulders to be processed at one time. They collect
mining points as well, to be redeemed with an ID card swipe.
add: Boulders are teleported to the station via the BRM if left
untouched. Boulders can also be cracked open for a reduced amount of ore
using pickaxes or golems hands.
add: All stations come equipt with a pre-excavated ore vent, which
produces a basic supply of iron and glass only. Scan other vents for
your critical resources!
add: Look there's a shit ton of changes on mining, for more detail check
out the Pull Request: https://github.com/tgstation/tgstation/pull/78524.
sound: New sounds and noises for your high octane factorio-like
gameplay!
image: All new boulder sprites for the new minerals and rocks added to
the mining gameplay loop, as well as mining machines!
image: Overlays appear over vents when scanned to let you know their
contents at a glance when actively scanned with any mining scanners.
/🆑

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-01-21 11:32:05 -05:00
Lucy
58fdc807c6 Fix arm implant hotkeys no longer working after changing species/limbs (#81020)
## About The Pull Request

Currently, if your arm gets changed for any reason (through surgery or
by changing species), it breaks the Z hotkey for activating the toolset
implant in said arm until you take the implant out and put it back in.
This fixes that.

Somewhat of a port of
https://github.com/BeeStation/BeeStation-Hornet/pull/9167

## Why It's Good For The Game

This is clearly unintended behavior, which is bad, bugs are bad.

## Testing Evidence.


https://github.com/tgstation/tgstation/assets/65794972/b5e1e690-ef11-4db6-81ab-85571f83d178

## Changelog
🆑
fix: Tool arm implant hotkeys will properly work even after you change
your arm/species now.
/🆑
2024-01-21 09:08:42 +01:00
Waterpig
89e6e1f26c Borgs now use the hug module to substitute for their hands, making some surgeries possible again (#81003)
## About The Pull Request

Borgs now use the hug module to substitute for their hands. This allows
them to actually finish some surgeries, like the stomach pump, which
would have them forcing the person to puke indefinetely.

closes: #48941

## Why It's Good For The Game
Hugging -> Hands. It makes sense. Perhaps not entirely intuitive but
also easy to remember once you get into it.

You can actually do AND mend this surgery.

![image](https://github.com/tgstation/tgstation/assets/49160555/b419025f-5daf-44b2-828a-c0a14d430d06)

## Changelog
🆑
fix: Borgs now use the hug module to substitute for hands, allowing them
to finish previously unfinishable surgeries
/🆑
2024-01-20 20:44:07 +01:00