161 Commits
Author SHA1 Message Date
Joshua KidderandGitHub 7a3ad79506 All camelCase (Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss) procs now use snake_case. UNDERSCORES RULE! (#94111)
## About The Pull Request
It's just a partial cleanup of
anti-[STYLE](https://github.com/tgstation/tgstation/blob/master/.github/guides/STYLE.md)
code from /tg/'s ancient history. I compiled & tested with my helpful
assistant and damage is still working.

<img width="1920" height="1040" alt="image"
src="https://github.com/user-attachments/assets/26dabc17-088f-4008-b299-3ff4c27142c3"
/>


I'll upload the .cs script I used to do it shortly.

## Why It's Good For The Game
Just minor code cleanup.

Script used is located at https://metek.tech/camelTo-Snake.7z

EDIT 11/23/25: Updated the script to use multithreading and sequential
scan so it works a hell of a lot faster
```
/*
//
Copyright 2025 Joshua 'Joan Metekillot' Kidder

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
//
*/
using System.Text.RegularExpressions;
class Program
{
    static async Task Main(string[] args)
    {
        var readFile = new FileStreamOptions
        {
            Access = FileAccess.Read,
            Share = FileShare.ReadWrite,
            Options = FileOptions.Asynchronous | FileOptions.SequentialScan
        };
        FileStreamOptions writeFile = new FileStreamOptions
        {
            Share = FileShare.ReadWrite,
            Access = FileAccess.ReadWrite,
            Mode = FileMode.Truncate,
            Options = FileOptions.Asynchronous
        };
        RegexOptions regexOptions = RegexOptions.Multiline | RegexOptions.Compiled;
        Dictionary<string, int> changedProcs = new();
        string regexPattern = @"(?<=\P{L})([a-z]+)([A-Z]{1,2}[a-z]+)*(Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss)([A-Z]{1,2}[a-z]+)*";
        Regex camelCaseProcRegex = new(regexPattern, regexOptions);

        string snakeify(Match matchingRegex)
        {
            var vals =
            matchingRegex.Groups.Cast<Group>().SelectMany(_ => _.Captures).Select(_ => _.Value).ToArray();
            var newVal = string.Join("_", vals.Skip(1).ToArray()).ToLower();
            string logString = $"{vals[0]} => {newVal}";
            if (changedProcs.TryGetValue(logString, out int value))
            {
                changedProcs[logString] = value + 1;
            }
            else
            {
                changedProcs.Add(logString, 1);
            }
            return newVal;
        }
        var dmFiles = Directory.EnumerateFiles(".", "*.dm", SearchOption.AllDirectories).ToAsyncEnumerable<string>();

        // uses default ParallelOptions
        // https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.paralleloptions?view=net-10.0#main
        await Parallel.ForEachAsync(dmFiles, async (filePath, UnusedCancellationToken) =>
        {
            var reader = new StreamReader(filePath, readFile);
            string oldContent = await reader.ReadToEndAsync();
            string newContent = camelCaseProcRegex.Replace(oldContent, new MatchEvaluator((Func<Match, string>)snakeify));
            if (oldContent != newContent)
            {
                var writer = new StreamWriter(filePath, writeFile);
                await writer.WriteAsync(newContent);
                await writer.DisposeAsync();
            }
            reader.Dispose();
        });
        var logToList = changedProcs.Cast<KeyValuePair<string, int>>().ToList();
        foreach (var pair in logToList)
        {
            Console.WriteLine($"{pair.Key}: {pair.Value} locations");
        }
    }
}

```

## Changelog
🆑 Bisar
code: All (Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss) procs now use
snake_case, in-line with the STYLE guide. Underscores rule!
/🆑
2025-11-27 15:50:23 -05:00
RikuTheKillerandGitHub 337ab7f2c3 Refactors status effects to be based on subsystem ticks, among a few other minor status effect fixes/refactors (#93694)
## About The Pull Request

Refactors status effects to track their durations and tick intervals
using counters.
In effect, [var/duration] now directly refers to how many deciseconds
are left on the status effect.
I've also moved the old [var/tick_interval] [world.time] implementation
to a tick-based [var/time_until_next_tick] counter.

There are a couple, less noteworthy changes in here as well. The main
one is that there was an unused bit of bloat code for setting tick
intervals based on a random lower and upper threshold, but that can be
done in tick() now so it's completely redundant, and I thus removed it
entirely. That makes parts of [proc/process] much easier to read.

I added/modified some unit tests (which I expect to fail) to verify that
[var/duration] and [var/tick_interval] are both multiples of the
subsystem wait assigned to the status effect. If the programmer wants a
duration of 2.5 seconds, they expect it to work that way, but it won't
because SSfastprocess only ticks once every 0.2 seconds, which 2.5 is
not a multiple of. This becomes way more apparent when a status effect
is set to use SSprocessing.

The final, perhaps most important unit test I've added, is one that
verifies that the overall tick count and overall accumulated
[seconds_between_ticks] are equal to "[var/duration] /
[var/tick_interval]" and "[var/duration]" respectively.
## Why It's Good For The Game

The main thing this PR fixes is timing inconsistencies. Before this PR,
durations and tick intervals were tracked using world.time, while the
[proc/tick] call timing was dependent on the wait time of the subsystem
the status effect was processing on. Thing is, SSfastprocess and
SSprocessing rarely run completely in one tick during real gameplay.
This led to a continuous desync where status effects were consistently
inconsistent in their overall tick count. This is a big problem as
[seconds_between_ticks] is constant and thus doesn't account for this
difference in tick count.

As an example, Changeling's Fleshmend has a duration of 10 seconds, a
tick interval of 1 second and a healing rate of 4 brute per tick.
Previously, if the server was lagging even slightly and it only ticked 8
times over the course of 10 seconds, you would heal 32 health rather
than the 40 that a full Fleshmend would give you. The total effect
potency of a status effect being reliant on server lag is incredibly
stupid, especially for status effects that have an associated cost.
(like the aforementioned Fleshmend)

As for the refactors, they make status effect code easier to read and
debug. Unit tests also make verifying things are working as intended
much easier.
## Changelog
🆑
fix: Status effects now tick consistently, with Fleshmend and such
giving a consistent total healing amount. Report any oddities.
refactor: Status effect code is now easier to read and makes more sense.
Again, report any oddities, the changes are major.
/🆑
2025-11-07 15:25:16 +01:00
GhomandGitHub 999bde8f84 Most screen alerts now fit the player's hud style. (#93493)
## About The Pull Request
Most screen alerts that use the midnight hud style no longer have the
button baked in their icon. Other screen alerts with their own
background or shape (robot and mech alerts, atmos, heretic buffs or
debuffs etc.) are not affected. Also updated a couple sprites but didn't
spend too much time on them. Mostly reusing existing assets.

Montage of how the alerts look on threee different hud styles
(Operative, Trasen-Knox, Detective, ALSO I FIXED THE BUCKLED ALERT
ALREADY):
<img width="293" height="323" alt="image"
src="https://github.com/user-attachments/assets/3a2b972b-aa5a-4c27-a454-c8c39acf6e20"
/>
It looks only a smidge iffy on the syndicate since the top and bottom
borders aren't layered over all the overlays, but it isn't something to
worry about in this PR.

## Why It's Good For The Game
Screen alerts always had the midnight hud button baked in their icon
states (now overlays), which completely disregard the player's hud
setting, much unlike action alerts buttons. Melbert has also said that
it'd be nice if the code for action buttons could also be used in screen
alerts and viceversa, to slim things down. That's obviously not what I'm
doing today, but having most of the screen alerts already without the
baked background will surely help if we ever pursue that objective.

## Changelog

🆑
refactor: Refactored screen alerts a little. Most should now fit the
player's hud style. Report any issue.
imageadd: A few screen alerts have been polished/updated a little.
/🆑
2025-10-31 15:30:39 -06:00
MrMelbertandGitHub 44acefa73f More things use trait huds over raw hud management (#93084) 2025-10-02 21:36:40 +02:00
GhomandGitHub 0aa5ef9eb8 The chain of command boosts action speed and not just move speed. (#92964)
## About The Pull Request
Most contributors do not know or forget that we also have action speed
modifiers (which are a tremendous copypasta tbh) and not just move speed
modifiers. This is probably just another example of this.

Also the item had an unused variable, no context tips and didn't have an
attack animation, a balloon alert or a chat message when performing the
action, only a whip sound.

Also gave the chain of command its own file.

## Why It's Good For The Game
I think it makes sense for the chain of command to hasten someone in
ways other than just running one's legs. Also it's kinda more effective
at boosting action speed because `do_after` actions are not as frequent
as moving the mob in any direction at all.

## Changelog

🆑
balance: The secondary action of the chain of command (the chained whip)
also boosts action speed and not just move speed.
qol: The chain of command now has contextual tip for its secondary
action, and plays the whip attack animation when it's done.
/🆑
2025-09-15 17:27:37 -04:00
e991857e88 Girlifies His Grace (4) (low-stakes edition) (#92658)
## About The Pull Request

Alternative to 3️⃣(#92591), which has been fatally shot.

Makes it so that His Grace can be turned into Her Grace via a
xenobiology gender-change potion. Her Grace turns the souls of the
consumed into confetti, creating a nice party atmosphere.

Also adds pronoun helpers for /atom/s, as they weren't there before.

## Why It's Good For The Game

I thought this was a good idea
<img width="934" height="153" alt="image"
src="https://github.com/user-attachments/assets/aff7abe0-86b6-47e1-a8e6-2c233544e9aa"
/>

It's a silly little variation, and it's purely voluntary. Couldn't hurt.

## Changelog
🆑
add: His Grace will now drink gender-change potions
/🆑

---------

Co-authored-by: Thunder12345 <Thunder12345@users.noreply.github.com>
2025-09-01 12:50:02 +12:00
Thunder12345andGitHub 7c6e6422cc Misc File Purge: The Return (#92438)
## About The Pull Request

Purged several files inthe theme of misc.dm and broken the contents out
into better organised files.

Incidentally done some minor cleanup by removing an unused global list
referring to a string file that no-longer exists, and removing a useless
proc that replicated the behaviour of file2list().

## Why It's Good For The Game

See #60358 and all its successors

## Changelog
🆑
code: Reduced the number of files named misc.dm or similar by 14%.
/🆑
2025-08-12 21:18:24 +02:00
RhialsandGitHub 70d36ada20 The Chain of Command can now give a speed boost by whipping other players (#92387)
## About The Pull Request

The Chain of Command can now hasten other mobs when right-click
attacked.



https://github.com/user-attachments/assets/b6c2185e-0edb-45d5-a015-3c7e0a684ffc



It's not a very ample speed boost, but it's enough to make it worth
taking into battle if you have friendlies to buff. Lasts 7 seconds.
Refreshes on hit. You cannot whip yourself.

This only applies to the Chain of Command, not whips nor tailwhips.
There's only one of these bad boys on the station. Use it well.
## Why It's Good For The Game

The chain of command is nice as a ceremonial weapon, but it doesn't
actually see any use in combat. Ever.

Instead of just making it do more damage (boring), I wanted to make it a
support tool. The captain (its owner) should usually be in the backlines
of a fight, after all.

Support tools gives less combat-focused players (or pacifists) a way
contribute meaningfully to a team fight (nukies, revs). Not equipped to
fight the blob with the rest of the team? You can use this to buff your
allies without putting yourself within the blob's reach.

<details>
<summary>The EVIL secret reason I think it's good for the
game...</summary>
It gives people some mechanical incentive to steal the chain of command
for once >:)
</details>


## Changelog
🆑 Rhials
balance: The Chain of Command will give a speed bonus to other players
when right-clicking them.
/🆑
2025-08-06 20:21:18 -04:00
necromanceranneandGitHub 72d829aa50 Makes deep water not quite so ultra lethal so you can actually go for a swim (#91135)
## About The Pull Request

Currently, due to the amount of stamina damage that entering a tile
deal, as well as the amount of stamina damage and the frequency of the
stamina damage inflicted by the swimming status effect, wading into deep
water may be tantamount to suicide without stimulants.

To avoid this problem, we've made some adjustments to how and when we
inflict our swimmer with stamina damage.

Firstly, we've reduced the values for stamina loss and oxygen loss by a
fairly decent margin.

Secondly, we only inflict stamina damage on wading into deep water 30%
of the time. When this happens, we award experience and give our swimmer
the exercised buff.

Thirdly, for a bit of realism, our combined weight class of equipped
items and combined equipped item slowdowns contribute to our stamina
penalty from wading through water. Smaller objects do not affect this,
but things like jumpsuits and backpacks do. Shorts do not contribute to
this weight specifically. You're definitely going to sink if you are
wearing the RD's MODsuit. (though the RD has the strength to move in
that thing anyway)

Fourthly, we increased the tick interval for the swimming status effect
from every second to every five seconds. This better represents long
term swimming exhaustion. However, we don't award athletics skill points
for this. You have to actually move to get skill improvements.

Breath loss from drowning also has been put behind a probability,
because losing breathes is actually pretty severe and we don't want this
increment infinitely quickly.

As an added bonus, we now include athletics boosters to swimming.

Finally, we fixed a runtime in the exercised status effect when assigned
to a mob without a mind.

## Why It's Good For The Game

One time I found an assistant that had drowned in the 1x3 deep water on
Metastation because he didn't know stepping into deep water was
basically asking to die a horrible death. Rather nasty.

Also that other swimming PR reminded me that this needs fixing. It is
hilariously lethal. I just want to go for a swim at the beach!

## Changelog
🆑
balance: Swimming is no longer so hyper lethal, and also benefits from
athletics boosters.
balance: By default, swimming through deep water does a somewhat low but
mounting quantity of stamina damage. Reduced by athletics skill and
athletics boosters.
balance: Your total carried equipment weight (and their slowdowns, if
any) contribute to your stamina loss while swimming. If you fell into
deep water, best start stripping items.
balance: Floating is slightly less lethal, especially if you are
starting to drown.
fix: Fixes a runtime caused by the exercised status effect.
/🆑
2025-05-20 22:11:58 +01:00
SmArtKarandGitHub 845ed7459e Bravo Six, Going Dark: Refactors client colors to fix dupe issues and support filters (#89843)
## About The Pull Request

Completely refactored how client colors are handled. Now they're similar
to traits, having a source associated with them. Instead of adding and
removing by strict type (which makes client colors prone to getting
duplicated and not cleaned up) you remove a filter associated with a
specific source. Adding another client color with the same source as an
already existing one will replace the existing one if its of a different
type, or do nothing if they're the same (unless force is set to TRUE).
Client colors can also force filter splitting, putting all colors that
come before them, themselves, and all colors after them into separate
filters - this is useful to prevent mixing in filters which are supposed
to remove a certain color.

<details>

<summary>Example of how Perceptomatrix and nightmare vision goggles
combined before this PR:</summary>


![dreamseeker_fBOse2i0jq](https://github.com/user-attachments/assets/fb164e1f-ce8b-4a8c-8820-5db25e710056)

And this is after, as you can see nightmare vision effect's red is only
slightly tinted by perceptomatix instead of being literally halved.


![dreamseeker_U6A24fetK8](https://github.com/user-attachments/assets/8d8b3eb5-9f53-4646-bc56-0f5897013c6f)

</details>

Additionally, added support for custom filters (and not just colors) to
client color code to allow us to work with more colorspaces.

Also fixed weird blindness behavior, so this also 
Closes #89787

## Why It's Good For The Game

Makes code less ass to work with, fixes weird color mixing, etc.

## Changelog
🆑
fix: Fixed perceptomatix helmet allowing you to see even when
unconscious
refactor: Refactored how client colors are handled, ensuring that
certain effects like nightmare goggles don't disappear when another
vision-affecting piece of clothing is worn.
/🆑
2025-03-17 11:35:11 +00:00
Time-GreenandGitHub 97459d6667 FINALLY!! Plant bodyparts will heal when transplanted (#89306)
## About The Pull Request
Finally, I've done it. 

You can get plant limbs attached, and those limbs will actually
regenerate in light!

I've done the same for shadow healing for nightmares and shadowpeople. 


![image](https://github.com/user-attachments/assets/bfcc30eb-2c05-4512-85f1-e44a378aa8e7)

**Details:** 
I've removed the healing/damage from their species, and instead have the
prospective limbs add a new /datum/status_effect/bodypart_effect to the
carbon, which other bodyparts with the same effect merge into.

Plant people in specific also had oxy and tox healing, as well as
nutritional gain. These attributes have been integrated into the
bodyparts aswell, and scaled to the amount of bodyparts you have. You
can take 1 plant limb to get 1/6th of the oxygen and toxin healing of a
normal podperson. Same for nutritional gain. (Fun fact: you need 2 plant
limbs to never lose hunger, 3 to actually be nutrition positive!) Damage
wise, if you have 1 plant limb, you get 1/6th the plant healing but
focused on only the plant limb. (This is hopefully exactly as you'd
expect).

Fun fact: if you remove your lungs and organs and take plant limbs, you
will still die from oxygen loss or toxin loss because the oxy and tox
healing is really weak.

## Why It's Good For The Game
Honestly this is peak sandbox. I remember when transplants got added,
and I took a plant limb, but it didn't heal in light :(
This shattered my immersion and deeply saddened me. Honestly this is why
I started the whole dedatumisation of species tirade.

But it's here. Trans plant plant transplants will heal in light.
Tgstation is saved and all furry downstreams are rebasing.

## Changelog
🆑
add: Taking plant or shadow limbs will now behave as expected! Take a
plant arm, and it will heal in light! Or take plant and shadow limbs and
be in constant agony as you realize this world was not made for you
refactor: Refactors how we handle photosynthesis/nyxosynthesis by moving
it into a new status_effect framework controlled by podyparts
/🆑
2025-02-23 01:02:29 +00:00
LucyandGitHub 851c5a5df9 Convert all traits given by status effects to use TRAIT_STATUS_EFFECT(id) (#89291)
## About The Pull Request

This makes (almost?) all traits given by status effects use
`TRAIT_STATUS_EFFECT(id)` as their source, rather than the previous mix
of `id`, `type`, `REF(src)`, or some bespoke thing.

## Why It's Good For The Game

Consistency is good.

## Changelog

No user-facing changes
2025-02-01 21:21:44 +01:00
MrMelbertandGitHub 3c40876f15 Fix itchy skillchip status effect "Curse of Mundanity", adds unit test for effects set to "Curse of Mundanity" (and missing IDs) (#88240)
## About The Pull Request

Fixes a lot of status effects having the default alert, adds a unit test
to check that status effects don't forget to change it

I chose a test rather than just making the default "no alert" because I
think people making status effects should think about whether it should
have an alert

Also I added a test for effects which did not set an ID because that's
kind of important, I applied the same mindset here to account for
abstract types but admittedly less sold on this one.

## Changelog

🆑 Melbert
fix: You should be afflicted by the "Curse of Mundanity" far, far less
/🆑
2024-11-29 15:41:37 +01:00
MrMelbertandGitHub d3bc3e8cb4 Being drunk or having a broken arm hurts accuracy with ranged weapons. Also cleans up a fair bit of hand handling to be more readable (#87904)
## About The Pull Request

1. Having a broken arm will affect your accuracy when firing a weapon
with that arm, even potentially causing damage to you if it's a weapon
with recoil. This effect is not applied under the effects of a
painkiller.

2. The sister effect of this (punching someone with a broken arm) now
also has an interact with painkillers (it can no longer block your
attack).

3. Being drunk heavily affects ranged weapon accuracy, unless you're the
bartender

4. A lot of hand handling cleanup, using new macros to make it a lot
more readable at a glance

## Why It's Good For The Game

We have this system for modifying firearm accuracy but we don't really
use it commonly, and I feel like it slots in well with a lot of places

For broken arms, it adds some more depth to the wound system, in the
same way that trying to punch someone with a broken arm causes pain. (I
actually want to expand this to melee weapon accuracy and attacking with
melee weapons in general, but that's for a later time)

For drunkenness, it just adds to the drunk shenanigans. It also slightly
reduces the effectiveness of drinks as combat healing chemicals, such as
quadsec - makes it a bit more of a trade off.

## Changelog

🆑 Melbert
balance: Having a broken arm affects your accuracy with ranged weapons
fired with that arm. Utilizing a painkiller will nullify this effect,
however.
balance: Painkillers will prevent your punches from being cancelled due
to having a broken arm. You'll still take damage, though.
balance: Being drunk now affects your accuracy with ranged weapon. The
bartender is immune to this effect via their skillchip.
code: A lot of code involving left and right hand handling has been
cleaned up, easier to read. Report any oddities, like left and rights
being flipped
/🆑
2024-11-19 19:31:06 +01:00
MrMelbertandGitHub 239797a4ee Deletes misleading infinite define, adds defines for clearer status effect durations (#87842)
## About The Pull Request

1. Deletes `INFINTIE`, it is misleading and not at all a big number and
causes bugs
2. Adds `STATUS_EFFECT_PERMANENT` and `STATUS_EFFECT_NO_TICK` to make it
clearer what infinite status effects are
2024-11-12 17:24:27 +01:00
VekterandGitHub 8fd9d6b49c Makes mayhem-in-a-bottle text more obvious (#87586) 2024-11-01 00:48:40 +02:00
GhomandGitHub 734051bb1f update_body_parts() is now called when adding or removing bodypart overlays. (#87215)
## About The Pull Request
I'm making sure that `update_body_parts()` is properly called when
changing bodypart overlays, so that they actually show up the very
moment they were changed. However, to avoid redundant
`update_body_parts()` calls on init or while changing species, I've
added a living flag that stops `update_body_parts()` from being called
in these situations. I also scoured the codebase for other redundant
`update_body_parts()` to remove and things to clean up a little.

## Why It's Good For The Game
This automates the process of calling `update_body_parts()` a bit.

## Changelog
Mainly backend.
2024-10-15 18:49:05 +02:00
grungussussandGitHub 58501dce77 Reorganizes the sound folder (#86726)
## About The Pull Request

<details>

- renamed ai folder to announcer

-- announcer --
- moved vox_fem to announcer
- moved approachingTG to announcer

- separated the ambience folder into ambience and instrumental
-- ambience --

- created holy folder moved all related sounds there
- created engineering folder and moved all related sounds there
- created security folder and moved ambidet there
- created general folder and moved ambigen there
- created icemoon folder and moved all icebox-related ambience there
- created medical folder and moved all medbay-related ambi there
- created ruin folder and moves all ruins ambi there
- created beach folder and moved seag and shore there
- created lavaland folder and moved related ambi there
- created aurora_caelus folder and placed its ambi there
- created misc folder and moved the rest of the files that don't have a
specific category into it

-- instrumental --

- moved traitor folder here
- created lobby_music folder and placed our songs there (title0 not used
anywhere? - server-side modification?)

-- items --

- moved secdeath to hailer
- moved surgery to handling

-- effects --

- moved chemistry into effects
- moved hallucinations into effects
- moved health into effects
- moved magic into effects

-- vehicles --

- moved mecha into vehicles


created mobs folder

-- mobs --

- moved creatures folder into mobs
- moved voice into mobs

renamed creatures to non-humanoids
renamed voice to humanoids

-- non-humanoids--

created cyborg folder
created hiss folder
moved harmalarm.ogg to cyborg

-- humanoids --




-- misc --

moved ghostwhisper to misc
moved insane_low_laugh to misc

I give up trying to document this.

</details>

- [X] ambience
- [x] announcer
- [x] effects
- [X] instrumental
- [x] items
- [x] machines
- [x] misc 
- [X] mobs
- [X] runtime
- [X] vehicles

- [ ] attributions

## Why It's Good For The Game

This folder is so disorganized that it's vomit inducing, will make it
easier to find and add new sounds, providng a minor structure to the
sound folder.

## Changelog
🆑 grungussuss
refactor: the sound folder in the source code has been reorganized,
please report any oddities with sounds playing or not playing
server: lobby music has been repathed to sound/music/lobby_music
/🆑
2024-09-23 22:24:50 -07:00
GhomandGitHub c91c50f937 You can now raise lobstrosities from chasms chrabs. (#84969)
## About The Pull Request

Lobstrosities can now be raised from aquarium icemoon/lavaland chrabs.
First of all, you've to get a live chrab, an aquarium, and some fish
feed. Second, you place the chrab inside the aquarium and turn the
'allow breeding' settting on (should probably rename it to a more apt
name now). Keep the chrab well fed, and possibly with some friends and
props in the same aquarium until it develops into a hopefully calm
juveline lobstrosity and plops out of the aquarium (it can take some
time). From there you can tame it by feeding it its favorite food: arms
and lavaloop fish, and wait another dozen minutes for it to mature into
a fully grown lobstrosity.

Juveline lobstrosities are basically smaller and weaker lobstrosities,
if not slightly faster in some ways. Unlike their taller counterparts,
they can be tamed. Once done so, they'll retain their tamedness once
grown up. Regardless, tamed lobstrosities can be given the pet command
to fish for things by pointing at them. Thanks BenMatrix for the
profound fisher component, woo.

The chrab's weigth and size influence the growth speed of the first
stage faster, meaning bigger chrabs (may require crossbreeding) will
turn into juveline lobstrosities quickly. Amongst other things
influencing the resulting mob are fish traits:
Several traits have been given effects that apply to the mob, such as
nocturnal regeneration, being venomous or being able to fly akin space
carps. Also a new one that prevents the resulting lobstrosity from fully
developing

Now tested.

## Why It's Good For The Game
I'm building upon fishing and aquarium stuff, which has been an interest
of mine in a good while, though most of it doesn't have that many
practical uses, I'm slowly trying to make it cooler, and chasm chrabs
growing into lobstrosities is pretty much in line with the fluff texts
for the fish.

Eventually I'll have to add tips inside fishing toolboxes, otherwise
people won't know even half of it.

## Changelog

🆑
add: You can raise lobstrosities from chasm chrabs inside an aquarium
with the 'allow breeding' setting on. Keep the fish well fed, healthy
and not lonely if you don't want an hostile one.
add: Juveline lobstrosities (from chasms, plasma rivers, or aquariums,
xenobio too) can be tamed with arms and lavaloop fishes.
add: For lobstrosities grown from aquariums, they can have additional
effects based on the fish traits they had in the aquarium, like being
venomous or even flying.
/🆑
2024-07-23 19:39:32 +01:00
MrMelbertandGitHub 34f3f479ae Small hulk cleanup / nukes TRAIT_IGNOREDAMAGESLOWDOWN (#85003)
## About The Pull Request

I was investigating a bug with hulk in which using it while damaged
doesn't put you back on full speed

I noticed `TRAIT_IGNOREDAMAGESLOWDOWN` on its own was subtly broken, in
that it did nothing if the user did not call `updatehealth` afterwards

And guess what, most (if not all) uses of the trait did not do this, so
it never applied correctly

So I nuked the trait entirely, made all uses of it use the same thing
morphine uses (`/datum/movespeed_modifier/damage_slowdown`)

And since I was auditing this I saw the ball module was broke, it
removed the immunity but never added it. Quick fix

I also cleaned up some Hulk stuff while I was in the area because I was
in the area. I removed all instances of `check_mutation` and replaced it
with trait checking because it made more sense.

I also also fixed a bug with the simple flying element never removing on
detach because I touched something that uses it for the above change.

## Changelog

🆑 Melbert
fix: Using hulk (and a myriad of similar effects) now properly updates
your movespeed to ignore the damage movespeed penalty
fix: Some things which temporarily make you fly don't make you fly
forever
fix: MODsuit ball module now properly makes you immune to damage
movespeed penalty when in ball form
fix: Adding Hulk via VV dropdown doesn't default to adding the strongest
hulk available (that which is used by the medieval pirates)
/🆑
2024-07-17 01:14:08 +02:00
carlarctgandGitHub ff836e10be First Genetics Content in 5 Years (Adds new positive mutations!) (#83652)
## About The Pull Request

Sister PR to #83439, that needs to be merged before this.

Adds a plethora of new positive mutations to the game!

Mutations now have a variable that directly adds and removes traits
instead of manually doing so for idk

Tripled cryobeam range.

Made the mushroom hallucinogen's code more readable.

- Adrenaline Rush
Trigger your body's adrenaline response, granting you 10 * P units of
pump-up, synaptizine, and determination. After 25 seconds, you crash,
recieving 7 * S units of tiring and dizzying solution. Can be Energized,
Powered, and Synchronized.
- Mending Touch
Transfer injuries from the target to yourself! Heal 35 * P damage,
recieving up to 35 * S damage in turn. Transfers moderate wounds, fire
stacks, and attempts to parallel limb-to-limb damage. Has bonuses for
pacifist players. Can be Energized, Powered, and Synchronized.
- Elastic Arms
Your arms become floppy and you can interact with things as if you were
adjacent to them from one tile further! Does not work through walls or
dense objects, and you become unable to lift huge items, pull large
corpses, and you get chunky fingers.

Split temperature adaptation into three:
- Cold Adaptation
Gain cold immunity, gain ice slip immunity!
- Heat Adaptation
Gain heat and ash storm immunity 
- Thermal Adaptation
Resist both cold and heat, but no extra fancies. The sprite is green
now!
Pressure Adapt has a purple sprite.

You can mix the cold mutations with Fiery Sweat to make these new ones:

- Cindikinesis
Instead of summoning snow, you can now summon... ash. Wow. Very cool.
- Pyrokinesis
You can fire fire now! Fires beams of heat that, unlike the temperature
gun, actually ignite on hit. Higher instability cost than its sister
mutation.

The changes have been themed primarily around classic superhero
gimmicks. Genetics feels like a natural spawning point for superheroes,
and its mutations show this via the good ol' 'radiation made me fire eye
lasers' hero backstory. Adding more ways to be a superhero is fun.

Also, added two new speech mutations:
- Trichromatic Larynx
Every word you say is now either red, green, or blue!
- Heckacious Larynx (Trichromatic Larynx x Wacky)
You sound, well. Absolutely ridiculous. Spectacularly silly. Profoundly
wacky. Don't give it to the clown.
Unlocked the Elvis mutation as well.

## Why It's Good For The Game

> Adds a plethora of new positive mutations to the game!

Genetics is in desperate need of new content, all it's had for years is
a slow gutting and removal of the few things it does have. Hulk is,
being real, stupid, dumb, stagnated, and overpowered, but it's been
begrudgingly accepted because genetics is quite literally just, nothing
without it. I'm here to add the somethings to genetics and add some more
variety (and no i'm not touching hulk)

> Mutations now have a variable that directly adds and removes traits
instead of manually doing so for every mutation.

Less stupid

> Tripled cryobeam range.

Shit joke mutation is now long-range shit joke mutation!

> Made the mushroom hallucinogen's code more readable.

Slightly OOS because I was going to add color blind mutations but
decided not to creep. This piece o shit code has been hurting my head
for years and now that I've finally understood it I want to make sure
others don't go through that pani.

> - Adrenaline Rush
A quick burst of some mild chemicals at the cost of eventual nausea,
sounds like a fair trade to me! If you're already on the ground, this
isn't going to do anything.
> - Mending Touch
Healing is something that's lacking from the mutations, and this puts a
fun spin on it, making the caster a damage pincushion as they heal and
absorb damage.
> - Elastic Arms
Classic superhero power, very funny, lots of silly and sandbox
potential. Has innate drawbacks because 1. thematic and 2. it's pretty
strong

> Split temperature adaptation into three:
They combine into the same thing it used to be, so don't freak out. This
just adds some separation between the immune types, for things like
themed superheroes.

> - Cold Adaptation
Perhaps mildly concerning, but I think this might be a fun spin on it?
TODO: make hiking boots effect?
> - Heat Adaptation
Nothing to say. It's cool.
> - Thermal Adaptation
Nothing wrong with this mutation so it stays in

> You can mix the cold mutations with Fiery Sweat to make these new
ones:
How can we have frozone and not, uh human torch or something. why are
there no heavy hitter fire superheroes in marvel or dc???
> - Cindikinesis
Can't really summon an equivalent to snow that's actually useful, so
here's this instead. Clown might like it, or maybe the chemist.
> - Pyrokinesis
The ignition effect is fairly weak and mostly a deterrent. I think this
is the most dangerous ranged mutation in the game, which is kinda sad.

> - Trichromatic Larynx
Colors are fun! We have speech mutations that change words but none that
change their color. Though, to be fair, this was mostly added for the
mutation below's combination.
> - Heckacious Larynx (Trichromatic Larynx x Wacky)
I felt that Wacky wasn't nearly wacky enough. It just made your speech
comic sans. That's great and all, but. It's not much? This will be a
truly clownly mutation, the Genetics equivalent of a HONK mech. I made
it a combination mutation specifically to restrain its power level.
> Unlocked the Elvis mutation as well.
Was there a reason to lock this?

## Changelog

🆑
add: Added tons of new mutations to Genetics, alongside some recipes!
add: Thermal Adaptation has been made a combination mutation from the
stronger but narrower Cold and Heat adaptations.
balance: Cryobeams have 9 tile range, and fiery sweat doesn't cause
spread on contact.
image: Added some neat new sprites for the new mutations, and added a
greyscale version of the magic hand sprites.
code: Infinitesmally improved mutation code.
/🆑
2024-06-28 17:52:09 -04:00
Joshua KidderandGitHub df0e0811c2 Significantly increases stamina recovery on most effects that provide it (#83556)
## About The Pull Request

Currently, stamina healing is a niche side effect on many drugs, besides
a few effects (mostly heretic powers, an obscure side effect of some
drinks) that actually contribute to a significant shift in gameplay
style when you use them. In this PR I significantly increased the
stamina recovery on almost every drug and some effects that provide it.

Points of interest (not completely inclusive):
Syndicate stimulants heal 12 instead of 5 stamina damage. This will
bring you out of stam crit in two cycles, and let you heal out of the
slowdown from the stamina damage from a baton strike. The current rate
of 5 takes 5 seconds to heal out of stam crit, and the stamina reset
takes place before you heal out of stamina damage slowdown.
Bath salts heal stamina at the rate stimulants used to. Meth heals
stamina slightly slower.
Changeling adrenaline will instantly bring you out of stam crit if
you're in it; otherwise, it will heal 10 stamina damage.
Ephedrine heals 4 stamina per life, instead of 1.
Being so drunk that you black out and give up your body to ghost control
will make you heal stamina more quickly than an ascended rust heretic.
You will also likely be dying of liver damage.
## Why It's Good For The Game

At the levels they are set, most of these stamina healing effects have
almost no effect on gameplay whatsoever except in the case of tanking a
couple of extra disabler shots (only in the case of the high end drugs),
or being able to do stamina consuming tasks slightly longer (breaking
boulders, grinding with pestle and mortar, working out, ???).

Adjusting these numbers would make these drugs an actual factor in
combat situations that rely on stamina crit (stun batons, ebows, stamina
damaging poisons and diseases). Most of the drugs already have side
effects such as brain and organ damage, which in the current state
hugely outweighs any reason to use most of them besides a few that give
a movespeed buff or prevent baton knockdown (ephedrine, stimulants).

This only affects stamina healing. There has been no change to any other
interactions with things that knock down or cause any other kind of
stun.

These changes are in consideration of the fact that taking stamina
damage puts you in a cooldown before you can recover your stamina
naturally. Effects that cause steady stamina damage will bottom out your
stamina the way they do now, unless you use something to heal it.
## Changelog
🆑
balance: Stamina healing has been significantly increased for most
reagents and passive effects.
/🆑
2024-06-11 22:03:50 -07:00
Time-GreenandGitHub 7499b84c9e Protects space spawned humans from radiation nebula (#83202)
Fixes #80864 

When a mob is spawned in space in a nebula, they get 1 minute of
radiation immunity. Ninja is the main one, but it'll also apply to other
space spawned mobs (lone nukie, space changeling?)

This only works for dynamic spawned antags. If an admin forces ninja
through an event, it doesnt work


![image](https://github.com/tgstation/tgstation/assets/7501474/98fbb499-86b3-43bc-bf63-403d7fa8df39)

🆑
fix: Space Ninja and other space spawned antags get a 1 minute radiation
shield in the radioactive nebula
/🆑
2024-05-15 03:21:13 +02:00
MrMelbertandGitHub 11843651f5 Allows status effects with alerts to display their duration (on the alert), adds it to a select handful (#83211)
## About The Pull Request

Plainly: Expands the status effect API so their alerts can showcase
duration remaining.


https://github.com/tgstation/tgstation/assets/51863163/02eaad84-ebb7-4af9-9895-977c6e71acc4

## Why It's Good For The Game

I figure there are some status effects out there which really want the
player to know how long the duration is.

And right now, for 95% of them, you have to code dive to find out. This
is rather punishing for players who... don't code dive.

At the same time, there are effects which *do* tell you how long they
last, which leaves it up to the player to intuit when it'll run out.
This can get a bit silly during lag, and again, punishes new players.

That's not to say I think every status effect should report how much
duration is left: **For very common effects, like sleeping, it should be
left up to the player to guess.** Otherwise we lose a lot of paranoia
and feeling of helplessness. (Also keep in mind this only applies to
status effects with alerts associated.)

Hence why I only added it, largely, to the more "gamified" buffs and
debuffs - Things from (generally) one or two sources and with a static
duration, (or things which already informed the player how long they
last).

Notable ones include Fleshmend, Convulsing (from emag defib), Regen
core.

## Changelog

🆑 Melbert
qol: Some alerts, such as Fleshmend's, show their remaining duration on
their icon.
/🆑
2024-05-14 08:36:23 +02:00
necromanceranneandGitHub ca2ff33292 Rocky DLXIII: Fitness to Athletics, Athletics skill influences Boxing against Boxers, Boxing overhaul, Evil Boxing (#82611)
## About The Pull Request

### Changes Fitness skill to Athletics skill; Removes the sprite growth
as the only meaningful reward

Basically just a rebranding so that it is more broad in its concept. It
isn't just about peak physique. It's about how you can apply it too.

Reaching Legendary rewards you with the Golden Gloves.

### Boxing Overhaul

I started it in this pr here
https://github.com/tgstation/tgstation/pull/80635

But this is a more significant overhaul of boxing from the ground up.
Namely, it now is majorly influenced by the Athletics skill, and also
more thoroughly aligns with conventional punching in its current state.
However, a major component of this is that boxing's breadth of mechanics
is only relevant when used against another boxer. Non-boxer targets are
only ever going to get smacked by a stamina punch, as it is currently
(and more or less the same values too). Additionally, boxers cannot
punch someone who is either unconscious or in stamina crit, so it can't
be used to maintain stamcrit.

- Boxing now has a One-Two Punch mechanic. Swapping between the left and
right mouse buttons to punch and maintaining this causes every second
punch to do more damage (to boxers). Breaking this chain by punching
with the same button twice will cause you to lose damage (against
boxers).

- Boxing now can have crits occur below 50 stamina damage (against
boxers). However, to knock someone out clean, the target must be
staggered from a previous crit first. (Or I guess be staggered at all,
maybe their shoelaces were tied or something). Crit probabilities are
determined by adding your Athletics probability skill bonuses to your
unarmed effectiveness, and then reduced by the targets own Athletics
skill bonuses. It is hard for two athletes to knock each other out in
one blow. It is trivial for a legendary boxer to knock out a novice in a
single punch. Cybernetically enhanced boxers are dangerously effective
at boxing.

- Boxers can block other boxers by using throw mode, but the chances of
doing so is based on Athletics skill bonuses. A successful block causes
the attacker to take stamina damage (as does the blocker, but less so).

- Participating in boxing increases the Athletics skill. Your gains are
probably slower than normal training, but you at least get some reward
for doing so. Only relevant if your opponent is a boxer. Get a sparring
partner!

### Evil Boxing (Admin Only)

So this is all well and good, but what if you're a scoundrel with no
care for the other person in this equation? Well, that's where Evil
Boxing comes in. Evil Boxing has absolutely no restrictions at all, and
can freely use its boxing abilities against anyone. Even non-boxers. You
can even grab people! Wow, what a scumbag. I bet you even king hit
people. Thankfully, only an admin can make you into an Evil Boxer.

### Strength and Stimmed Mutations now benefit Exercising and Boxing
(against boxers)

Both mutations have a flimsy increase to instability of 5 because of how
incredibly particular the bonus is.

Strength now reduces the amount of stamina damage inflicted via
exercising by half. Strength also adds a +2 damage bonus on boxing
punches while boxing against boxers (this doesn't influence normal
unarmed attacks whatsoever, or boxing against nonboxers). Obviously,
evil boxers just get this benefit against everyone because they're
knaves.

Stimmed increases the duration of the exercised status effect by one
factor. (That is, if you have no other modifiers, it will double the
duration on its own)

## Why It's Good For The Game

@Jacquerel was racking their brain trying to come up with an alternative
to the skill rewards of Fitness. At the moment, sprite growth is not
only a really bad bonus (it does literally nothing but make you big, and
thus is actually a detriment due to how intrusive sprite size is with
interaction, and plays weird with other sprite changing effects), but
isn't really all that interesting for all the effort put in.

Problem is, how do you make Fitness meaningful without making it a
powergame mechanic? Simple! You make it applicable to a really niche,
self-contained but still utilized game mechanic that is engaging to
participate in and makes you meaningfully very good in it. AND scratches
that power scaling itch that many players have.

Boxing is reasonably self-contained as is, but pretty bland due to how
old it is. While maintaining that self-contained nature, I hoped to
expand the interactivity of boxing a little bit by giving it a small
mini-game in of itself. And also introduce ways to simulate the idea of
boxing a bit better.

The idea of being an Evil Boxer is funny. For every Rocky, there is a
[Insert Rocky Villain Here that isn't Creed]. But in this case, it's
probably some Syndicate douchebag looking to punch clowns into a coma
and inspire the mime to take up shadowboxing in revenge.

## Changelog
🆑
add: Replaces Fitness with Athletics; same skill, but now more
specifically applicable to boxing.
add: Athletics does not increase sprite size.
balance: Overhauls Boxing to add a lot more depth to the interactions.
Only applicable to other boxers, however. You can still punch the snot
out of non-boxers though. But only up to stamcrit or unconsciousness. No
hitting someone who can't fight back!
balance: Adds Evil Boxing, which is the evil and fucked up version of
boxing that you kill people with and are allowed to flout the sacred
rules of boxing as you please. Everyone is a victim!
/🆑
2024-04-22 16:43:58 +01:00
536381d308 Fitness rebalance and improvements - mood, fireman carry, and longer workouts (#79584)
## About The Pull Request
So after getting feedback on fitness I've decided to make some balance
changes:

- ~~Every level of fitness now increases max hp. At max legendary
fitness, all the hp bonuses combined results in a total of +25 max hp~~
- Fitness now decreases the time it takes to firemany carry by 0.33
seconds per level. (At max fitness, this means a decrease of 2 seconds)
- Exercise status effect triggers the exercise mood event and goes away
when the exercise status effect is gone
- The better your fitness level, the more happiness you gain from the
mood event
- Decreased the fitness timers and effects by half and tweaked a few
other values
- Increased the nutrition cost of working out
- Removed doubles metabolism exercise effect

I'd also like this test merged to see if anymore minor tweaks need to be
made.

## Why It's Good For The Game
Fitness effects on gameplay were pretty underwhelming. This was
deliberate since there is a concern about prisoners being able to abuse
it in quite a lot of scenarios. ~~Adding a small boost to max hp is nice
given that the downside is a bigger target.~~

Another problem was that the double metabolism rate resulted in a lot of
the diet effects being metabolised before you could convert them into
exercise gains. So this was removed.

People would also hit their bench max rather quickly and then spend a
long duration sleeping. Ideally I wanted people to spend more time
working out than sleeping, so I halved the duration values so it takes
them longer to achieve maxxing out.

## Changelog
🆑
balance: Fitness level decreases the time it takes to firemany carry
someone. Fitness level determines how much of a positive mood the
workout grants. Working out is now more difficult and requires more
nutrition.
balance: Exercise no longer triggers double metabolism.  
/🆑

---------

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-12-14 02:21:27 +00:00
distributivgesetzandGitHub 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
MGOOOOOOandGitHub 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
GhomandGitHub 573895a302 Traits from blessing of insanity are now applied correctly (#79704)
## About The Pull Request
What it reads on the title. The traits should be applied to the owner
and not the status effect itself.

## Why It's Good For The Game
This will fix #79641.

## Changelog

🆑 san7890, Ghommie
fix: The Blessing of Insanity now grants no damage slowdown and free
hyperspace movement correctly.
/🆑
2023-11-14 13:57:33 -07:00
TimandGitHub af43f39737 Add new fitness skill and mechanics (#78922)
## About The Pull Request

![dreamseeker_9pl5F22vN3](https://github.com/tgstation/tgstation/assets/5195984/95d16788-7160-425f-8c95-07aeddb53e9f)

## New Fitness Skill
- Working out on the weight machines will require less stamina
- The exercised status effect durations are increased by the level
- The more fitness you have, the bigger your mob sprite

## Exercised Status Effect
- Boost your metabolism x2
- The max duration is determined by the fitness skill
- Uses multipliers based on a good diet and ~~steriods~~ medicine to
increase the duration
- Will convert into fitness skill xp while sleeping based on the quality
of sleep

## Weight Training Equipment
- Weight machines now drain stamina and nutrition
- Weight machines now give fitness xp
- Punching bags now drain stamina (wearing boxing gloves lowers it) and
gives a small amount of fitness xp
- Being clumsy has a chance to hurt you, but it can be overcome with
persistence. (the higher your fitness skill, the less chance of getting
injuried)

## Why It's Good For The Game
HUSTLE FOR THAT MUSCLE!!!


![dreamseeker_YFfxcRhaJE](https://github.com/tgstation/tgstation/assets/5195984/4be2c98a-b090-42fe-b3c1-3368bf586c47)

## Changelog
🆑
add: Add new fitness skill and mechanics for weight machines and
punching bags. Working out with a proper diet and good sleep will result
in massive fitness gains. As your fitness increases, so does your mass.
/🆑
2023-10-20 14:06:02 +13:00
BloopandGitHub 68b798efa0 A thorough audit of damage procs and specifically their use in on_mob_life() (with unit tests!) (#78657) 2023-10-03 04:01:32 -04:00
san7890andGitHub 24ee1a4681 Refactors Snakes into Basic Animals (#78612) 2023-09-27 20:55:34 -04:00
JacquerelandGitHub 172f65989e Nuclear Operative Jump Jets (#78088)
## About The Pull Request

This PR gives operative MODsuits access to "jump jets".
This is an activated module (starts pinned) with a 30 second cooldown
which removes your personal gravity for 5 seconds and (if possible)
pushes you upwards by one z level. In combination with your regular
jetpack this allows you to fly over gaps, and (most importantly) out of
pits such as you may inadvertently find yourself wandering into on
Icebox.
I have a few other changes I want to make specifically targetted at the
experience of Icebox station destruction causing people to fall several
z levels and get trapped, but this is the first one.

You have to stand still for 1 second to activate the jump jet. This is
because jetpack movement without gravity is actually usually faster than
an operative will walk, and I don't want them to just toggle it as a
sprint button while running around. If people find other tactical uses
for this though I think that's cool.

This module currently isn't available to crew on the tech web, although
maybe someone could add it later if they wanted to. It's not quite so
useful if you don't _also_ have a jetpack though.
I bumped the available complexity of the suits I attached it to up by
the complexity cost of this module so it's not taking up previously
available space.

## Why It's Good For The Game

It's funny when the whole ops team falls in a hole after an explosion
they caused and gets stuck in there fighting Snow Legions but they
should probably have some method for dealing with that.
It also lets them pop back up from the tram hole, a risky proposition
because any flying mob hit by the tram dies almost instantly.

## Changelog

🆑
add: Operative MODsuits now have an attached "jump jet" which sends you
upwards and allows you to use your jetpack under gravity for a few
seconds, perfect for navigating the pits and valleys of Icebox Station.
/🆑
2023-09-12 18:54:58 +02:00
d93dfbc35c Adds Summon Cheese (#77778)
oh apparently this is my 100th PR on tg, which is weird because github
reports 99 total, and i made at least one to the old voidcrew repo, and
filtering tg prs by my name still shows 99. weird. here's to 100 more i
guess?

<sub>could have been better if it was a get, jhonflupwliiard watch ur
back 🔫 </sub>

## About The Pull Request

Adds a new spell granter book to the Wizard's Den - Summon Cheese, which
grants the spell by the same name, which summons 9 heads of cheese.
That's about it, I think.

## Why It's Good For The Game

Wizards are a hungry bunch, so why can't they just summon food? They can
even share, if they'd like, since the notion of a friendly wizard still
exists

<details>
<summary>... </summary>

alright fine
i'm slightly malding over not getting the 77777 get so no more
roleplaying in the pr body

Wizard Grand Ritual now has a hidden goal of sacrificing 50 cheese
wheels. Sacrificing a cheese wheel is done with invoking the grand rune,
and each invocation/pulse of the rune will whisk away more cheese until
all cheese on the rune is taken by whichever entity lurks in the other
realm. The sacrifice will be hinted at in an _ancient parchment_ which
will be on the bookshelf (when i add it lmao) alongside the spell book.

Meeting this cheese goal will lock the wizard's grand finale rune and
grand finale effect to special ones. The cheese rune is mostly identical
to the normal grand rune, barring the custom sprites/animations.
The cheese finale consists of the wizard getting permanent Levitation
(nogravity + free space movement), a 0.5 modifier(reducing incoming
damage in half) to every damage type, a comically strong mood buff and
**The Wabbajack**(separate sprite pending) - a juiced up chaos staff
which can fire a lot more projectiles than a normal one can (it will get
more, I may even make a few just for it).
Everybody else (including any invader antags) gets hallucinations, 175
brain damage and a comically strong mood debuff, as well as a vendetta
against the wizard. If the victim was already suffering from
hallucinations from a trauma (including the quirk), they are instead
healed.

if you didn't catch the obvious reference, this entire shtick is a
tribute to Sheogorath. the rune makes use of daedric script, and most of
the catchphrases are a direct quotation of the Daedric Prince of
Madness, so if any of those things can get us in trouble somehow, let me
know. i will be sad but i will comply.

This shtick is intended as an easter egg, really, so I wasn't really
planning on expanding the wizard grand finale into heretic paths thing
or whatever.

Oh, and finale grand runes now allow the wizard to select the effect
even if it's time-gated. If it is, you just won't be able to invoke it
until the time comes. The rune will tell you how much time is left until
you can invoke it. And grand finale runes with a finale effect selected
also glow in the color of their effect. I also think I fixed some step
of the grand rune animation not triggering but I'm not sure.

<details><summary>Some rune animations (some are subject to
change)</summary>


![rune_cheese_activate](https://github.com/tgstation/tgstation/assets/75863639/62ae184d-b6fc-4883-a169-4d8ca7636b40)


![rune_cheese_flash_2](https://github.com/tgstation/tgstation/assets/75863639/619545c8-3c55-4264-bfa4-d40067ef7406)


</details> 

## Why It's Great For The Game

it's funny

</details> 

## Changelog


🆑 Sealed101, EBAT_BASUHA for spritework
add: Wizard's Den now has a book of Summon Cheese in the Studies Room
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-08-31 10:31:33 -06:00
MrMelbertandGitHub eea20b83e3 Kills seconds_per_tick from status effect tick, replaces it with seconds_between_ticks to clarify some things (#77219)
## About The Pull Request

https://github.com/tgstation/tgstation/pull/66573#discussion_r861157216

`status_effect/proc/tick(seconds_per_tick)` is wildly misleading and I
feel like I should address it

For a majority of status effects, they process on fast processing but do
not tick every fastprocessing tick

This means that using `seconds_per_tick` here is not giving you the
seconds between status effect ticks, it's giving you seconds between
processing ticks (`0.2`)

This is how it's misleading - If you have a tick interval of `1
SECONDS`, you'd think `seconds_per_tick` is, well, one. But it's
actually one-fifth. So all of your effects are now 80% weaker.

I have replaced the use of `seconds_per_tick` in tick with
`seconds_between_ticks`.

This number is, quite simply, the initial tick interval of the status
effect divided by ten.

An effect with the tick interval of `1 SECONDS` has a
`seconds_between_ticks` of 1.

As a consequence, some things which were inadvertently made weaker, such
as fire and some heretic things (at a glance), are now a little
stronger.

## Why It's Good For The Game

See above. Makes it more clear what you're doing when working with
effects.

## Changelog

🆑 Melbert
code: Updated some status effect tick code to be more clear of how long
is elapsing between ticks. Some effects that were inadvertently weakened
are now stronger as a result (fire and some heretic effects).
/🆑
2023-08-08 11:54:12 +12:00
dfd4801122 Adds p_They (and friends) for capitalized pronoun helpers (#76910)
## About The Pull Request

![image](https://github.com/tgstation/tgstation/assets/66640614/f8afe149-85cf-40d2-a5c1-4c96a3ccdfe4)

Basically replaces p_they(TRUE) with p_They

## Why It's Good For The Game
Fewer ambiguous parameters (what does TRUE mean when passed to p_they?)
More comprehensive helper functions.

## Changelog
🆑 Tattle
spellcheck: Fixed the grammar on a few revenant messages
/🆑

---------

Co-authored-by: tattle <article.disaster@gmail.com>
2023-07-17 22:55:58 -07:00
John WillardandGitHub 32afa856db Makes cult leader handling work off of the Cult datum (#76556)
## About The Pull Request

Removes Cult master's datum, it's not handled by the Cultist itself,
using a helper to promote/demote people to leader.
In practice, the only way someone would be demoted is through Admins, so
this adds support for Admins to intervene in this Cult stuff if
necessary.

Moves cult objectives and cult team to their own files

Removes the cult master's status effect that constantly processes to
send a deathrattle, and instead moves it to a signal hooked to stat
change.

Also moves some things from ``get_antag_minds`` to checking the team,
which doesn't change anything in-game but it does help add the currently
non-functional support for several cult teams. Iunno.


https://github.com/tgstation/tgstation/assets/53777086/573a4f13-35e1-4f34-9952-62fed10b49c9

## Why It's Good For The Game

Having the cult leader be its own datum has actually been handled like
shit. To promote someone to cult leader, we currently make their current
cult datum silent, then remove it, and finally add the cult leader
datum. This means they lose their spells unless manually given back
post-promotion, which sucks (and also, no one has done yet, meaning they
just lose all their spells).
It also means there's a lot more snowflake things, did you know there's
a var to bypass converting mindshielded people? That's so cult masters
can be promoted by Cultists who were mindshielded, and they have to be
"ownable", that var is to bypass the check for mindshield to "convert"
them to leader cultist.

## Changelog

🆑
fix: Cultists promoted to Leader no longer lose their spells (rip
whoever tried saving up blood rites)
admin: Admins can now force promote/demote people from Cult Leader if
necessary.
/🆑
2023-07-07 06:27:31 -04:00
MrMelbertandGitHub 22799fcb89 Refactors the worst list ever, Stun Absorptions, into status effects + makes status flags more accurate (making certain mobs more vulnerable to incapacitations?) (#76000)
## About The Pull Request

- Refactors the stun absorption list into a status effect

- Does a fair bit of cleanup around stun code

Weird thing involved in this.
Check out this define. 
`IS_STUN_IMMUNE(source, ignore_canstun) ((source.status_flags & GODMODE)
|| (!ignore_canstun && (!(source.status_flags & CANKNOCKDOWN) ||
HAS_TRAIT(source, TRAIT_STUNIMMUNE))))`
Notice anything odd about it?
It only checks for `CANKNOCKDOWN`. 
What does this mean?
Well, *every single* one of the stun procs used this macro for checking
stun immunity. Which means every method of stun checked the
`CANKNOCKDOWN`.
This means that, say you have a mob which has `CANSTUN` but not
`CANKNOCKDOWN`.
Intuitively this means that the mob cannot be knocked down, but can be
stunned.
But instead, this means the mob can't be stunned either. 
This doesn't affect humans, they have all the status flags, but it does
affect some other mobs.
Alien adults (not queens) have `CANUNCONSCIOUS|CANPUSH`. Before, they
didn't have `CANKNOCKDOWN`, so they were fully immune to stuns and
sleeps. But now, they can be knocked unconscious.
However, overall it doesn't change much, as most mobs that flipped off
`CANKNOCKDOWN` flipped off the others too.
For consistency though it makes sense for these flags to work as they
imply.

- `incapacitate` didn't have a signal, now it does

## Why It's Good For The Game

More consistent, better code? I may use this in the future.

## Changelog

🆑 Melbert
refactor: Refactored Stun Absorptions (Bastard Sword, His Grace)
refactor: Refactored Stun Immunity. Note this means that some mobs
which, prior, were immune to all forms of incapacitation are now
vulnerable to some. Notably, adult non-queen xenomorphs are now
vulnerable to falling unconscious.
/🆑
2023-06-16 14:44:25 -06:00
orangesandGitHub 4c48966ff8 Renames delta time to be a more obvious name (#74654)
This tracks the seconds per tick of a subsystem, however note that it is
not completely accurate, as subsystems can be delayed, however it's
useful to have this number as a multiplier or ratio, so that if in
future someone changes the subsystem wait time code correctly adjusts
how fast it applies effects

regexes used

git grep --files-with-matches --name-only 'DT_PROB' | xargs -l sed -i
's/DT_PROB/SPT_PROB/g'
git grep --files-with-matches --name-only 'delta_time' | xargs -l sed -i
's/delta_time/seconds_per_tick/g'
2023-04-11 21:31:07 -07:00
MrMelbertandGitHub e80879d22c Ensures some ling ability icon always update correctly, Fixes a potential input stall in Revival Stasis (#73616)
## About The Pull Request

- For Fleshmend, on apply kinda happens before alerts are made, so using
Fleshmend when you're on fire wouldn't make the alert the "you're on
fire" alert.

- For Revival Stasis, I think I just missed an update call? Which made
it not update on occasion.
- I also patched a potential issue with input stalling on Revival Stasis
while here.

## Changelog

🆑 Melbert
fix: Using Fleshmend while on fire gives the "on fire" fleshmend icon. 
fix: Using Revival stasis more accurately updates the icon where
relevant
fix: Fixes a potential input stall with revival stasis
/🆑
2023-03-01 00:05:08 -07:00
lizardqueenlexiandGitHub 9750f93693 Makes arms regrown by the Rod of Asclepius the correct color (#73152)
## About The Pull Request

When an arm holding an activated Rod of Asclepius is cut off, the arm
grows back with the rod held in it. However, due to an oversight, the
arm that grows back is always the "default" color - the albino skintone
for humans/felinids, and grey for everyone else. This PR makes the
regenerated arm have the proper skintone instead.
## Why It's Good For The Game

There's no good reason that a magical doctoring rod should drain all
color from your arm, probably.
## Changelog
🆑
fix: Corrected the skintone on arms grown back by the Rod of Asclepius
/🆑
2023-02-04 12:40:51 +01:00
BloopandGitHub 0d3c71aeb2 Fixes an edge case where you can get incurable plasma damage, & fixes healing sources that don't have biotype restrictions not working if the mob doesn't have the MOB_ORGANIC biotype (#73017)
## About The Pull Request

Fixes #72962

The plasma river applies toxins damage to a mob as it transforms
individual limbs into plasmaman ones.
Once all limbs have been transformed, the mob's species changes to
plasmaman.

This currently leads to incurable toxin damage as antitoxin drugs do not
work on plasmamen. Made it so that upon transforming fully, the toxin
damage is cleared.

Also fixed an issue where healing sources that do not have a
required_biotype parameter (e.g. `adjustToxLoss(-5)` vs
`adjustToxLoss(-5, required biotype=whatever)`) will not work on mobs
that do not have the `MOB_ORGANIC` biotype (e.g. plasmamen) due to it
defaulting to `MOB_ORGANIC`. For now those use the `forced` param to
accomplish this.

## Why It's Good For The Game

Incurable damage is no good.

## Changelog

🆑
fix: fixed getting incurable tox damage when fully transformed into a
plasmaman via plasma rivers
fix: fixed rod of asclepius/medibeam etc not being able to heal tox
damage despite not having biotype restrictions
/🆑
2023-02-01 17:23:46 +01:00
FikouandGitHub 6d1dc8dd26 fixes linters (#71814) 2022-12-07 22:27:45 +00:00
RhialsandGitHub bf1b85ca78 Adds nest sustenance status effect, halves xenomorph nest escape time (#71691)
## About The Pull Request

Hosts who are buckled to a xenomorph nests will gestate their xenomorph
egg 20% faster (4 minutes in a nest, 5 without) as long as they are
trapped. To keep them alive in the nest, they will recieve temperature
stabilization and be healed until they are pulled (or break) free.

To ensure the gift of life is not wasted by captured humans, they can
now break free from resin nests after one minute of struggling, down
from two.
## Why It's Good For The Game

There's currently no incentive to not kill facehugger infectees
immediately after they're impregnated. Dead bodies can't run away,
gestate at the same speed, and hives are often breached from space
making them deadly to live captures regardless. This serves the dual
purpose of incentivizing live captures, while also making them a
feasible option, without removing the ability to infect dead bodies and
seriously impacting the xenomorph playstyle.

Cutting the escape timer in half (while also ensuring that captured
humans are alive enough to break out) means there will be many more
opportunities for live captures to escape. Additionally, the xeno
players will have to spare manpower to actively defend hosts and if they
wish to ensure they do not escape. Hopefully it should give more reason
to play defensively and set up a proper hive, instead of the
hypermobile-hyperviolent playstyle you sometimes encounter.
## Changelog
🆑 Rhials
balance: Xenomorph nests will now sustain humans that are buckled to
them, and gestate xenomorph eggs slightly faster.
balance: Xenomorph nests evolved healing capabilities in exchange for
some of their grip. They now take only one minute to escape from.
/🆑
2022-12-06 21:19:37 -08:00
MrMelbertandGitHub 79ffefa06d Allows Fully Heal to be passed a series of flags, fixes Adminordrazine being horrible (#71123)
## About The Pull Request

- Fully heal can be passed a series of flags detailing what all is
healed by the proc. This allows for things to provide
almost-but-not-quite fully heals.
- Uses this in Adminordrazine, so that it stops being a pain to update
every time fully heal is updated.

This includes some small balance changes which i'll go over, nothing
extremely noticable.

## Why It's Good For The Game

Allows for more precise control over full heals. 

## Changelog

🆑 Melbert
refactor: Fully heal can be passed a series of flags. As a result, some
things which previously did a full heal might heal slightly less, or
some things which did partial full heals might do slightly more.
fix: Adminordrazine will no longer completely break every facet of a
person
admin: Ahealing a changeling will refill all of their chems.
/🆑
2022-11-17 10:09:00 -08:00
ad5debaaa1 Add investigate_deaths (#71112)
## About The Pull Request
Adds INVESTIGATE_DEATHS, an investigate category intended to better show
causes of death.


![image](https://user-images.githubusercontent.com/66640614/200142461-c17b5e51-1116-4eef-bbfb-49bc024c0953.png)


![image](https://user-images.githubusercontent.com/66640614/200147306-09bef76e-68c6-4f0a-bdf9-0211eb274e66.png)

Also makes suicide_act take a `mob/living` as an argument instead of a
`mob`, and some minor style improvements since apparently I hate
atomicity.

## Why It's Good For The Game
Inspired by a mysterious death and dusting. More logging and leads for
admins investigating deaths.

Also fixes #59028

## Changelog
🆑 Tattle
admin: added investigate deaths to shed some more light on unusual
demises, dustings, and gibbings
/🆑

Co-authored-by: tattle <article.disaster@gmail.com>
2022-11-07 16:22:37 -08:00
51b289d4c8 Change drop_all_held_items to work with cyborgs (#70682)
* Cyborgs now use the same drop_all_held_items that humans do instead of their own snowflake code.
* Fixes Cyborgs not dropping all their modules at the same time,

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2022-10-26 05:53:02 -04:00
MrMelbertandGitHub c8bd98098b Fixes minor fleshmend runtime from clearing scars (#70700)
All scars is a lazylist.
2022-10-22 16:07:02 -04:00
dafbcf29bd Prosthetic surgery now checks if you can attach the bodypart (#70157)
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2022-09-27 22:30:24 -07:00
tralezabandGitHub 1810b85553 Heretics cannot be converted, and are immune to cult stun hands. Instead, the cult is rewarded for sacrificing them with the bloody bastard sword, an oversized SPIN2WIN funblade. + Soul Stealing Fantasy Affix (#69725)
About The Pull Request

Heretics can no longer be converted to a cult, as they follow their own Forgotten Gods.
Instead, Nar'Sie will reward the cult for managing to sacrifice one, with the bastard sword.
The bloody bastard sword has been cleaned up codewise and all that. Because it is a free reward instead of a (removed) progression mechanic of cult, it swings just a bit slower during the spin and doesn't have a jaunt. It's still a !fun! swinging sword of hilarity and death.
BLOODY BASTARD https://www.youtube.com/watch?v=ukznXQ3MgN0
Fantasy weapons can now roll "soul-stealing" weapons. They, on killing something, capture its soul inside the item.

    Add fail conditions that instantly end a spin2win, ala how 

    Mimes can now hold a baguette like a sword by right clicking it #69592 works

Why It's Good For The Game

Bloody bastard sword was fun, it made no sense that heretics were valid converts when they're already worshipping a DIFFERENT evil god granting them powers. Should be in a good spot as a nice little antag to antag special interaction. I fucking love antag to antag special interactions, we should have more of 'em

Fantasy affixes are always a neat thing to throw a new component into
Changelog

cl
add: Heretics can no longer be converted to cult. But sacrificing them is very valuable to Nar'Sie, and she will grant special weapons if you manage to do so.
add: Fantasy affixes can also include soul-stealing items!
/cl
2022-09-28 10:24:04 +13:00