Commit Graph

1944 Commits

Author SHA1 Message Date
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
MrMelbert
6937931731 dismember calls drop_limb with dismembered = TRUE (#81010)
## About The Pull Request

Pass `dismembered = TRUE` when calling `drop_limb` from `dismember`. 

At a glance I don't think anything actually checked `dismembered`,
making this do (practically) nothing,
however I was writing some code that actually relied on checking this
only to find it was always passed as `null`.

I also audited some signal usages of dismember / drop limb to make sure
they're correct.

## Changelog

I don't think this will affect anything at current.
2024-01-20 00:23:27 -07:00
Ghom
68677dc721 Disarm refactor, plus shoving people with shields (#80123)
## About The Pull Request
I wanted to add the ability to shove people with shields by
right-clicking your target, just like how it works barehanded.

This also required a solid refactor of disarm code, effectively bringing
down the core of it to `mob/living` from `mob/living/carbon` or
`mob/living/carbon/human`. This also means you can shove simple mobs
inside closets, bins and on tables.

Xenos and borgs are pretty much immune to regular disarms, but using a
shield will work (borgs and royal xenos are immune to the knockdown).

The riot shield armor has been balanced. It now tanks melee attacks
pretty well, but will break against bullets in just about 2 to 4 hits
depending on the bullet damage. I've always found the lack of sturdiness
of the riot shields for what they're supposed to be good for a bit
detrimental.

Because I've refactored an item flag into a trait, I've had to add a new
MOD module that grants protection from shove knockdown and staggering;
found pre-installed in the administrative MODsuit, but I've also added
it to the black market to make it cooler.

You can bash people with the strobe shield on combat mode.

## Why It's Good For The Game
Currently, shields are simply items that take a held slot in return of
some block chance without being anything special, save for the strobe
shield's integrated flash I guess, but are also a botherance as most
crumple under the duress of less than half a dozen attacks. Meanwhile
swords and other weapons with blok chance just don't care.
TL;DR, I want them a bit more remarkable, and flexible as a tool.

Of course, this ended up in a larger refactor because the right-click /
disarm code was inconsistent.

## Changelog

🆑
add: Shields (and pillows) can be used to shove people around the same
way barehanded right-clicking does. Xenos and borgs can actually be
moved this way.
add: Added a new MODsuit module, the bulwark module, which prevents
knockdown and staggering from shoving, and getting pushed away by thrown
objects. Inbuilt for the safeguard MODsuit, but one might also it in the
black market.
refactor: Disarming has been refactored. You can now shove simple
critters onto tables and into bins and closets
balance: Shields now take their own armor values and the armor
penetration of the attack they blocked when damaged. This means shields
are a bit sturdier now.
balance: Riot shields can tank a lot more damage against melee weapons,
but less against bullets.
qol: strobe shields can now be used to bash people while combat mode is
on.
/🆑
2024-01-16 19:35:56 -06:00
Bloop
fc0a1f4068 Removes timeout_mod arg from add_mood_effect (#80964)
## About The Pull Request

Partial Revert of https://github.com/tgstation/tgstation/pull/80800

Assuming every num passed in the parameters of `add_mood_effect` is a
`timeout_mod` is incorrect, because there can be mood events that take a
numeric arg which is not meant to be multiplied against the timeout.

This leads to the same issue as multiplying it with strings essentially
(in one case, shown below, this results in a negative duration of a
timer).


![image](https://github.com/tgstation/tgstation/assets/13398309/f8af858f-04ef-4144-9a0b-2fae60b71272)


![Code_ZN176cpMqA](https://github.com/tgstation/tgstation/assets/13398309/a6ec7689-0171-4909-91cb-a17b56454eb6)

Plus having a keyword arg that may or may not actually be what the
keyword arg claims to be is really confusing and bad.

Instead here's what I propose: passing in an instantiated mood datum
itself, which has been modified, and copying the timeout from it before
discarding it.

It is not as clean as I'd prefer either, but at least it's logically
sound and the intent is clear, and it's the best I can think of short of
a major refactor of the entire system for this one small thing which is
only being used by food quality.


![image](https://github.com/tgstation/tgstation/assets/13398309/8560c066-bb0b-4066-af94-372d5ea62679)

## Why It's Good For The Game

Clearer, less smelly code.

## Changelog

🆑
code: removed the timeout_mod arg from add_mood_event, which was only
used for one thing and causes more issues than it's worth
/🆑
2024-01-16 20:57:42 +01:00
Time-Green
ca61d0f868 Turns mush cap into an extorgan (#80952)
Pretty self explanatory. I suppose this isn't a 100% fix or refactor,
since it adds a UI for their features and makes it removable, but also
these never happen

🆑
code: The mushroom cap is now an external organ (jungle station will
never happen)
fix: Mushpeople caps are no longer solid black
/🆑
2024-01-16 02:28:36 +01:00
Time-Green
269b84e0cd Fixes assorted head harddels, removes specific organ vars in head (#80950)
Fixes #80926, fixes #80372

The tongue, eyes, ears and brain vars were also being updated and
cleared elsewhere, runtiming whenever a regular head got dismembered and
then emptied, which would eventually cause a harddel due to improper
clean-up

I've fixed the errant proc and just removed those vars because I don't
like having duplicate references for no reason (they should always
already be in contents)

Not player facing
2024-01-15 22:06:03 +01:00
Hatterhat
27386bffe8 fixes a bunch of moodlets potentially lasting forever (less band-aidy) (#80800)
## About The Pull Request
In a previous PR (https://github.com/tgstation/tgstation/pull/79661), I
noted that a lot of moodlets tended to have their timeouts break because
it was passing their names and whatnot as a parameter, that gets fed
into the timeout modifier parameter, causing the timeout multiplier to
break, because BYOND type-agnosticism means that it can multiply a
number (timeout_mod) by text (a name or some other object), resulting in
0 - which makes a moodlet permanent. This is probably not intended.

This fixes that in two ways:
- Adding a `1` to potentially applicable moodlets (searched for with a
regex of `.add_mood_event(.*, .*,)`) just to make sure the timeout
doesn't get multiplied out weirdly.
- Making the add_mood_event thing CRASH() if the timeout_mod is bad.

If someone else wants to come up with a solution better than this,
please do.

## Why It's Good For The Game
Maybe having your arm permanently fall asleep after getting it
reattached sucks, moodlet-wise. (Being stuck with permanent
positive/negative moodlets is probably not intended.)

## Changelog

🆑
fix: Moodlets with parameters/effects e.g. limb reattachment moodlets
should probably disappear more appropriately.
/🆑

---------

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
2024-01-15 07:08:01 +01:00
Ghom
cb9845f226 Fixing a runtime with H.A.R.S. (#80772)
## About The Pull Request
The brain gets moved into the chest with H.A.R.S. now, but the bodypart
insertion and removal procs for it still asume it can only be found in
the head. This should fix it. For the sake of preventing similar issues
in the future, I've also updated the pretty-much-identical versions for
ears, eyes and tongue.

I've checked, and the brain var is only used by the head for visuals and
examine strings.
2024-01-07 00:55:44 -06:00
lessthanthree
6078d34569 Fixes morgue trays husking corpses, caps freezing burn damage (#80811)
## About The Pull Request

Adds a limit to burn damage that can be caused by freezing temperatures.

## Why It's Good For The Game

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

## Changelog

🆑 LT3
fix: Morgue trays and freezing temperatures will no longer husk bodies
fix: Organs outside bodies will properly receive cold damage
/🆑
2024-01-06 19:32:05 +00:00
Mothblocks
a140505346 Replace natural beheading with cranial fissures (splitting your skull) (#80703)
## About The Pull Request

Replaces natural beheading (doing a lot of damage to the head) with
cranial fissures, which split your skull in half.


![dreamseeker_2023-12-31T19-38-16](https://github.com/tgstation/tgstation/assets/35135081/f84dc479-6156-45b7-bb23-4e4ec7378f6b)

While you have this wound, your eyes can be pulled out of your head with
bare hands, and slipping will spill your brain out of your head.

Removes beheading objective from traitor.

Zombies can be beheaded all the same.

Any other way of beheading, such as surgery or amputation shears, is
still possible.

Closes #80439 

## Why It's Good For The Game

I've enjoyed seeing the results of the test merge to remove natural
beheading. At 947 beheadings in a week, 1 in every 7 deaths resulted in
a beheading. This makes it significantly easier to remove people from
rounds as the brain is generally critical to actually reviving someone.
While round removal is fine, it should be something that is
intentionally performed with enough effort. Mass round removals ought to
require a significant amount of effort. There are plenty of ways to
round remove someone, but it ought not be an incidental choice.

The effects of beheading removal have shown some interesting anecdotal
highlights (nothing here is backed up with stats, so take it with a
grain of salt):
1. As a whole, people did not really replace it with anything. The
biggest alternative has been lighting people on fire, but this has not
been done at a significant enough scale at all to be a noteworthy
problem, and is still fixable with enough effort.
2. Cult and rev rounds have played out far more interestingly. In one
round I was adminning a head of staff who intended to behead every
revolutionary they saw, but because they didn't, the back and forth
continues. I've also had opportunities to revive head revs that I am
skeptical would've been available to me otherwise.

Complete removal of beheading was not chosen as it does not feel right
for a repeated fire axe to the head to do basically nothing. The current
implementation is intended to be something that is just not useful
enough to do on everyone you see, but is still appreciably an effect.

## Changelog
🆑
balance: Instead of too much damage to the head beheading someone, it
will now split their skull in half. While their skull is open, you can
rip out their eyes with your hands. and they will spill their brain out
of their head if they slip.
balance: The Path of Blades ascension will accept either a beheaded
person, or someone with their skull split open.
del: Removed the beheading objectives from traitor.
/🆑
2024-01-06 13:09:53 +01:00
Rex9001
9b1085d19c Logging for amputation shears (#80732)
## About The Pull Request
Amputation shear amputation is now logged in the game log
## Why It's Good For The Game
Allows admins to easier see who and what was amputated
closes/resolves https://github.com/tgstation/tgstation/issues/80687
## Changelog
🆑
admin: Amputation Shear amputation is now logged
/🆑
2024-01-04 19:56:25 +01:00
Mothblocks
448b213fec Remove eye surgery fluff line (#80565)
## About The Pull Request
Removes a side effect in can_start which MUST be pure. This causes the
surgery tgui to spam this message. It's pointless because you can't do
the surgery to begin with if this returns false, so you only ever see
this where you shouldn't.

## Changelog

🆑
fix: Fixed the surgery menu spamming chat messages when on the eyes
section of a player with no eyes.
/🆑
2023-12-26 19:02:18 +01:00
MrMelbert
d5d74fd9b5 Fix heartbeat continuing for a while on revival (#80561)
## About The Pull Request

- If you are defibbed (into hard crit), your heartbeat will be
`BEAT_FAST`
- If you are healed fast enough from hard crit, such that you do not
life tick while in soft crit, you skip `BEAT_SLOW`
- If you skip `BEAT_SLOW`, it never stops the heartbeat

This PR fixes this issue by checking `if not in crit, and heartbeat
sound is playing -> stop sound`.

## Changelog

🆑 Melbert
fix: Fixed some occasions in which heartbeat SFX will continue on
revival for longer than expected
/🆑
2023-12-26 03:19:30 +01:00
SyncIt21
fe25dce035 More optimizations for reagent code (#80529)
## About The Pull Request

1. Removed offsetting reagent volumes by the quantization/rounding
constants before comparing values. Not required since the final total
volume is rounded inside the reagent holder anyway.
2. Removed excessive calls to the hottest proc in reagent code i.e.
`update_total()` per reaction step. Speeds up reactions even more.
3. Removed rounding of volumes (like in liver, pyrotechnics, overheated
reactions) where the volume is already rounded inside the holder.
4. Avoid calling `handle_reactions()` if the holder is already reacting
when adding new reagents.

## Changelog
🆑
code: removed excess calls to `update_total()` making reaction code
slightly faster.
code: removed excessive use of chemical constants (quantisation &
rounding constants) in places where they were not needed i.e. plumbing
buffer, reaction chamber, pyrotechnics & the liver.
/🆑
2023-12-24 23:58:01 +01:00
lizardqueenlexi
c340a60506 Lizard spines no longer "float" on characters without lizard tails. (#80456)
## About The Pull Request

Fixes #69658.

As the title says, this PR resolves the issue where lizard spines always
have a "tail" portion even if there isn't actually a tail for them to be
on. This has been done via two steps:

1. Spine icons have been separated into "spine" and "tailspine" icon
states, for those on the back and those on the tail, respectively.
2. Tailspines now have their own, separate bodypart overlay, which is
added by the tail if the owner has spines. This bodypart overlay appears
if both a tail and spines are present, and is removed if this ceases to
be true.


![image](https://github.com/tgstation/tgstation/assets/105025397/6f62340e-3ca8-48b5-97e4-5f80712abbcd)

This image displays the results of this change. From left to right, it
shows:

1. A lizard with both a tail and spines.
2. A lizard with spines but not a tail (specifically, one where the tail
was removed).
3. A lizard with a tail but not spines (specifically, one where the
spines were removed).
4. A lizard with the "short" tail style, which does not fit the shape of
tail spines and thus doesn't have them.
5. A lizard with a felinid tail surgically attached, which also does not
receiver tail spines.

Which tails will successfully render tail spines is now handled by a
"spine_key" define in the tail sprite datum. Currently, such a key only
exists for the standard lizard tail shape, but should anyone wish to
sprite spines for other sorts of tails, it is now a simple matter to do
so.

Relatedly, handling for tail spines has been moved to the base tail
object, rather than lizard tails in particular. This functionally
changes nothing, but may make life easier for downstreams that want to
add spines to tails that are not explicitly _lizard_ tails.

Finally, this PR also fixes a bug introduced in #79687, which made
bodypart overlays not update at the right time when external organs are
inserted or removed. Specifically, bodyparts were redrawn _before_ the
overlays were added or removed, meaning they would not update until
something else forced a redraw. This is no longer the case.
## Why It's Good For The Game

"Floating" lizard spines are incredibly ugly visually, and a major
obstacle to adding lizard tails that are not of the "standard" shape. In
addition to cases where a lizard loses their tail mid-round, this also
allows tailless or short-tailed lizards to actually use one of lizards'
main customization options without looking like a total buffoon.

The extensibility, as stated before, may be nice for downstreams that
wish to place spines on more tails, and may even be useful here if
someone wishes to sprite spines for the "short" tail style.

Also makes the code nicer, as the tail/spine wagging interaction
previously relied on a very ugly two-way link between the two organs
that has been rendered unnecessary by the tail handling everything.

Finally, it's good to fix a bug that completely destroyed the usability
of feature manipulation surgery.
## Changelog
🆑
fix: Feature manipulation surgery will now properly update the patient's
appearance.
refactor: The tail portion of lizard spines will no longer draw on
people who do not have a tail.
/🆑
2023-12-21 18:52:58 +01:00
Diamond_
c444c19438 Fixes runtime from cyber implants (#80429)
## About The Pull Request

Adds an unregister signal that was missing 
## Why It's Good For The Game

Runtimes from changing implant bad.
## Changelog
🆑
fix: Fixes runtime from augments not unregistering a signal.
/🆑
2023-12-18 15:53:32 -08:00
Time-Green
950bedecc4 Fixes monkeys eating your organs while still inside you (#80416)
Fixes #80367, #80372 (hopefully)

🆑
fix: Monkeys will no longer eat your organs while they're still inside
of you
/🆑
2023-12-18 16:11:13 +01:00
Diamond_
eda9114359 Refactors reviver code (#80386)
## About The Pull Request

Cleans up reviver code to overall make it simpler and properly implement
the cooldown that it said it had in the code but never really had.
Additionally, stops the reviver trying to revive someone that isn't in a
revivable state, which fixes
https://github.com/tgstation/tgstation/issues/80371. Wasn't sure how
long to make the delay but I figured just a 5 second delay after the
first heal proc should be fine. About the same as what the original
cooldown was from being paired to the heal proc's second iteration.
## Why It's Good For The Game

Changes variables and checks used by the reviver to make sure it
functions properly with the cooldown that seemed to be intended in the
code. Additionally, prevents the reviver from infinitely defibbing a
non-revivable corpse.
## Changelog
🆑
fix: Reviver no longer attempts to revive impossible to defib mobs.
refactor: Cleaned up unnecessary variables and re-arraigned code to have
it perform altogether in one tick. Additionally added a proper cooldown
to revivers.
/🆑
2023-12-17 20:57:15 +00:00
Time-Green
3ed292efab Fixes AIize and borgize (#80393)
Fixes #80314 

Fixes these two admin procs. I have no idea what posessed the coder of
AIize, they were just deleting every bodypart prior to qdelling the
mob??

🆑
fix: Fixes AIize and borgize gibbing you
/🆑
2023-12-17 17:33:54 +01:00
Jacquerel
13cd42f761 Last Resort can be used while dead (#80352)
## About The Pull Request

This PR allows Last Resort to be used while dead, in crit, or during
your reviving stasis.
Additionally it increases the stun duration applied to bystanders from 2
to 4 seconds.
The confusion applied to bystanders has been increased from 3 to 12
seconds.

Additionally it fixes a runtime which was being triggered by Last Resort
where a body part was being passed into the argument for
`bodypart_remove` which expected to be passed a human, not a limb.

## Why It's Good For The Game

Last Resort is a rarely-used ability which makes you very vulnerable and
requires you to find (or create) a corpse as a fairly fragile mob in
order to return to the round (it's a last resort in other words). It
also costs 20 chemicals, which means you need to have saved those to do
this instead of Regenerative Coma or Fleshmend.

Because it was only usable while _alive_ (not even when in crit) it was
also actually quite difficult to trigger because it requires two inputs
(there's a confirmation box about whether you are sure you want to gib
yourself) during a narrow window (where you know you are going to lose a
fight, but haven't been knocked unconscious yet). Being usable while in
crit or dead means it can now be activated during the relatively common
scenario where you are dead, handcuffed, and being dragged towards a
machine which will destroy your body without first needing to wait for
regenerative coma to complete _and_ to regenerate an additional 20
chemicals.
This likely makes changelings potentially stickier and harder to
permanently remove, to which I think: good, they're too _easy_ to deal
with at the moment and seeing them get reborn due to careless corpse
disposal is fun.

Additionally I have _slightly_ increased the duration of the stun and
disorient applied to onlookers. Previously it applied a two second stun
(and a 3 second confusion, 2 seconds of which was spent stunned),
however the headslug only spawns after a one second delay. This makes
its chance of escaping essentially nil, even if the corpse bursts
directly on top of an air vent.
With a slightly longer stun there is some chance that it will escape,
though there is still a reasonable chance that if there's more than one
person around, they will manage to catch you before you crawl into a
vent.

## Changelog

🆑
balance: Last Resort can now be used while unconscious or dead.
balance: Last Resort stuns bystanders for slightly longer.
/🆑
2023-12-17 01:11:56 +01:00
Singul0
71da2041b9 [NO-GBP] Fixes Advanced Plastic Surgery free to use roundstart (#80295)
## About The Pull Request
Fixes #80266

![ah-eto-bleh-anime](https://github.com/tgstation/tgstation/assets/127663818/e1701596-709c-4c95-8476-9d6db8e1d8ea)
## Why It's Good For The Game
Should have debugged that
## Changelog
🆑
fix: Advanced Plastic Surgery is now unavailable shiftstart
/🆑
2023-12-14 16:51:41 +01:00
Watermelon914
b386d332c1 Reworks morgue trays. Freezers and morgue trays now have their own internal air. Organs no longer take damage when below freezing temperatures. (#80219)
## About The Pull Request
Morgue trays will now appear green if there's a revivable person within
the morgue tray with a key/ghost attached. They will make periodic beeps
every minute, which can be turned off.

Morgue trays and freezers now have an internal gasmix which
automatically cools down to -60 celsius degrees. As a result of this,
organs will not take damage when temperatures are below 0 celsius
degrees.
If an organ is within a carbon, it will take from the carbon's body
temperature instead of the external temperature. This means that if they
are covered in insulating wear, organs can still take damage if in a
freezer or morgue since their body temperature won't decrease
immediately.

## Why It's Good For The Game
Morgue trays are in a somewhat bad place with how they require you to
stay in your body if you are revivable so that they appear green. This
changes that. They're also supposed to preserve organs but they fail at
doing that, so organ preservation has been overhauled completely to be
more interesting.

## Changelog
🆑
balance: Organs can now be preserved by putting them in freezing
temperatures.
balance: Morgue trays and freezers will now cool down the contents
placed inside of them.
balance: Morgue trays will now properly display if someone stored within
them is revivable and make periodic beeps every minute.
/🆑

---------

Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
2023-12-12 22:17:03 +01:00
Time-Green
54ab1e3936 Organ movement refactor *Un-nullspaces your organs* (#79687)
<!-- 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. -->

closes #53931, #70916, #53931

## About The Pull Request

Organs were previously stored in nullspace. Now they are stored in their
prospective bodyparts. Bodyparts are now stored in the mob.

I've also had to refactor a lot of code concerning organ movement.
Previously, organs were only moved into bodyparts once the bodyparts
were removed. To accomodate this change, two major distinctions have
been made:

**Bodypart removal/insertion**
Called only when an organ is taken out of a bodypart. Bodypart overlays,
damage modifiers or other changes that should affect a bodypart itself
goes here.

**Mob insertion/removal**
Called when an organ is removed from a mob. This can either be directly,
by taking the organ out of a mob, or by removing the bodypart that
contains the organ. This lets you add and remove organ effects safely
without having to worry about the bodypart.

Now that we controle the movement of bodyparts and organs, we can fuck
around with them more. Summoning someones head or chest or heart will
actually kill them now (and quite violently I must say (chest summoning
gibs lol)).


https://github.com/tgstation/tgstation/assets/7501474/5efc9dd3-cfd5-4ce4-b70f-d0d74894626e

I´ve also added a unit test that violently tears apart and reconstructs
a person in different ways to see if they get put toghether the right
way

This will definitely need a testmerge. I've done a lot of testing to
make sure interactions work, but more niche stuff or my own incompetence
can always slip through.

## Why It's Good For The Game

<!-- 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. -->

A lot of organ work is quite restricted. You can't C4 someones heart,
you cant summon their organs and a lot of exceptions have to be made to
keep organs in nullspace. This lets organs (and bodyparts) play more
nicely with the rest of the game. This also makes it a lot easier to
move away from extorgans since a lot of their unique movement code has
been removed and or generalized.

I don't like making PRs of this size (I'm so sorry reviewers), but I was
in a unique position to replace the entire system in a way I couldn't
have done conveniently in multiple PRs

## 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. -->

🆑
refactor: Your organs are now inside your body. Please report any issues
with bodypart and organ movement, including exotic organ, on github and
scream at me
fix: Cases of unexpected organ movement, such as teleporting bodyparts
and organs with spells, now invokes a proper reaction (usually violent
death)
runtime: Fixes HARS runtiming on activation/deactivation
fix: Fixes lag when species swapping
/🆑

<!-- 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-12-09 17:50:46 +00:00
YesterdaysPromise
71a1fee2f1 Explodes device.dmi (#80025)
## About The Pull Request

I woke up today and thought 'what would be easy thing to do today so I
can say I've done something?'. Then I remembered I saw several gangtool
usages the time I split radio up, and I could remedy those. 7 hours
later, device.dmi is split in a folder of its own, and I've also given
unique sprites to door remotes and landing desginators.


## Why It's Good For The Game

The device.dmi was kind of a mess.

## Changelog

🆑
/🆑
2023-12-09 13:31:50 +01:00
Fikou
fe8fae8a13 fixes punished sect instant transformation from changing species (#80174)
## About The Pull Request
so for some fucking reason the signal for removing a limb doesnt send
whether or not its a special removal (which it does for adding)
and for another fucking reason the proc whether or not an organ should
matter for burden is NEVER CALLED
fixes #76163

also i think i fucked something up with echolocation. i should make it a
subsystem. i couldnt reproduce the bugs that i had but i had those bugs
when i was on a byond version without breakpoints so rip. a few days ago
an admin tried it on live and it made an infinite amount of images. i
tried it a few days later and it didnt happen? i have no fuckin clue

## Why It's Good For The Game
AHHHHHHHHHH!!!!!!!!!

## Changelog
🆑
fix: fixes punished sect giving you burden for stuff like changing
species
/🆑
2023-12-08 18:39:24 +01:00
distributivgesetz
f7cb0f8018 Rename notify_ghost_cloning to notify_revival (#80096)
<!-- 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

Renames 
- `/mob/proc/notify_ghost_cloning` to `/mob/proc/notify_revival`
- `/mob/dead/observer/proc/notify_cloning` to
`/mob/dead/observer/proc/send_revival_notification`
- `/atom/movable/screen/alert/notify_cloning` to
`/atom/movable/screen/alert/revival`.

I could have found a way to merge both procs together but default
parameters keep me up at night.

<!-- 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

Conciseness, code that is named after a removed feature is silly.

<!-- 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. -->

nothing playerfacing

<!-- 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-12-05 02:24:18 -05:00
distributivgesetz
274eb2a52e Removes Clone Damage (#80109)
<!-- 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

Does what it says on the tin. We don't have any "special" sources of
clone damage left in the game, most of them are rather trivial so I
bunched them together into this PR.

Notable things removed:
- Clonexadone, because its entire thing was centered around clone damage
- Decloner gun, it's also centered around cloning damage, I couldn't
think of a replacement mechanic and nobody uses it anyways
- Everything else already dealt clone damage as a side (rainbow knife
deals a random damage type for example), so these sources were removed

<!-- 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

Consider the four sources of normal damage that you can get: Brute,
Burn, Toxins and Oxygen. These four horsemen of the apocalypse are very
well put together and it's no surprise that they are in the game, as you
can fit any way of damaging a mob into them. Getting beaten to death by
a security officer? Brute damage. Running around on fire? Burn damage.
Poisoned or irradiated? Toxin damage. Suffocating in space? Brute, burn
and oxygen damage. Technically there's also stamina damage but that's
its own ballpark and it also makes sense why we have a damage number for
it.

Picture this now: We have this cool mechanic called "clone pods" where
you can magically revive dead people with absolute ease. We don't want
it to be for free though, it comes at a cost. This cost is clone damage,
and it serves to restrain people from abusing cloning.

Fast forward time a bit and cloning is now removed from the game. What
stays with us is a damage number that is intrinsically tied to the
context of a removed feature. It was a good idea that we had it for that
feature at the time, but now it just sits there. It's the odd one out
from all the other damage types. You can easily explain why your blade
dealt brute damage, but how are you going to fit clone damage into any
context without also becoming extremely specific?

My point is: **clone damage is conceptually a flawed mechanic because it
is too specific**. That is the major issue why no one uses it, and why
that makes it unworthy of being a damage stat.
Don't take my word for it though, because a while ago we only had a
handful of sources for this damage type in the game. And in most of the
rounds where you saw this damage, it came from only one department. It's
not worthwhile to keep it around as a damage number. People also didn't
know what to do with this damage type, so we currently have two ways of
healing clone damage: Cryotubes as a roundstart way of healing clone
damage and Rezadone, which instantly sets your clone damage to 0 on the
first tick. As a medical doctor, when was the last time you saw someone
come in with clone damage and thought to yourself, "Oh, this person has
clone damage, I cannot wait to heal them!" ?

Now we have replacements for these clone damage sources. Slimes? Slime
status effect that deals brute instead of clone. Cosmic heretics? Random
organ damage, because their mechanics are already pretty fleshed out.
Decloning virus? The virus operated as a "ticking timebomb" which used
cloning damage as the timer, so it has been reworked to not use clone
damage. What remains after all this is now a basically unused damage
type. Every specific situation that used clone damage is now relying on
another damage type. Now it's time to put clone damage to rest once and
for all.

Sure, you can technically add some form of cellular degradation in the
future, but it shouldn't be a damage number. The idea of your cells
being degraded is a cool concept, don't get me wrong, but make it a
status effect or maybe even a wound for that matter.

<!-- 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. -->

🆑
del: Removed clone damage.
del: Removed the decloner gun.
del: Removed clonexadone.
/🆑

<!-- 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-12-04 14:42:43 -08:00
distributivgesetz
f8b41f9442 Changes occurrences of recieve in code to receive (#80065)
## About The Pull Request

I've stumbled across this enough to finally go through the entire
codebase and fix it. I left out changelogs simply because rewriting
history logs is bad.
## Why It's Good For The Game

I find it pretty annoying because I stumble across words that are
misspelled for a few seconds, and I'm likely not the only one who feels
like this. Less spelling mistakes in code are better.
## Changelog
🆑
spellcheck: Occurrences of "recieve" has been changed to "receive".
/🆑
2023-12-02 14:50:57 -07:00
san7890
7f7688b60a Demotes the "electrical conductivity" flag from flags_1 to obj_flags (#80033)
## About The Pull Request

Code to handle this flag only ever existed on the `/obj` sublevel, so
there's no need for it to be on the `/atom` level `flags_1`. There was
probably a point in time in which mobs or turfs conducted electricity
but there's zero code for it anymore so we truly just live in a society
now.
## Why It's Good For The Game

Frees up a slot on `flags_1` (which is really nice actually), proper
scoping of certain bitflag stuff, etc.
## Changelog
Not relevant to players.

I may have screwed something up, will be doing a few passes on this
myself to ensure all the search and replaces went alright but we should
be good™️
2023-12-01 21:43:46 -05:00
LemonInTheDark
96f19b962a Removes some done todos (and ones that I think are dumb) (#80017)
## About The Pull Request

Most of these are mine that I just forgot about, only one I think anyone
cares about is the one in mobs.dm about making delta time match
subsystem yielding, but I think it's a bad idea so it's gone

Oh also, replaces an old comment of mine with an actual explanation
(it's about the icon cache and shit)
2023-12-01 00:58:13 +01:00
Thlumyn
ac7f41a416 Slimepeople Can Get Wings from Strange Elixirs (#80019)
## About The Pull Request

Adds slime wings. The slime wings look similar to dragon wings, but are
a bit more transparent throughout, especially in the middle part of the
wing membranes, and have some drippiness to the bottom (though thats
harder to see on darker slimes)


![image](https://github.com/tgstation/tgstation/assets/102194057/f19d6d09-c475-40d2-af68-8521fec3f9ba)

![image](https://github.com/tgstation/tgstation/assets/102194057/7a8fc450-9011-46d4-ba1b-acd836e51b25)
## Why It's Good For The Game

If even flies and skeletons can get wings - why not slimes? Especially
since xenobiologists which often end up as slimepeople can make the
flight potion via xenobiology.
## Changelog
🆑
add: Slimepeople can now get wings from flight potions.
/🆑
2023-12-01 00:12:07 +01:00
MGOOOOOO
c00f7d53a3 The Inversenning : Superior Healing Medications (#79342)
Introducing new inverse reagents for existing superior healing
medications! This push includes...

**Benzoic Acid** : Inverse of Salicylic Acid. Robust fertilizer that
provides a decent range of benefits for plant life.

**Oxymetholone** : Inverse of Oxandrolone. Anabolic steroid that
promotes the growth of muscle during and after exercise.

**Bamethan** : Inverse of Salbutamol. Blood thinner that drastically
increases the chance of receiving bleeding wounds.

**Pendetide** : Inverse of Pentetic Acid. An unusual bioradioactive drug
that purges basic radiation healing chems. Also increases the severity
of radiation poisoning.

**Hyoscyamine** : Inverse of Atropine. Heals heart and stomach damage,
and slowly removes minor toxin damage.

**Ammoniated Sludge** : Inverse of Ammoniated Mercury. A ghastly looking
mess of mercury by-product which causes bursts of manic hysteria.

**Inreziniver** : Inverse of Rezadone. Makes the user horribly afraid of
all things related to carps.

This is an effort to add more variety to the existing inverse reagent
system within chemistry. Not only should this variety serve to provide
additional options for a Chemist to experiment with, they should also
broaden the possibilities for already existing strategies.
2023-11-28 14:53:09 +00:00
itseasytosee
5dcdb6ca9c Stagger bugfix + pummeling grammar (#79977)
## About The Pull Request
Small bugfix which properly upgrades the difficultly of breaking out of
a passive grab to that of an aggressive grab if staggered and stamina
damaged. Punching someone while grappled gives unique damage text based
on the limb used.
## Why It's Good For The Game
Bugfix. More user feedback.
## Changelog
🆑 itseasytosee
fix: staggered targets now have the correct chance for escaping
grapples.
spellcheck: changed attack verb for punching a grappled target
/🆑
2023-11-28 14:47:10 +01:00
wesoda25
31c164c9a8 Dismemberment moodlet now properly clears for regenerated limbs (#79822)
## About The Pull Request

That's a mouthful. Upon being resurrected by a crystal, dismembered
ethereals now lose the dismemberment negative moodlet. Fixes: #79812

## Changelog
🆑
fix: the dismemberment moodlet will now properly clear for ethereals who
regrew a limb in their resurrection crystals
/🆑

---------

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2023-11-26 01:24:11 -08:00