Commit Graph
89 Commits
Author SHA1 Message Date
shayoki f601a6ddaf Merge remote-tracking branch 'tgstation/master' into upstream-6-2-2026 2026-06-03 01:23:54 -05:00
BloopandGitHub e85ebd7fdb Stops internal organs from triggering updates in prefs (#96203) 2026-05-25 20:57:38 -04:00
+37 21b4095dfd [MDB IGNORE] [IDB IGNORE] Upstream Sync - 04/17/2026 (#5453)
Upstream 04/17/2026

fixes https://github.com/Bubberstation/Bubberstation/issues/5549

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
Co-authored-by: rageguy505 <54517726+rageguy505@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Aliceee2ch <160794176+Aliceee2ch@users.noreply.github.com>
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Co-authored-by: Tsar-Salat <62388554+Tsar-Salat@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: Maxipat <108554989+Maxipat112@users.noreply.github.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: deltanedas <39013340+deltanedas@users.noreply.github.com>
Co-authored-by: SimplyLogan <47579821+loganuk@users.noreply.github.com>
Co-authored-by: loganuk <fakeemail123@aol.com>
Co-authored-by: Leland Kemble <70413276+lelandkemble@users.noreply.github.com>
Co-authored-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com>
Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
Co-authored-by: Lucy <lucy@absolucy.moe>
Co-authored-by: siliconOpossum <138069572+siliconOpossum@users.noreply.github.com>
Co-authored-by: Isratosh <Isratosh@hotmail.com>
Co-authored-by: TheRyeGuyWhoWillNowDie <70169560+TheRyeGuyWhoWillNowDie@users.noreply.github.com>
Co-authored-by: Neocloudy <88008002+Neocloudy@users.noreply.github.com>
Co-authored-by: Alexander V. <volas@ya.ru>
Co-authored-by: ElGitificador <168473461+ElGitificador@users.noreply.github.com>
Co-authored-by: Twaticus <46540570+Twaticus@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
Co-authored-by: Tim <timothymtorres@gmail.com>
Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
Co-authored-by: Layzu666 <121319428+Layzu666@users.noreply.github.com>
Co-authored-by: Arturlang <24881678+Arturlang@users.noreply.github.com>
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: mrmanlikesbt <99309552+mrmanlikesbt@users.noreply.github.com>
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: John F. Kennedy <54908920+MacaroniCritter@users.noreply.github.com>
Co-authored-by: Cursor <102828457+theselfish@users.noreply.github.com>
Co-authored-by: Josh <josh.adam.powell@gmail.com>
Co-authored-by: Josh Powell <josh.powell@softwire.com>
Co-authored-by: Yobrocharlie <Charliemiller5617@gmail.com>
Co-authored-by: Hardly3D <66234359+Hardly3D@users.noreply.github.com>
Co-authored-by: shayoki <96078776+shayoki@users.noreply.github.com>
Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
2026-05-16 00:56:00 +02:00
FinancialGooseandGitHub e98cb75c57 Refactor gasmix mole change into a proc (#95327)
## About The Pull Request
Refactor the majority of the current gasmix mole change use cases into a
proc called adjust_gas which simply adds the designated mole count of
the species into the gas mix while also handling asserting the gas and
garbage_collect()
I also added adjust_multiple_gases and convert_gas() for modifying
multiple gases and within a gasmix

## Why It's Good For The Game
Lemon wanted this to be done as part of the air group refactor 

## Changelog

🆑
refactor: refactored majority of gas_mix mole change into adjust_gas()
proc
/🆑
2026-04-21 13:43:47 -07:00
MrMelbertandGitHub 599375828e Moves lung scanning code out of healthscan (#95509) 2026-03-26 19:46:30 +01:00
nevimer 00ccf0c6b5 Merge remote-tracking branch 'tgstation/master' into upstream-feb12-2026
# Conflicts:
#	.github/CODEOWNERS
#	.github/workflows/compile_changelogs.yml
#	.github/workflows/stale.yml
#	SQL/database_changelog.md
#	_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm
#	code/__DEFINES/atom_hud.dm
#	code/__DEFINES/inventory.dm
#	code/__DEFINES/mobs.dm
#	code/__DEFINES/species_clothing_paths.dm
#	code/__DEFINES/subsystems.dm
#	code/__DEFINES/surgery.dm
#	code/__HELPERS/global_lists.dm
#	code/_globalvars/lists/maintenance_loot.dm
#	code/_globalvars/traits/_traits.dm
#	code/controllers/subsystem/minor_mapping.dm
#	code/controllers/subsystem/processing/quirks.dm
#	code/controllers/subsystem/shuttle.dm
#	code/datums/components/palette.dm
#	code/datums/components/surgery_initiator.dm
#	code/datums/diseases/advance/advance.dm
#	code/datums/hud.dm
#	code/datums/mood.dm
#	code/datums/mutations/chameleon.dm
#	code/datums/quirks/negative_quirks/nyctophobia.dm
#	code/datums/status_effects/debuffs/debuffs.dm
#	code/datums/status_effects/debuffs/drunk.dm
#	code/datums/status_effects/debuffs/slime/slime_leech.dm
#	code/datums/weather/weather.dm
#	code/game/data_huds.dm
#	code/game/objects/items.dm
#	code/game/objects/items/devices/scanners/health_analyzer.dm
#	code/game/objects/items/frog_statue.dm
#	code/game/objects/items/rcd/RLD.dm
#	code/game/objects/items/robot/items/hypo.dm
#	code/game/objects/items/stacks/medical.dm
#	code/game/objects/items/stacks/wrap.dm
#	code/game/objects/items/storage/garment.dm
#	code/game/objects/items/tools/medical/defib.dm
#	code/game/objects/items/weaponry.dm
#	code/game/objects/items/weaponry/melee/misc.dm
#	code/game/objects/structures/crates_lockers/closets/secure/security.dm
#	code/game/objects/structures/curtains.dm
#	code/game/objects/structures/dresser.dm
#	code/game/objects/structures/girders.dm
#	code/game/objects/structures/maintenance.dm
#	code/game/objects/structures/mirror.dm
#	code/modules/admin/greyscale_modify_menu.dm
#	code/modules/admin/verbs/light_debug.dm
#	code/modules/antagonists/ashwalker/ashwalker.dm
#	code/modules/antagonists/heretic/knowledge/starting_lore.dm
#	code/modules/antagonists/ninja/ninjaDrainAct.dm
#	code/modules/art/paintings.dm
#	code/modules/client/preferences.dm
#	code/modules/client/verbs/ooc.dm
#	code/modules/clothing/head/wig.dm
#	code/modules/events/disease_outbreak.dm
#	code/modules/holodeck/holo_effect.dm
#	code/modules/jobs/job_types/head_of_security.dm
#	code/modules/jobs/job_types/security_officer.dm
#	code/modules/library/skill_learning/generic_skillchips/point.dm
#	code/modules/mining/lavaland/ash_flora.dm
#	code/modules/mining/lavaland/mining_loot/megafauna/ash_drake.dm
#	code/modules/mob/dead/new_player/new_player.dm
#	code/modules/mob/living/basic/guardian/guardian.dm
#	code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm
#	code/modules/mob/living/carbon/carbon.dm
#	code/modules/mob/living/carbon/human/human.dm
#	code/modules/mob/living/carbon/human/human_defines.dm
#	code/modules/mob/living/carbon/life.dm
#	code/modules/mob/living/living.dm
#	code/modules/mob/living/living_defines.dm
#	code/modules/mob/mob.dm
#	code/modules/mob_spawn/ghost_roles/mining_roles.dm
#	code/modules/mod/mod_control.dm
#	code/modules/mod/modules/modules_general.dm
#	code/modules/modular_computers/computers/item/computer_ui.dm
#	code/modules/paperwork/paper.dm
#	code/modules/paperwork/paperbin.dm
#	code/modules/power/lighting/light.dm
#	code/modules/projectiles/guns/energy/kinetic_accelerator.dm
#	code/modules/projectiles/projectile.dm
#	code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm
#	code/modules/reagents/chemistry/reagents/food_reagents.dm
#	code/modules/reagents/chemistry/reagents/other_reagents.dm
#	code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
#	code/modules/research/xenobiology/crossbreeding/_clothing.dm
#	code/modules/research/xenobiology/crossbreeding/prismatic.dm
#	code/modules/surgery/advanced/brainwashing.dm
#	code/modules/surgery/advanced/lobotomy.dm
#	code/modules/surgery/amputation.dm
#	code/modules/surgery/blood_filter.dm
#	code/modules/surgery/bodyparts/_bodyparts.dm
#	code/modules/surgery/brain_surgery.dm
#	code/modules/surgery/cavity_implant.dm
#	code/modules/surgery/coronary_bypass.dm
#	code/modules/surgery/gastrectomy.dm
#	code/modules/surgery/healing.dm
#	code/modules/surgery/limb_augmentation.dm
#	code/modules/surgery/organ_manipulation.dm
#	code/modules/surgery/revival.dm
#	code/modules/surgery/sleeper_protocol.dm
#	code/modules/surgery/surgery_helpers.dm
#	code/modules/surgery/surgery_step.dm
#	code/modules/unit_tests/_unit_tests.dm
#	code/modules/unit_tests/designs.dm
#	code/modules/unit_tests/icon_state_worn.dm
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_cultist.png
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_headrevolutionary.png
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_provocateur.png
#	code/modules/unit_tests/screenshots/screenshot_husk_body.png
#	code/modules/unit_tests/screenshots/screenshot_husk_body_missing_limbs.png
#	icons/map_icons/clothing/head/_head.dmi
#	icons/map_icons/clothing/shoes.dmi
#	icons/map_icons/items/_item.dmi
#	icons/mob/huds/hud.dmi
#	icons/mob/inhands/64x64_lefthand.dmi
#	icons/mob/inhands/64x64_righthand.dmi
#	icons/obj/machines/computer.dmi
#	tgui/packages/tgui/interfaces/OperatingComputer.jsx
#	tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/MainPage.tsx
#	tgui/packages/tgui/interfaces/PreferencesMenu/types.ts
#	tgui/packages/tgui/interfaces/SurgeryInitiator.tsx
#	tools/icon_cutter/check.py
2026-02-12 23:50:09 -05:00
san7890andGitHub 265ceb3eb2 Fixes Flakey Ashwalker Lung Unit Test Failures on gateway_test (#94821)
## About The Pull Request

Closes #94794

Both of these unit tests were using the outdated way of changing the gas
mix on a turf, probably because they were more than a few years old
apiece. The modern way is using the `/datum/gas_mixture` and
`parse_gas_string()` to either retrieve the gas mix from cache or
generate it on-demand. Neither of these tests were doing that, and they
worked well enough until they got mutated in #94771
(01c7ef7de1).

I am uncertain of the specifics that are behind either one
spontaneously/always failing but I do know that they weren't doing it
the "right way". I suspect the flakiness in the Breath Ashwalker Sanity
(that loads a full ashwalker carbon instead of just the lungs) is
because it was initiating a gas mix with no volume within it, and that
volume would get filled up as the other turfs in the loc would update it
somewhere in the atmos chain? We only checked for the "low oxygen"
status effect on the mob and that could easily have been filled up to
normal depending on how much happened. Regardless the best way to fix
this is to just have all the turfs in the unit test room get changed to
prevent any schenanigans with that.

Another explanation for the flakiness is that the ashwalker lungs
themselves use the same "old" way of getting the gas mix instead of the
modern way (such that the lung breath values can adapt to changes)... I
think...
## Why It's Good For The Game

Less developer frustration at spontaneously failing unit tests through
no fault of their own.
## Changelog
Irrelevant
2026-01-11 15:02:01 -05:00
SyncIt21andGitHub 7c5ef1cfb8 Removes unused parameter times_fired from mob procs (#94590)
## About The Pull Request
What it says on the tin. `times_fired` is the most unused parameter in
all mob procs. I say most because there were just 2 cases where it was
used
- handling breathing
- handling heartbeat

Besides these 2 cases this parameter did nothing in every proc. Removing
it does 2 things
- Makes those procs more readable as it now has 1 less parameter that
was documented poorly and did nothing
- Makes those procs slightly faster as we are passing 1 less variable to
its parameter call stack

It can easily be substituted with `SSmobs.times_fired` which was its
original value anyways

## Changelog
🆑
code: removes an unused parameter `times_fired` from mob life procs.
Making them function slightly faster
/🆑
2025-12-26 09:51:33 -05:00
nevimer 6e9f2ccfc0 Merge remote-tracking branch 'tgstation/master' into upstream-12-15
# Conflicts:
#	.github/workflows/compile_all_maps.yml
#	.github/workflows/run_integration_tests.yml
#	_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm
#	code/_onclick/hud/credits.dm
#	code/controllers/subsystem/networks/id_access.dm
#	code/datums/diseases/advance/advance.dm
#	code/datums/diseases/advance/symptoms/heal.dm
#	code/game/machinery/doors/door.dm
#	code/game/objects/structures/crates_lockers/closets/secure/medical.dm
#	code/game/objects/structures/crates_lockers/closets/secure/security.dm
#	code/modules/antagonists/malf_ai/malf_ai_modules.dm
#	code/modules/jobs/job_types/_job.dm
#	code/modules/loadout/categories/accessories.dm
#	code/modules/loadout/loadout_helpers.dm
#	code/modules/loadout/loadout_items.dm
#	code/modules/loadout/loadout_preference.dm
#	code/modules/mob/living/silicon/robot/robot_defense.dm
#	code/modules/mod/mod_theme.dm
#	code/modules/projectiles/ammunition/energy/laser.dm
#	code/modules/reagents/reagent_containers/cups/drinks.dm
#	code/modules/shuttle/mobile_port/variants/supply.dm
#	code/modules/surgery/organs/internal/eyes/_eyes.dm
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_heretic.png
#	icons/hud/screen_full.dmi
2025-12-15 18:12:29 -05:00
levels0andGitHub 6dba5aa316 Make evolved lungs resistant to co2 (#94368) 2025-12-09 09:05:22 +00:00
nevimer baf3837ae8 Merge remote-tracking branch 'tgstation/master' into upstream-2025-11-29
# Conflicts:
#	_maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm
#	_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm
#	_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm
#	_maps/map_files/tramstation/tramstation.dmm
#	code/_onclick/hud/new_player.dm
#	code/datums/components/squashable.dm
#	code/datums/diseases/advance/symptoms/heal.dm
#	code/datums/diseases/chronic_illness.dm
#	code/datums/status_effects/buffs.dm
#	code/datums/status_effects/debuffs/drunk.dm
#	code/datums/status_effects/debuffs/stamcrit.dm
#	code/game/machinery/computer/crew.dm
#	code/game/objects/items/devices/scanners/health_analyzer.dm
#	code/game/objects/items/wall_mounted.dm
#	code/game/turfs/closed/indestructible.dm
#	code/modules/admin/view_variables/filterrific.dm
#	code/modules/antagonists/heretic/influences.dm
#	code/modules/cargo/orderconsole.dm
#	code/modules/client/preferences.dm
#	code/modules/events/space_vines/vine_mutations.dm
#	code/modules/mob/dead/new_player/new_player.dm
#	code/modules/mob/living/carbon/human/death.dm
#	code/modules/mob/living/carbon/human/species_types/jellypeople.dm
#	code/modules/mob/living/damage_procs.dm
#	code/modules/mob/living/living.dm
#	code/modules/mob_spawn/ghost_roles/mining_roles.dm
#	code/modules/mob_spawn/mob_spawn.dm
#	code/modules/projectiles/ammunition/energy/laser.dm
#	code/modules/projectiles/guns/ballistic/launchers.dm
#	code/modules/projectiles/guns/energy/laser.dm
#	code/modules/reagents/chemistry/machinery/chem_dispenser.dm
#	code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm
#	code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm
#	code/modules/reagents/chemistry/reagents/medicine_reagents.dm
#	code/modules/surgery/healing.dm
#	code/modules/unit_tests/designs.dm
#	icons/mob/inhands/items_lefthand.dmi
#	icons/mob/inhands/items_righthand.dmi
#	tgui/packages/tgui/interfaces/ChemDispenser.tsx
2025-11-29 22:49:21 -05:00
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 c7cb0674cc Preliminary blood refactor (#93854)
## About The Pull Request

Moves all blood handling into procs and adds ways to easily hook into
basically every basic blood behavior.

This PR is not meant to fix every single case of janky blood logic in
the game. The main point and motivation of this PR is to add hooks for
blood behaviors. This allows for way more flexibility with blood code.

I am not going to fix our 3000 instances of single-letter vars, wacky
blood transfers, etc. This is just the groundwork for future PRs to
build off of, and by itself, should do very little to change blood
behavior.

I also added a rigorous set of unit tests for verifying that all of the
basic blood volume procs work correctly.

## Why It's Good For The Game

Previously, blood was handled via directly reading/writing
[var/blood_volume]. This was INCREDIBLY inconsistent and there was no
way to hook into it. This PR makes blood handling way more consistent,
which is great for all sorts of features.
2025-11-13 11:45:36 -06:00
Roxy d14e538393 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-15-10-2025 2025-10-15 19:34:41 -04:00
EnterTheJakeandGitHub a2c7c8e57b Heretic Antagonist Full Overhaul. (#92119)
## About The Pull Request

Heretic has received a complete overhaul. This PR touches nearly every
aspect of the antagonist. For readability's sake, not every change is
going to be listed in this pull request.

For the full list of changes please refer to the design doc:
https://hackmd.io/@BiST8PJVRjiwVPY86U3bLQ/B11HyChz1g.

Code by Me, @Xander3359 and @Arturlang 

TGUI by @Arturlang 

Sprites by OrcaCora and GregorDM

Writing bits by @necromanceranne 

### Core changes

- Cross-pathing has been removed. Main knowledge spells are now
exclusive to their path (for the most part).

- For every main knowledge unlocked (save for the robes and the blade
upgrade), Heretics can choose one option from a draft of 3 random side
knowledges (this is a free point).

- Heretics can now purchase side knowledges from a new tab, the
"Knowledge Shop". Side-knowledges have been divided by tier (Stealth,
Defense, Summons, Combat and Main). Tiers are unlocked as you progress
toward your main path.

- Heretics now gain the grasp and mark upgrade immediately, but their
main knowledge choices cost twice as much (except for the first spell,
the robes and the blade upgrade).

- Path specific robes have been introduced! They come with their own set
of quirks.

- Each Path has received a passive ability. This passive is upgraded
when you first create your robes, and again when you complete the Ritual
of Knowledge.

- Paths have been rebalanced as a result of the removal of cross-path
progression. Cosmic and Moon paths have received soft reworks.

- Upon unlocking the path 2nd level or reaching a total of 8 points
worth of knowledge, Heretics will lose the ability to blade break (and
the limit on blades all together).

- Ascension now automatically calls the shuttle with no possibility of a
recall.

- Late join Heretic has been removed.

### New UI 
<img width="750" height="635" alt="moon path ui"
src="https://github.com/user-attachments/assets/184ef783-5c9c-48a1-a2f7-4807ca93e990"
/>


### Knowledge shop

<img width="787" height="669" alt="Knowledge shop"
src="https://github.com/user-attachments/assets/3dc89b84-8c70-4d47-b612-54396e3ea6e7"
/>




### Quality of life //General balance changes

- Heretics will now gain X-ray vision for a few seconds when nearby an
eldritch essence (this effect has a cooldown).

- Ritual of knowledge now requires 1 uncommon item instead of 2. You may
now use a stunprod instead of a baton to complete the ritual. Beartraps
have been removed from the list of possible reagents.

- The maximum number of possible sacrifices required to ascend has been
reduced from 6 to 5 while the minimum has been upped to 4.

- Codex Cicatrix no longer requires a special pen to be made.

### Passive abilities

- Heretics now start with a passive ability. You can find what it does
on the path info tab after a path has been selected, and what they gain
when upgraded.

- Crafting your first set of Eldritch robes will bump your passive to
level 2.

- Unlocking the 2nd level will subsequently unlock your "Ritual Of
Knowledge"

- Completing the ritual of knowledge or ascending will net you the final
level.

### Path Specific Robes

- Armorer's Ritual is no longer a side knowledge. Each path will have
their own unique version of the ritual. This is placed after the 2nd
spell in the tree.

- Robes can no longer be destroyed by fire and acid, grant t4 flash
protection (Moth Heretics stay winning) and protection against basic
syringes, to bring them on par with other antagonist's armor sets.

- The recipe to craft the robes is now a set of armor/vest, a mask (any
mask will do now, not just gas masks), plus the unique reagent required
for the blades (Plasma for Cosmic, Trash For Rust, match for Ash and so
on)

- Wearing the robes as a non-heretic may yield some unfortunate
side-effects.

### Moon Path Rework

Moon path  rework.

Moon Heretics gain immunity to brain traumas and slowly regenerate brain
health. Equipping the moon amulette channels its effects through the
moon blade; making it unblockable and cause sanity damage instead of
brute. Ring leader's Rise now summons an army of harmless clones that
explode when attacked; the explosion briefly stuns non-heretics and
cause sanity and brain damage to them. Moon blade can also now be used
when pacified and Moon spells are no longer blocked by regular anti
magic, only mind magic protection.


**Cosmic Path Rework**

Cosmic path has received the biggest batch of changes alongside Moon.
The path has been dead last in ascension and pickrate (less than 5%) for
almost 2 years. It did gain some popularity over the last few months,
reaching the highest ascension rate in the game (12%) while mantaining a
relatively low pickrate.

Cosmic sits in a weird spot, where pretty much every knowledge
surrounding the path is either mediocre or, in the case of the
ascension, dysfunctional. Yet it has maintained a smidge of relevancy
due to how quickly Cosmic heretics can capture and sacrifice targets
thanks to Star Touch.

As a result, the best course of action would be to rebalance the
entirety of the kit; granting the heretic more tools to manipulate space
and dictate the flow of a fight, while lessening their ability to end a
confrontation by instantly sleeping their opponents.

lastly The Star Gazer is now ghost controlled ; And they shoot lazers!

<img width="636" height="451" alt="gazer gag 3"
src="https://github.com/user-attachments/assets/601d6881-c042-4e42-8ce6-ac90cd27848b"
/>


## Why It's Good For The Game


### Ok...but why do we want this?

Again, if you want my full reasoning, please check my doc
https://hackmd.io/@BiST8PJVRjiwVPY86U3bLQ/B11HyChz1g.

To keep it short and concise; Heretic is too complex and unintuitive for
its own good. Too impenetrable for new players and too abusable for
experienced players. This can be chalked up to a lot of poor design
decisions. But ultimately, what I believe being the biggest contributor
to the current status of Heretic is the ability to move into different
paths, also known as "Cross-Pathing".

### Cross Pathing my beloathed.

Cross-pathing, while cool in theory, overcomplicates the antagonist and
overloads them with power. Players dealing with the heretic are
incapable of working out what a given heretic can do. This also leads to
late game heretics having 3 rows Worth of action buttons and virtually
no weakness.

Over the last year, I've often received the understandable but also kind
of unfair accusations of making Heretic too powerful without a clear aim
or purpose.

My goal with the paths I've reworked over the last year (Rust,Void and
Blade) wasn't necessarily to just make them stronger (although that was
also part of the goal, as they were paths that were underperforming),
but for them to have more interactions with the sandbox and to better
live up to the fantasy presented to the player.

If an harbringer of frost gets countered by a cup of coffee, we probably
messed something up.


Unfortunately, the current incarnation of Heretic doesn't really allow
for surgical balance changes to specific paths. Every time a knowledge
gets buffed, we make every path that can easily tap onto that knowledge
stronger by default. It doesn't take a genius to understand why this
system is ultimately unsustainable.

### Blade Breaking

I feel that after a heretic has reached the near peak of their power,
they no longer need the ability to instantly escape any encounter. Check
my doc for my full reasoning.

## Less versatile, more specialized paths.

By removing cross-pathing, we remove a huge maintainability burden from
the antagonist. Paths can now be designed around clearer strengths and
weaknesses. They become easier to balance and less of an headache to
understand for everyone.

It also means we can give paths some needed quality of life quirks
without having to worry how such a change might have a knock-on effect
for other paths.

Ash heretics can finally let loose without dying by their own flames.
Cosmic Heretic can go to space without having to carry a modsuit. Moon
Heretic can use their abilities without fear of one random trauma
ruining their day, and so on.

### What a horrible night to have a curse...., wait how do I curse
people again?

As of right now the heretic tree has quite a hefty amount of trinkets
that pretty much never see use.

Partly because the tree itself is a nightmare to navigate. And partly
because why would anyone set up an elaborate plan or scheme when they
can unleash 2 rows of spell in the span of bunch of seconds.

Heretics mostly gravitate towards powers that push them towards greater,
more potent combat strength. If it doesn't contribute to killing people
quicker, it isn't worth doing for most. And given the opportunity cost
associated for taking those powers, they will remain that way so long as
there are better choices to be poached.

The new draft system encourages Heretics to play more with the tools at
their disposal. If you want to go for a specific combo from the side
path options, you may now do so by tapping into the knowledge shop.

Yes, the shop does include a few knowledges from the other paths. But
these are limited to 1 per path, are very expensive and can only be
unlocked very late into the shift.

## Drip Of the Mansus

The iconic heretic robe is actually sequestered to a side path that is
most easily access by only two paths at a time. Since heretic paths are
being made to be much more specialized, the most obvious way in which
this can be showcased is through an easily
identifiable outfit.

By using the robes, we can both telegraph WHAT heretic you are looking
at, and just how much power they've accumulated and when it is
reasonable to take the kid gloves off and treat them as a genuine
threat. If a heretic is in their
robes, that heretic is now a significantly more prominent danger to the
station.

It also serves as a useful means for gating some of the more powerful
effects of a heretic's path behind the robes, AND enable options for
disarming them of that power should they be captured without making it
something endemic to their mob.

A major problem with heretics is a lack of certainty as to how powerful
they have become. A heretics robes is one of the milestones to help
players dealing with heretics identify that.

### Will this be 100% fair and balanced?

This is a massive overhaul to a pretty complex and bloated antagonist.
I've done my best to show the changes to several maintainers and other
members of the community for their feedback. But at some point we'll
have to see how this behave in the environment to get a feel if
something is over or undertuned. (that's my way of saying, yes this is
likely gonna require a testmerge or two).

What I will say is that I'm not trying to change the core identity of
Heretic.

Heretics should have the upperhand in single encounters early on, be
able to joust a small group of players after they unlock their final
spell, and end the round when they ascend. They're a progression
antagonist. They should retain their payoff as well as pose a danger as
they grow stronger.

But if more players feel like they are more reliably able to play the
antagonist in more varied and interesting ways, rather than the
antagonist largely existing as a measuring stick for 'robustness' due to
its elitist design philosophy, then the rework has been a success. There
should be something for
everyone in the antagonist, as is true for all of our antagonist roles.
2025-10-15 22:34:51 +00:00
nikothedudeandnevimer ee99d0e5b0 Asthma quirk, inhalers - Electric Boogaloo (#92747)
## About The Pull Request

Revival of https://github.com/tgstation/tgstation/pull/79691

A while back, I made this PR, but lost motivation after diving too deep
into the code soup of can_breathe and related procs. Now, I have removed
those parts, and have simplified that part of the code to the point I
think it's ready for review.

Many reviews from the previous PR have been addressed in this PR.

<hr>

<details>
  <summary>Details</summary>

Asthma is a 4 point negative quirk that emulates real life asthma. It
works by slowly decreasing the amount of pressure each breath you take
receives, until your lungs completely seal, ensuring death if you dont
get oxyloss meds/windpipe surgery.

Inflammation (the tracker for intensity) increases whenever you breathe
smoke, use a cigarette, metabolize histimine, or suffer an asthma
attack.

Asthma attacks have a low chance of happening every second, starting 10
minutes after you spawn and with a 20-30 grace period between attacks.
They are "diseases" that cant be outright cured by albuterol, only put
into remission. They increase inflammation at varying rates depending on
their severity, with extreme asthma attacks being a immediate threat to
your life while mild ones might not even cause inflammation. The
response to these is always the same - use your inhaler before you start
choking.

Asthmatics start with a rescue inhaler, a low-capacity inhaler loaded
with albuterol, which I will get to later.

Albuterol is a new medicine thats a little tricky to make but still
doable. It can be efficiently created with inverse convermol, or
transmutated from salbutamol and convermol. The opposite is true, with
albuterol able to be turned into salbutamol. Two canisters are available
in chemvends.

Upon use, it increases the virtual pressure of all breaths taken by 40%.
This allows for you to breathe in lower pressure environments, as well
as enhancing the effects of things like healium.

It's OD causes your diaphram to spasm, causing sporadic losebreath and
forced breathing.

Inhalers are a fancy new reagent application apparatus that uses the
INHALE reagent bitflag.

Inhalers themselves are rather unremarkable, they are merely the method
of using inhaler canisters (they also have a rotary display
approximating the uses left in a canister - just like real life
inhalers).

Inhaler canisters are the reagent containers, and are generally low
capacity. They can only be used in a inhaler, and contain aerosolized
chemicals.

Inhaler canisters and inhalers are unlocked from chemical synthesis, and
are printable for cheap from a medlathe.

In order to use a inhaler, one must uncover the mouth of a carbon and
wait a few seconds (its faster if its a self-application) before a small
amount of the reagents are delivered via the INHALE bitflag. This only
works on things currently breathing - if theyre dead, have no lungs, or
just, arent breathing - it will fail. This includes asthmatics with 100%
inflammation.

</details>

<img width="181" height="74"
alt="282863233-77a7cd6b-44d2-458e-9966-06d485df1521"
src="https://github.com/user-attachments/assets/293b6659-0834-4e9a-b033-cc3b0cfde18e"
/>

<img width="1465" height="202"
alt="282863346-2a247736-0c3a-43b0-a60b-7cff10ce4963"
src="https://github.com/user-attachments/assets/5d9a13dc-b7b2-4de2-adda-8fbc8276e667"
/>

Sprites are not mine; they are from swanni and I can NOT sprite for the
life of me
## Why It's Good For The Game

1. Asthma is just cool. One of my favorite features on bay was the fact
lung damage required you to turn up the pressure on your O2 tank to
survive, and this does precisely that.
2. Its always fun to add new ways to interact with atmos as a player
that arent grossly broken, and I fail to see how a 40% increase of gas
intake will really affect balance too badly.
3. Inhalers are badass.
## Changelog
🆑
add: Asthma quirk, based on IRL asthma
add: Inhalers, a new reagent administering method that uses INHALE
add: Albuterol, a new reagent that increases the amount of gas you
inhale by 40%
balance: Inverse convermol now forms once the reaction is done, not on
metabolize
/🆑

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
# Conflicts:
#	code/datums/quirks/negative_quirks/allergic.dm
#	code/game/objects/items/devices/scanners/health_analyzer.dm
2025-09-09 23:24:54 -04:00
fadbf16e1b Asthma quirk, inhalers - Electric Boogaloo (#92747)
## About The Pull Request

Revival of https://github.com/tgstation/tgstation/pull/79691

A while back, I made this PR, but lost motivation after diving too deep
into the code soup of can_breathe and related procs. Now, I have removed
those parts, and have simplified that part of the code to the point I
think it's ready for review.

Many reviews from the previous PR have been addressed in this PR.

<hr>

<details>
  <summary>Details</summary>
  
Asthma is a 4 point negative quirk that emulates real life asthma. It
works by slowly decreasing the amount of pressure each breath you take
receives, until your lungs completely seal, ensuring death if you dont
get oxyloss meds/windpipe surgery.

Inflammation (the tracker for intensity) increases whenever you breathe
smoke, use a cigarette, metabolize histimine, or suffer an asthma
attack.

Asthma attacks have a low chance of happening every second, starting 10
minutes after you spawn and with a 20-30 grace period between attacks.
They are "diseases" that cant be outright cured by albuterol, only put
into remission. They increase inflammation at varying rates depending on
their severity, with extreme asthma attacks being a immediate threat to
your life while mild ones might not even cause inflammation. The
response to these is always the same - use your inhaler before you start
choking.

Asthmatics start with a rescue inhaler, a low-capacity inhaler loaded
with albuterol, which I will get to later.

Albuterol is a new medicine thats a little tricky to make but still
doable. It can be efficiently created with inverse convermol, or
transmutated from salbutamol and convermol. The opposite is true, with
albuterol able to be turned into salbutamol. Two canisters are available
in chemvends.

Upon use, it increases the virtual pressure of all breaths taken by 40%.
This allows for you to breathe in lower pressure environments, as well
as enhancing the effects of things like healium.

It's OD causes your diaphram to spasm, causing sporadic losebreath and
forced breathing.

Inhalers are a fancy new reagent application apparatus that uses the
INHALE reagent bitflag.

Inhalers themselves are rather unremarkable, they are merely the method
of using inhaler canisters (they also have a rotary display
approximating the uses left in a canister - just like real life
inhalers).

Inhaler canisters are the reagent containers, and are generally low
capacity. They can only be used in a inhaler, and contain aerosolized
chemicals.

Inhaler canisters and inhalers are unlocked from chemical synthesis, and
are printable for cheap from a medlathe.

In order to use a inhaler, one must uncover the mouth of a carbon and
wait a few seconds (its faster if its a self-application) before a small
amount of the reagents are delivered via the INHALE bitflag. This only
works on things currently breathing - if theyre dead, have no lungs, or
just, arent breathing - it will fail. This includes asthmatics with 100%
inflammation.
  
</details>

<img width="181" height="74"
alt="282863233-77a7cd6b-44d2-458e-9966-06d485df1521"
src="https://github.com/user-attachments/assets/293b6659-0834-4e9a-b033-cc3b0cfde18e"
/>

<img width="1465" height="202"
alt="282863346-2a247736-0c3a-43b0-a60b-7cff10ce4963"
src="https://github.com/user-attachments/assets/5d9a13dc-b7b2-4de2-adda-8fbc8276e667"
/>


Sprites are not mine; they are from swanni and I can NOT sprite for the
life of me
## Why It's Good For The Game

1. Asthma is just cool. One of my favorite features on bay was the fact
lung damage required you to turn up the pressure on your O2 tank to
survive, and this does precisely that.
2. Its always fun to add new ways to interact with atmos as a player
that arent grossly broken, and I fail to see how a 40% increase of gas
intake will really affect balance too badly.
3. Inhalers are badass.
## Changelog
🆑
add: Asthma quirk, based on IRL asthma
add: Inhalers, a new reagent administering method that uses INHALE
add: Albuterol, a new reagent that increases the amount of gas you
inhale by 40%
balance: Inverse convermol now forms once the reaction is done, not on
metabolize
/🆑

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2025-09-08 13:31:21 +12:00
Time-Greenandnevimer 147df9ec59 Organ Growing Kit | Coroner Cytology Cargo Content (1/2) (#92108)
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>

# Conflicts:
#	code/modules/clothing/head/tinfoilhat.dm
2025-08-19 22:29:26 -04:00
43fc75facb Organ Growing Kit | Coroner Cytology Cargo Content (1/2) (#92108)
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-08-11 18:36:50 +02:00
John WillardandRoxy 78cffc2101 Adds a new halloween species: Spirits (#90711)
Adds 2 new species: Spirits and Ghosts

Spirits are available roundstart during Halloween, Wabbajack and
Xenobio's black slime extract
Ghosts are available through Magic mirrors

They fly around, and don't have legs and instead float around. They also
can't get legs implanted onto themselves.

They also do have organs, so they are affected by flashbangs, they do
get hungry, they do need oxygen to survive (they don't take damage in
space but they do suffocate & get slowdown), and can process chems.
Gibbing a ghost gives ectoplasm, an ingredient for ghost burgers.

Chaplains also got a buff here, null rod-type weapons' bane is now
against Spirit mobs, rather than hardcoded revenants. This means it now
includes Spirits/Ghosts, but also Soulscythes & Cult shades.

Also re-adds https://github.com/tgstation/tgstation/pull/81630 which was
reverted in https://github.com/tgstation/tgstation/pull/86506 which I
assume was accidental.

Ghosts have an innate ability to become incorporeal, which allows them
to phase through walls and stuff. Using this will immediately make them
drop any non-ghost limb/organ (not implants cause I thought it would be
funny). This ability is not available if they have holy water in their
system, and like revenants they also can't walk over blessed tiles with
it. They are also invisible to cameras while using this (not the obscura
though).

Sprites taken from observers directly, if anyone wants to make custom
sprites for them feel free. If anyone wants to make this obtainable
somehow in-game as well I wouldn't be opposed, halloween is just where I
thought it would fit most.

This also adds a lot of fixes that I encountered trying to add this,
from systems that have been neglected throughout the years.

https://github.com/user-attachments/assets/e368d710-80a0-4c63-b271-1abe3dd41a5e

We haven't gotten a new halloween species in a long time and thought it
would be fun if you can play as an actual ghost, the soul that remains
after a person passes, so Halloween feels more haunted. It's overall
made in just good fun, with a bonus that Ghosts are a cool species to
play with as well for Wizards & maybe Chaplains in the future (Dead sect
when?)

🆑
add: Added a new halloween species: Spirits, a species without legs and
instead floats.
add: Added a new magic mirror species: Ghosts, like spirits but with the
ability to become incorporeal, traversing through solid wall.
fix: Mobs unable to use storage items now can't use storage items.
fix: Mobs unable to use items can now not open airlocks & closets
fix: Mobs unable to pick items up can no longer pick items up and
immediately drop, moving one tile at a time.
fix: Mobs with intentional missing limbs (Alien larva) no longer show
their limbs as missing on examine (again)
fix: Golems' pref page had a missing icon, it now has one.
/🆑

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
(cherry picked from commit 096c032402)
2025-06-26 19:54:02 -04:00
096c032402 Adds a new halloween species: Spirits (#90711)
## About The Pull Request

Adds 2 new species: Spirits and Ghosts

Spirits are available roundstart during Halloween, Wabbajack and
Xenobio's black slime extract
Ghosts are available through Magic mirrors

They fly around, and don't have legs and instead float around. They also
can't get legs implanted onto themselves.

They also do have organs, so they are affected by flashbangs, they do
get hungry, they do need oxygen to survive (they don't take damage in
space but they do suffocate & get slowdown), and can process chems.
Gibbing a ghost gives ectoplasm, an ingredient for ghost burgers.

Chaplains also got a buff here, null rod-type weapons' bane is now
against Spirit mobs, rather than hardcoded revenants. This means it now
includes Spirits/Ghosts, but also Soulscythes & Cult shades.

Also re-adds https://github.com/tgstation/tgstation/pull/81630 which was
reverted in https://github.com/tgstation/tgstation/pull/86506 which I
assume was accidental.

### The difference between Spirits and Ghosts

Ghosts have an innate ability to become incorporeal, which allows them
to phase through walls and stuff. Using this will immediately make them
drop any non-ghost limb/organ (not implants cause I thought it would be
funny). This ability is not available if they have holy water in their
system, and like revenants they also can't walk over blessed tiles with
it. They are also invisible to cameras while using this (not the obscura
though).

Sprites taken from observers directly, if anyone wants to make custom
sprites for them feel free. If anyone wants to make this obtainable
somehow in-game as well I wouldn't be opposed, halloween is just where I
thought it would fit most.

This also adds a lot of fixes that I encountered trying to add this,
from systems that have been neglected throughout the years.


https://github.com/user-attachments/assets/e368d710-80a0-4c63-b271-1abe3dd41a5e

## Why It's Good For The Game

We haven't gotten a new halloween species in a long time and thought it
would be fun if you can play as an actual ghost, the soul that remains
after a person passes, so Halloween feels more haunted. It's overall
made in just good fun, with a bonus that Ghosts are a cool species to
play with as well for Wizards & maybe Chaplains in the future (Dead sect
when?)

## Changelog

🆑
add: Added a new halloween species: Spirits, a species without legs and
instead floats.
add: Added a new magic mirror species: Ghosts, like spirits but with the
ability to become incorporeal, traversing through solid wall.
fix: Mobs unable to use storage items now can't use storage items.
fix: Mobs unable to use items can now not open airlocks & closets
fix: Mobs unable to pick items up can no longer pick items up and
immediately drop, moving one tile at a time.
fix: Mobs with intentional missing limbs (Alien larva) no longer show
their limbs as missing on examine (again)
fix: Golems' pref page had a missing icon, it now has one.
/🆑

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
2025-06-22 10:02:06 +02:00
df3df27e1d Diagnosis: The Diagnosing (#91361)
Adds more analog diagnostic stuff, and expands on what's already there.
Current content added:

- Custom text for when you examine different kinds of organs with
stethoscopes and penlights.
- Examining eldritchly corrupted organs too closely (stethoscope and
penlight) is a bad idea.
- If you place a metal disk against a guy sparking like a tesla coil,
you get shocked. Go figure.
- If someone has an actively damaging zombie infection (ie. got clawed
by a zombie, not romerol), you can see it on penlight.
- New Hemoanalytic Scanner, for use in places where real health scanners
with actual useful features are too high class. It's able to scan for
medicines in the blood, check blood and oxygen levels, determine if the
scannee has tox damage, and even check their blood type. It's printable
roundstart for iron and glass, so that medbay isn't completely fucked if
science doesn't do their job and they lose their health analyzers
somehow.
- Nifty status effect messages for those tools!

Fun, rarely used systems are being improved, and seeing as how the
easily available, faster health analyzer is basically the end-all be-all
of diagnostic tools anyways, it's not going to unbalance anything unless
i literally make them just a health analyzer but better.
🆑
add: Vaguely estimate what kinds of hearts and lungs people have from a
variety of weird stethoscope noises! (Or just look it up on the pr, I
won't judge.)
add: Using analog diagnostic tools on eldritch organs from beyond the
waking world or people whose hearts cause their skin to arc like a tesla
coil is a bad idea. Examine people, ya goof.
add: You can see if someone has an actively damaging (read: contracted
straight from the groaning hungry source) zombie infection by using a
penlight. Act out highly emotional headshot hesitation scenes today!
add: New Hemoanalytic Scanner (read: really shitty but roundstart
printable chem scanner), which tells you all about someone's blood, and
can also detect medicines in their bloodstream! Not toxins or
miscellaneous reagents though.
refactor: Refactored and added some penlight, stethoscope, and organ
code. If shit is fucked, please report it on the github issue tracker
ASAP.
fix: X-Ray vision generically causes eyes to glow under penlight, not
just specifically the mutation X-Ray vision.
fix: Reflex Hammers now fit in medical storage items, IE. medbelts and
medkits.
balance: People with welding-eyes or similar will not have their pupils
react to penlight examination.
/🆑

---------

Co-authored-by: ThrowawayUseless <notarealemail@emailservice.fake>
Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
2025-06-21 22:26:28 -04:00
f02819360b Diagnosis: The Diagnosing (#91361)
## About The Pull Request
Adds more analog diagnostic stuff, and expands on what's already there.
Current content added:

- Custom text for when you examine different kinds of organs with
stethoscopes and penlights.
- Examining eldritchly corrupted organs too closely (stethoscope and
penlight) is a bad idea.
- If you place a metal disk against a guy sparking like a tesla coil,
you get shocked. Go figure.
- If someone has an actively damaging zombie infection (ie. got clawed
by a zombie, not romerol), you can see it on penlight.
- New Hemoanalytic Scanner, for use in places where real health scanners
with actual useful features are too high class. It's able to scan for
medicines in the blood, check blood and oxygen levels, determine if the
scannee has tox damage, and even check their blood type. It's printable
roundstart for iron and glass, so that medbay isn't completely fucked if
science doesn't do their job and they lose their health analyzers
somehow.
- Nifty status effect messages for those tools!

## Why It's Good For The Game
Fun, rarely used systems are being improved, and seeing as how the
easily available, faster health analyzer is basically the end-all be-all
of diagnostic tools anyways, it's not going to unbalance anything unless
i literally make them just a health analyzer but better.
## Changelog
🆑
add: Vaguely estimate what kinds of hearts and lungs people have from a
variety of weird stethoscope noises! (Or just look it up on the pr, I
won't judge.)
add: Using analog diagnostic tools on eldritch organs from beyond the
waking world or people whose hearts cause their skin to arc like a tesla
coil is a bad idea. Examine people, ya goof.
add: You can see if someone has an actively damaging (read: contracted
straight from the groaning hungry source) zombie infection by using a
penlight. Act out highly emotional headshot hesitation scenes today!
add: New Hemoanalytic Scanner (read: really shitty but roundstart
printable chem scanner), which tells you all about someone's blood, and
can also detect medicines in their bloodstream! Not toxins or
miscellaneous reagents though.
refactor: Refactored and added some penlight, stethoscope, and organ
code. If shit is fucked, please report it on the github issue tracker
ASAP.
fix: X-Ray vision generically causes eyes to glow under penlight, not
just specifically the mutation X-Ray vision.
fix: Reflex Hammers now fit in medical storage items, IE. medbelts and
medkits.
balance: People with welding-eyes or similar will not have their pupils
react to penlight examination.
/🆑

---------

Co-authored-by: ThrowawayUseless <notarealemail@emailservice.fake>
Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
2025-06-19 09:36:02 +02:00
JacquerelandRoxy ab163f6516 Fixes changeling void adaption (#91626)
This PR changes `TRAIT_SPACEBREATHING` from a lung trait to a mob trait,
and simultaneously renames it to the much less snappy but simultaneously
more specific `TRAIT_NO_BREATHLESS_DAMAGE`
This proc technically does not allow you to breathe specifically in
space, it only bypasses any checks for minimum levels of gases
regardless of if you are in space or not

At the same time I implemented it for basic mobs, just because I can. I
don't think they have any way of gaining it, but if some future dev was
going to make a temporary buff that lets something breathe in space now
it could also work on basic mobs.

This is how developers expected the trait to work and no longer requires
that the mob have lungs to be used

🆑
fix: Changelings with Void Adaption can once again breathe in space
/🆑
2025-06-19 00:20:09 -04:00
JacquerelandGitHub 19b0e734a8 Fixes changeling void adaption (#91626)
## About The Pull Request

This PR changes `TRAIT_SPACEBREATHING` from a lung trait to a mob trait,
and simultaneously renames it to the much less snappy but simultaneously
more specific `TRAIT_NO_BREATHLESS_DAMAGE`
This proc technically does not allow you to breathe specifically in
space, it only bypasses any checks for minimum levels of gases
regardless of if you are in space or not

At the same time I implemented it for basic mobs, just because I can. I
don't think they have any way of gaining it, but if some future dev was
going to make a temporary buff that lets something breathe in space now
it could also work on basic mobs.

## Why It's Good For The Game

This is how developers expected the trait to work and no longer requires
that the mob have lungs to be used

## Changelog

🆑
fix: Changelings with Void Adaption can once again breathe in space
/🆑
2025-06-19 00:12:25 -04:00
Unit2EandShadow-Quill 8b3f03809d Bumps up Nitrium reagent addition on breath so people don't lose sleep immunity (#90345)
## About The Pull Request
webedit hihi

Nitrium is the anti-sleepy gas (at high pp), however, some effects have
negative consequences for how good it is at its job. Lag (occasionally),
and crucially, eating will make it so the reagent is metab'd out of the
mob for just long enough that they lose the sleep immunity. This creates
a frustrating loop where you're falling asleep for just a moment every
few seconds when breathing in a mix of nitrium and healium, which are
meant to synergize together. To fix this, this bumps up the amount of
reagent added to a max of 2, up from 1, bringing it in line with the
lower pp version (which already adds 2 of itself, and doesn't have a
similar issue).

## Why It's Good For The Game
It's frustrating for players to create a gas mix that arbitrarily
doesn't work, especially when caused by eating, often disabling the
proper functioning of Nitrium for the full duration of whatever kind of
"good food" status that is granted. This fixes that minor frustration.


## Changelog

🆑

fix: Mobs should no longer fall asleep when breathing in enough Nitrium
to provide sleep immunity.

/🆑
2025-04-29 17:15:52 -06:00
Waterpig 753d8e5ba4 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-25-04a 2025-04-08 18:58:45 +02:00
Unit2EandGitHub 0cbdc86e36 Bumps up Nitrium reagent addition on breath so people don't lose sleep immunity (#90345)
## About The Pull Request
webedit hihi

Nitrium is the anti-sleepy gas (at high pp), however, some effects have
negative consequences for how good it is at its job. Lag (occasionally),
and crucially, eating will make it so the reagent is metab'd out of the
mob for just long enough that they lose the sleep immunity. This creates
a frustrating loop where you're falling asleep for just a moment every
few seconds when breathing in a mix of nitrium and healium, which are
meant to synergize together. To fix this, this bumps up the amount of
reagent added to a max of 2, up from 1, bringing it in line with the
lower pp version (which already adds 2 of itself, and doesn't have a
similar issue).

## Why It's Good For The Game
It's frustrating for players to create a gas mix that arbitrarily
doesn't work, especially when caused by eating, often disabling the
proper functioning of Nitrium for the full duration of whatever kind of
"good food" status that is granted. This fixes that minor frustration.


## Changelog

🆑

fix: Mobs should no longer fall asleep when breathing in enough Nitrium
to provide sleep immunity.

/🆑
2025-04-06 21:13:29 +02:00
MrMelbertandGitHub eb0e842320 Hallucination revamps and additions (#89865)
## About The Pull Request

1. Hallucination effects are now tiered

Hallucinations now all have tiers, ranging from common to special. 
If you are just hallucinating a teeny bit, you will not experience the
more extreme hallucinations, like bubblegum or your mom.
But if you're hallucinating off your butt, you will be a bit more likely
to experience them.

2. Hallucination rate has been tweaked

Default hallucination cooldown is now 20-80 seconds, up from 10-60
seconds.
However the cooldown will *also* vary depending on just how much you're
hallucinating, going down to 10-40 seconds.

3. RDS is now capped a bit lower (meaning you don't see the higher tiers
like bubblegum).

But I added a preference to uncap it. For the people who actually like
bubblegum visits.

4. If a hallucination fails to trigger, the cooldown will partially
reset. (by 75%)

5. "Fake chat" hallucination will pick more viable subjects.

Fake chat will try to find someone who can actually speak your language,
rather than make a monkey speak mothic or something.
(I may revisit this so if you're super-hallucinating it reverts to old
behavior though.)

6. Adds a hallucination: Fake blood

You hallucinate that you start bleeding, very simple.

7. Adds a hallucination: Fake telepathy

You hallucinate a random telepathic message, similar to fake chat.

8. Adds a hallucination: Eyes in the Dark

A nearby dark turf will have a set of glowing red eyes shine through the
dark. A classic.

9. Adds some new sub-hallucination: PDA ringtone (fake sound), summon
guns/magic (fake item)

Funny prank.

10. Makes mindbreaker a bit more effective at combating RDS.

Pretty much does nothing right now unless you gulp like 50u.

## Why It's Good For The Game

Hallucinations are pretty one note if you experience them for longer
than 10 minutes.

This is due to two fold:
- Many hallucinations are goofy, and not subtle
- Hallucinations trigger very rapidly

You will never fall for a hallucination because in between "You see John
Greytide put the blueprints away", you get your mom yelling at you,
everyone looking like syndies (again), and bubblegum

This pr addresses it by
- Limiting the wacky hallucinations for when you're really off your
gourd
- Reducing the period between triggers
- Adding a few hallucinations

If the wackier hallucinations are reserved for when you're really off
your rocker, this lets the more subtle ones sink in over time, leaves
more room for second guessing

## Changelog

🆑 Melbert
add: Adds 4-5 new hallucinations. Collect them all.
balance: If you are only hallucinating a little bit, the game will
prefer to pick more subtle hallucinations. If you are hallucinating a
ton, it will prefer the more wacky hallucinations.
balance: If you are only hallucinating a little bit, the cooldown
between hallucinations is longer. If you are hallucinating a ton, it
will be shorter.
balance: If a hallucination fails to trigger (such as a deaf person
getting a sound hallucination) the next one will be a lot sooner.
balance: RDS hallucination amount is capped at mid tier hallucinations.
This means bubblegum and co. will be a lot rarer, or will even never
show. HOWEVER, there is now a preference allowing you to uncap your RDS
hallucinations.
balance: Mindbreaker toxin is more effective at suppressing RDS.
balance: Some hallucinations effects have been tweaked up or down
according to the new thresholds. Madness mask as an example.
fix: "Fake Fire" Hallucination works again, and now has a unique message
for if you stop-drop-roll that other people see.
/🆑
2025-03-20 21:36:56 +00:00
MrMelbertandGitHub 1406210b6e Improves the "Check mood" printout, reworks the "Check self" printout, minor embed changes (#89854)
## About The Pull Request

1. Reformats "Check Mood" 

Basically just cleaning it up.
- Moodlets are bullet pointed.
- Hunter is displayed here now.
- Quirks are displayed here now.
- It now tells you how drunk you feel.

Sample


![image](https://github.com/user-attachments/assets/1aac1180-1eed-45f7-9615-005eeecef8c8)

2. Reworks "Check self"

Big reworks done here.
- Organs now don't outright say "Your hear is hurty" "Your lugs are
hurty". Now they'll say something like, "Your chest feels tight" -
Unless you're self aware, then it will say "Your heart is hurty".
- Check self no longer reports wounds with 100% accuracy. You get an
approximate of what the wound is like - "Your chest has an open cut".
More severe wounds will still be bolded, though.

Sample 


![image](https://github.com/user-attachments/assets/3da6336c-63db-4298-9fcb-76748608c848)


![image](https://github.com/user-attachments/assets/6e797ef3-cb04-46cd-aa3c-520c9240953d)

3. Embed tweaks

Embeds can be hidden, and thus will only show up on health analyzers.
This means you can't rip them out by hand.
Right now only bullet shrapnel and explosion shrapnel is hidden.

## Why It's Good For The Game

1. Just some cleanup, largely. Stuff like quirks and hunger make more
sense when checking your mental rather than checking your body. Though
this might be weird for if mood is config-disabled, I might have to
revisit htat.

2. I always found that clicking on yourself and just getting a print out
of "Your liver's non-functional, your chest has a weeping avulsion, etc"
is pretty lame... it kind of diminishes diagnosis / doctor's job.
Ultimately, the goal of this is to open up a little more doctor gameplay
- primarily I think it'll allow for some fully roleplay moments, like
"Doc my chest hurts a lil" "You have 7 bullets and broken ribs bro"

3. Adds more punch to some embeds. Mostly for larp though.

## Changelog

🆑 Melbert
add: Your mood printout (clicking on the mood face) has been
reformatted, and should generally be cleaner.
add: Self examining was reworked, and overall gives you a lot less
perfect information, unless you are self-aware.
add: Bullet and grenade shrapnel is now hidden from examining - it's
skin deep. You can't rip them out with your hands, but hemostats /
wirecutters still suffice if you know they're there. Health analyzers
still pick them up too.
qol: Ghosts aren't notified about NPCs getting appendicitis 
/🆑
2025-03-15 05:51:06 +00:00
52d2250fa2 The Organ Tree | New Exotic Seed (#89310)
## About The Pull Request
99% of all code was stolen completely from @MrMelbert, like I spent more
time waiting for the plant to grow for the video than actually
contributing to this

Adds a new tree mutation to the shrub (from exo crate)
It has a High Complexity Gene, which halves the harvest and blocks
pollination benefits. It produces podperson organs and limbs. Limbs are
twice as likely to drop as organs (because there's a lot more organs).
It can also drop plant meat.


https://github.com/user-attachments/assets/88bb89dd-4cd7-4bc9-ac2f-f4c67a5ea9ff

(Yes the sprite is mine please don't bully Melbert for it)

Podpeople now also have their own set of organs, which are mostly just
standard organs but colored green.

## Why It's Good For The Game
Gives us another source of organs and limbs besides the limb grower,
exosuit fab and medical protolathe. Those only produce organic and
robotic organs and limbs, but now we can also produce plant organ and
limbs! (Without committing horrible crimes). This also synergizes well
with #89306 , which makes it so plant bodyparts have actual unique
benefits (more than just a fashion statement).

## Changelog
🆑 MrMelbert, Time-Green
add: Adds an organ tree as a mutation of shrubs (from the exotic seeds
crate)! Spare organs have never been so green!
/🆑

---------

Co-authored-by: MrMelbert <kmelbert4@gmail.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2025-03-12 16:35:29 -04:00
Majkl-J b6b8306fda Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-25-02a 2025-02-20 00:00:19 -08:00
31306fb956 The Organ Tree | New Exotic Seed (#89310)
## About The Pull Request
99% of all code was stolen completely from @MrMelbert, like I spent more
time waiting for the plant to grow for the video than actually
contributing to this

Adds a new tree mutation to the shrub (from exo crate)
It has a High Complexity Gene, which halves the harvest and blocks
pollination benefits. It produces podperson organs and limbs. Limbs are
twice as likely to drop as organs (because there's a lot more organs).
It can also drop plant meat.


https://github.com/user-attachments/assets/88bb89dd-4cd7-4bc9-ac2f-f4c67a5ea9ff

(Yes the sprite is mine please don't bully Melbert for it)

Podpeople now also have their own set of organs, which are mostly just
standard organs but colored green.

## Why It's Good For The Game
Gives us another source of organs and limbs besides the limb grower,
exosuit fab and medical protolathe. Those only produce organic and
robotic organs and limbs, but now we can also produce plant organ and
limbs! (Without committing horrible crimes). This also synergizes well
with #89306 , which makes it so plant bodyparts have actual unique
benefits (more than just a fashion statement).

## Changelog
🆑 MrMelbert, Time-Green
add: Adds an organ tree as a mutation of shrubs (from the exotic seeds
crate)! Spare organs have never been so green!
/🆑

---------

Co-authored-by: MrMelbert <kmelbert4@gmail.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2025-02-19 05:46:06 +01:00
MrMelbertandGitHub d49e32cc98 Changes mob height from getter -> updater (#88953)
## About The Pull Request

`get_mob_height()` is called a lot a lot, and frequently ended up
over-timing when it amounted to the same value 98% of the time.
Instead we can defer it to only update when we actually change height,
or when we pick up a trait or species that changes our height.

I also moved the monkey checks out. Made it into a species procs. I know
species procs are lame but it seems fine unless we wanna tie to the
monkey's chest or limbs or something.
2025-01-14 19:06:34 +00:00
BloopMosleyTime-GreenGhomSmArtKarklorpa_0Steventgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>FlufflesGoldenAlpharex
6df77ad80d [MIRROR] Death of mutant bodyparts AND external organs (#85137) (#4335)
* Death of mutant bodyparts AND external organs (#85137)

Removes mutant bodyparts and external organs from the game completely
Digitgrade behaviour was mutant bodypart for no reason

Cat ears now work with the bodyparts overlay system, same as all the
other external organs (since all their behaviour is now just on /organ

It doesn't remove all the /external types, but moves all behaviour to
/organ. I'll follow up with a PR wiping all the /external organ types,
but it's just conflict heaven so not this PR

I've also streamlined a lot of duplicate/weird species regeneration code

Melbert did the same PR as well but due to a lack of time (?) I have
absorbed his PR to double nuke mutant bodyparts

Frees us from the chain of unmodular code, and kills my greatest nemesis
(after the shuttle meteor murder bug)

🆑 Time-Green and MrMelbert
Refactor: External organ behaviour has been moved to /organ, ears now
use the same system as the other organs
Refactor: Mutant bodyparts are dead! This likely does not mean much to
the average person but it's very dear to me
code: Improves digitgrade handling in preference code
/🆑

I have absorbed #85126, using Melberts code to improve and add some
missing changes. Mainly improving the functioning of preferences and
digitgrade legs. I didn't take over the hairstyle improvements.

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>

* Fixes missing felinid ear preference (#86553)

Closes #86452

🆑
fix: Fixed missing felinid ear preference
/🆑

* Spelling Fixes (#86056)

Fixes several errors to spelling, grammar, and punctuation.
Improves readability and user experience.
🆑
spellcheck: fixed a few typos
/🆑

* Fix plasmamen having all feature preferences (#86682)

Fixes #86622

Plasmamen relevant_external_organ is null, and it then checks if
relevant_external_organ is in a list containing nulls
I cleared the nulls from get_mut_organs to fix it

🆑
fix: Fixes plasmamen having all external organ species preferences
/🆑

* Fixes cat ear layering, makes getFlatIcon account for RESET_COLOR on under/overlays (#86757)

After the external organ removal pr, cat ears stopped being as weirdly
specialcased, and instead just used a `/datum/bodypart_overlay/mutant`
subtype. However, this was set up in a way where the inner ears were put
on a different layer from the outer ears, leading to wonky layering.

In this pr, we revert their layers and instead apply the inner ears as
an overlay onto the base ears, fixing this.

Thank you Melbert for the idea. o7

Additionally, as this pr tripped the screenshot tests, makes the
`getFlatIcon(...)` proc account for `RESET_COLOR` on under/overlays.

We do this by making it stop applying the colour after merging all the
under/overlays, and instead apply it and the parent color _before_
merging any under/overlays, while proxying the parent color as a new
parameter `parentcolor` to any new `getFlatIcon(...)` calls.

This coincidentally also fixes usage of `getFlatIcon(...)` on husked
bodies, as those also used `RESET_COLOR` for their blood overlay. The
screenshot tests had to be updated for this.

Fixes #86453.

🆑
fix: Fixed cat ears not layering properly.
fix: Husked bodies show their blood with the right colours in
photographs.
/🆑

* Automatic changelog for PR #86757 [ci skip]

* Fish infusion (#87030)

I'm adding a new infusion ~~(actually four, but two of them are just
holders for specific organs tied to a couple fish traits)~~ to the game.
As the title says, it's about fish.

The infusion is composed of three primary organs, plus another few that
can be gotten from fish with specific traits.

The primary organs are:
- Gills (lungs): Instead of breathing oxygen, you now need to stay wet
or breathe water vapor.
- fish-DNA infused stomach: Can safely eat raw fish.
- fish tail: On its own, it only speeds you up on water turfs, but it
has another effect once past the organ set threshold. It also makes you
waddle and flop like a fish while crawling (I still gotta finish sprites
on this one)

Other organs are:
- semi-aquatic lungs: A subtype of gills from fish with the 'amphibious'
trait, falls back on oxygen if there's no water. Can also be gotten from
frogs, axolotl and crabs.
- fish-DNA infused liver: From fish with the 'toxic' trait. Uses
tetrodotoxin as a healing chem instead of a toxin. Also better tolerance
to alcohol if you want to drink like a fish (ba dum tsh).
- inky tongue: From fish with the 'ink production' trait. Gives mobs the
ability to spit ink on a cooldown, blinding and confusion foes
temporarily.

The main gimmick of this infusion revolves around being drenched in
water to benefit from it, In the case you get the gills organ, this also
becomes a necessity, to not suffocate to death (alternatively, you can
breathe water vapor, without any benefit). To enable the bonus of the
organs set, three organs need to be infused. They can be gills, stomach,
tail and/or liver, while the inky tongue doesn't count towards it.

Once the threshold is reached, the following bonus are enabled:
- Wetness decays a lot slower and resists fire a bit more.
- Ink spit becomes stronger, allowing it to very briefly knock down
foes.
- Fishing bonuses and experience
- Resistance to high pressures
- Slightly expanded FOV
- drinking water and showers mildly heal you over time.
- for felinids: You won't hate getting sprayed by water or taking a
shower.
- While wet:
- - If the fish tail is implanted, crawling speed is boosted.
- - You no longer slip on wet tiles.
- - You also become slippery when lying on the floor.
- - You get a very mild damage resistance and passive stamina
regeneration, and cool down faster.
- - You resist grabs better.
- - get a very weak positive moodlet.
- However, being dry will make you quite squisher, especially against
fire damage, slower and give you a modest negative moodlet.

While working on it, I've also noticed a few things that explained why
tetrodotoxin (TTX) did jackshit at low doses, because livers have a set
toxin tolerance value, below which, any amount of toxin does nothing.
Also I've felt like reagents like multiver & co were a bit too strong
against a reagent that's supposed to work at very low doses, with slow
metabolization, so I've added a couple variables to buff TTX a bit,
making it harder to purge and resistant to liver toxin tolerance (also
added a bit of lungs damage).

I wanted to take a shot at coding a DNA infusion and see how chock-full
I could make it. DNA infusions are like a middle point between "aha,
small visual trinket" and organs with generally ok effects. I seek to
make something a bit more complex ~~(also tied to fishing ofc because
that's more or less the recurrent gag of my recent features)~~ primaly
focused around the unique theme of being strong when wet and weaker when
dry.

EDIT: The PR is now ready, have a set of screenshots of the (fairly mid)
fish tails (and gills, barely visible) on randomly generated spessman
and one consistent joe:

![immagine](https://github.com/user-attachments/assets/a4965508-22e2-4d3a-8523-29fec6bce91e)

🆑
add: Added a new infusion to the game: Fish. Its main gimmick revolves
around being stronger and slippery when wet while weaker when dry.
balance: Buffed tetrodotoxin a little against liver tolerance and
purging reagents.
/🆑

* Eye wounds, scars and a new ~Pirate~ RP quirk (#87209)

Upon getting stabbed in your eyes or having a bullet fly through your
head there's a chance (minor for stabbing, extremely low for headshots)
you'll receive a new "Eye Puncture" wound which causes profuse bleeding
out of your now-empty eye hole. Once healed you'll have to deal with a
scar on your eye which cannot be cured and requires surgical
replacement. Eye scarring will reduce your eyes' max health by 15, give
you a minor screen tint and a fancy visual on your character sprite.
Getting scarring on both eyes will turn you completely blind.

![image](https://github.com/user-attachments/assets/c1ae4ff3-6844-405d-819b-9c390511e321)

This PR also introduces a new quirk which gives you eye scarring on the
eye of your choice and an eyepatch to go alongside it, just make sure
that it sits on the right eye.

Also added medical(white) subtype of eyepatches to loadout for those who
want that version instead. Credits to AnturK on discord for the idea.

Its a neat lil' feature that makes the game more immersive, and unlocks
more roleplay opportunities for players. New quirk gives access to this
feature for players who want to make it a part of their character's
backstory (or maybe as a part of permanent scar roleplaying).

🆑
add: Getting stabbed or shot in the eyes has a chance of giving you a
new wound and a semi-permanent scar, blinding you on one side
add: Added new "Scarred Eye" quirk which blinds you on one eye but gives
you a fancy eyepatch
add: Medical eyepatches have been added to loadout
/🆑

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>

* Resprited tails from fish infusion. (#87298)

Back when I made #87030 I got a bit lazy when it came to spriting the
fish tails and just ported a few ones from furry servers and made them
inherit the hair color. Let me tell you, those sprites kinda look bad,
and the fact that they've the same colors of hair is kinda... fuzzy, and
doesn't sit well with me, like some hairball stuck in a cat's throat.

So I took upon myself to actually make them better (and also give gill
overlays a couple extra pixels), at the cost of some of my free time and
their wagginess, because fuuuuuck wagging animations for anything that
isn't a somewhat amorphous fluffy tail. Fish don't wag their tail.

They also get one of several blue/grey tints if the owner of the part
doesn't have a peculiar skin tone like lizards or ethereals or moffs.

Anyway, comparison time:

OLD:

![immagine](https://github.com/user-attachments/assets/a4965508-22e2-4d3a-8523-29fec6bce91e)

NEW:

![immagine](https://github.com/user-attachments/assets/0f8e80cd-d11f-4fd4-a919-acb7237fa927)

Both from byond screenshots but I cut and pasted them in paint instead
of asesprite because old habits die hard.

Better sprites. Perhaps the selection of blues could be improved a bit
idk.

🆑
image: resprited fish tails from fish infusion.
/🆑

* Makes the game compile, first.

* Removes a duplicate loadout entry added by /tg/ (to avoid people's loadouts getting messed up)

* Fixed an issue with on_mob_insert() for /datum/bodypart_overlay/mutant

* Fixed an issue with the burn datum of the moth wings bodypart_overlay

* Fixing digitigrade legs not behaving as they should be

* A bunch of Insert->mob_insert and Remove->mob_remove

* Okay, now stuff gets colored properly

Also ears work properly too!

Only thing is that mutant organs on the preferences dummy don't seem to change between character, at least for most of them, which is really annoying.

* Properly returns ears to being internal organs

* Makes it so preferences can use relevant_mutant_bodyparts again!

* Makes organs properly update when changing species

* Markings now get removed when they don't need to be there on a limb

* Fully renives update_mutant_bodyparts(), as it was basically just update_body_parts() anyway at this point

* fix charging implant

* Restores the usage of simple bodypart_overlay for the sensory_enhancer and the hackerman_deck, as that was otherwise causing a bunch of runtimes

* Returns legs to being a sprite accessory, just for simplicity's sake (I don't want to have to refactor it on our end again)

* Fixes xenos not getting their mutant organs because I accidentally nulled the list for no reason 💀

* Makes it so certain organs (in this case, ears) can't be replaced when changing visual preferences, meaning Tesharis/Synths/Slimepeople will get their respective ears, regardless of what visuals they choose for them

* Fixes a small mistake with spines in the code

* Adds some mutant_bodyparts for the results of the infuser unit test. This might be a hack, but we'll cross that bridge when we get to it in the future.

* Adds a "None" option to tail_spines

* Allows ears to not constantly runtime because they don't have an accessory_name sometimes, which is a sad consequence of many species not setting their ear sprite sometimes

* Should fix CI, hopefully should be the last thing needed for this to work flawlessly from now on (crossing fingers)

* This ACTUALLY fixes the changeling transform and transform sting! Hurray!

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: klorpa <30924131+klorpa@users.noreply.github.com>
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Co-authored-by: Fluffles <piecopresident@gmail.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
2025-01-12 21:42:00 -05:00
88cde17ea3 Surgery speed bonus revert/refactor (#2569)
## About The Pull Request

Skyrat reverts
- Removes the Skyrat surgery speed bonus for 3 tiles of free space
- Removes Skyrat surgery mood debuff

Removes tend wounds slowdown on on dead people. Replaces with a slowdown
on husks.
Slightly buffs tend wounds damage healed per cycle

Introduces new surgery speed bonuses, based on TG speed mods:
- Speed bonus for operating table
- Speed bonus for operating computer
- Speed bonus for using sterilizine/cryostylane now applies to all
surgery steps, not just the one where the reagent is applied
- Speed bonus for anaesthetics/painkillers

Visual feedback of what your surgery speed modifier is

## Why It's Good For The Game

The Skyrat check is dumb and doesn't solve any problems, rather creates
them with TC still being surgery central except now people are screaming
at you to move, which there isn't enough space to do in the TC anyways.

Two doctors working on a patient should not slow down surgery. This
should not count as a clean, quiet environment for lightspeed surgery:


![dirty-medbay2](https://github.com/user-attachments/assets/abe9dfa3-144a-4fae-a9eb-c65afa8d50ee)

## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>


https://github.com/user-attachments/assets/abea1be8-463c-451f-a58b-501600bab8f0

</details>

## Changelog

🆑 LT3
balance: Removed Skyrat surgery speed bonus
balance: Removed Skyrat negative mood events for surgery
balance: Removed operating tables automatically applying numbing
balance: Added surgery speed bonus for operating computers
balance: Added surgery speed bonus for anaesthetic/painkillers
balance: Added surgery speed bonus for sterilizine/cryostylane treatment
balance: Adjusted surgery speed penalty for stasis beds
balance: Removed speed penalty for tending wounds on dead bodies,
replaced with penalty for husked body
balance: Increased tend wounds healed damage per cycle
balance: Increased functional duration of sterilizine
balance: N2O is now eligible for the analgesia surgery bonus
balance: Surgery and treatment room scrubbers filter N2O by default
qol: Bubble notification for surgery speed and damage healed
qol: Medical HUD, health analyzer, and operating computer provide tend
wounds results
qol: Text log indicates what surgery bonuses are active, and which are
available
add: added lidocaine and sterilizine to surgery trays, NanoMed, and
NanoDrug
image: anesthetic machine is now breath machine, usable with all gas
types
/🆑

---------

Co-authored-by: Waterpig <49160555+Majkl-J@users.noreply.github.com>
2025-01-12 16:10:39 -05:00
LT3andGitHub e4e2486c37 Modular lungs update/air alarm threshold (#2859)
## About The Pull Request

- Fixes some oddities with the hot/cold/tox/pressure adapted lungs
having incorrect thresholds. (For example, the hot lungs having better
cold resistance than standard lungs)
- Changes the miasma proc override to be a code edit, given the code had
fallen behind TG updates.
- Adds an air alarm check for miasma so air alarms don't warn until
miasma is actually approaching hazardous conditions, and slightly
adjusts temp alarms to account for the special lung types.

## Why It's Good For The Game

Bugfixes, the air alarms throwing false yellow/red alarms is annoying.

## Proof Of Testing

I spent hours testing this. BELIEVE ME. Also it's been test merged a
while now.

## Changelog

🆑 LT3
qol: Miasma doesn't trigger air alarms until it's reached dangerous
levels
fix: hot/cold/tox/pressure adapted lungs are now consistently better
than standard lungs in their respective area
fix: fixed sometimes passing out due to CO2 with hot/cold adapted lungs
/🆑
2025-01-12 15:10:49 -05:00
GhomandGitHub 6272b3680c You can use a fishing rod to snatch organs during organ manipulation surgery (feat organs sanity fix) (#87774)
## About The Pull Request
This allows you to use a fishing rod during the "manipulate organs" step
of the aforementioned surgery to snatch organs from a target.

Unlike other fish sources, this one has a negative fishing difficulty of
-20, which when summed with the default minigame difficulty should still
result in a negative difficulty. In layman terms, this means the
minigame is skipped here (unless you're wearing some clunky stuff like
insulated or boxing gloves). It also has a wait time of 8 to 13 seconds
versus the more random standard 3 to 25 seconds.

A small side-effect of this is that explosions during the "manipulate
organs" step will basically disembowel you, but it kinda fits anyway.

By the by, because of this, there is a tiny chance bluespace fishing
rods can yield you random organs. Worry not, they're newly generated, so
you won't be snatching it from another player by accident (at least for
now).

## Why It's Good For The Game
It adds more possible weird and rare shenanigans involving surgery.

## Changelog

🆑
Add: You can use a fishing rod to snatch organs during organ
manipulation surgery
/🆑
2024-11-20 22:13:18 +00:00
8c3fc471d8 Refactor tasting code and reagent taste carrying, no longer taste your stomach contents or have non-existing flavours win out (#87329)
## About The Pull Request

Soooooooooooooooooooooooooooooooo tasting code has been jank for a good
damn while, and with this we aim to fix that- let's start from the
beginning.

Earlier when I was making a food item, I noticed that it'd never
actually have the taste I gave it, just tasting indescribable as things
without tastes do.
Weird, cause it definitely has a taste set, and plenty of nutriment
subtype reagents!...
When looking into it, I noticed that we only copy the tastes to
*specifically* the base nutriment and the vitamin subtype:

https://github.com/tgstation/tgstation/blob/57b718ad20c3b6af02dbdbc87f3cae4dd4d7e297/code/datums/components/food/edible.dm#L215-L216
But! Surely the other reagents should have tastes, right?.... No:

https://github.com/tgstation/tgstation/blob/57b718ad20c3b6af02dbdbc87f3cae4dd4d7e297/code/modules/reagents/chemistry/reagents/food_reagents.dm#L119-L120
we were always returning the tastes data, but never actually setting it
except for those two reagents, overriding any and all tastes.
This caused the non-taste of the proteins and fats to override the food
taste applied to the vitamins with their volume.

So, to fix this, we replace these hardcoded ids with a check for
`carry_food_tastes` on the nutriment reagent, such that each can
individually define whether they carry food tastes. This lets oils have
their own tastes, while letting all other nutriments carry the tastes.
We then make `get_taste_description(...)` return the base flavour if no
special flavour is found, and add base flavours to proteins and vitamins
based on what pure proteins/vitamins with no further additives would
roughly taste like.

This fixes our issue!....... Except, we now always taste something "rich
earthy pungent" when we eat. Looking into it, that's the organ tissue
reagent, used in our stomachs:

https://github.com/tgstation/tgstation/blob/57b718ad20c3b6af02dbdbc87f3cae4dd4d7e297/code/modules/reagents/chemistry/reagents/food_reagents.dm#L232-L236
....Because whenever we ingest something, we taste the contents of our
stomach. This was previously less noticeable, as while it *did* count,
it only added a weight for _no flavour_.

To fix this we just, well, make it so you taste what you're eating and
not the container itself.
It's as simple as separating the tasting code from the reagent holder,
and making the tasting that happens on ingest exposure use that logic
instead.
We keep the old logic for the INTJ skillchip and tasting machine, just
re-routed through this, and split up some procs to avoid too much
duplication.

This fixes our issue! Though, there's still some minor issues.
This lets us add organ tissue instead of nutriment to other organs so
they no longer taste indescribable, as it actually works properly now,
but letting organ tissue hold flavours would risk having the stomach
organ tissue permanently leech the flavours of the organ tissue you eat.
So we make a subtype of organ tissue for the stomach, stomach lining,
which cannot hold flavours.
This lets us apply the base organ tissue to all other organs without
risking stomach contamination.
## Why It's Good For The Game

It's jank to taste your stomach contents.
It's jank for organs to taste like nothing.
It's jank for reagents with flavours to never taste like anything.
It's jank for tasteless reagents to block out food flavours.
It's jank for organs to only sometimes contain organ tissues.
yeah.
## Changelog
🆑
refactor: Refactored tasting code. Please report any jank tasting
behaviours.
fix: You taste what you eat instead of the contents of your own stomach.
fix: Other basic nutriment subtypes also carry food flavours, instead of
outweighing the food flavours with their lack of flavour.
fix: Basic nutriment subtypes have a flavour they default to, in case of
not carrying any food flavours.
fix: Oils taste like oil instead of tasting indescribable.
fix: Clothing eaten by moths actually carries its flavours instead of
tasting indescribable.
fix: Organs use organ tissue instead of nutriment.
fix: You can actually taste organ tissue.
qol: Mineral slurry tastes like minerals instead of tasting
indescribable.
fix: Tasted flavours can actually be "strong" in addition to mild or "a
hint of", as intended.
qol: Flavours are only strong when their percentage of what you're
tasting is more than 4x taste sensitivity instead of 3x, for most
default tongues being 60% and lizards 40% of the drink.
qol: Tasted flavours are sorted by strength, stronger flavours coming
first.
qol: Tasted flavours are grouped into "strong", "mild", and "hint" in
the message, replacing "You can taste a hint of bitterness, alcohol, a
hint of sweetness, and a hint of cola" with "You can taste alcohol and a
hint of bitterness, sweetness, and cola".
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2024-11-02 01:44:34 +01:00
GhomandGitHub 778ed9f1ab The death or internal/external organ pathing (ft. fixed fox ears and recoloring bodypart overlays with dye sprays) (#87434)
## About The Pull Request
This PR kills the abstract internal and external typepaths for organs,
now replaced by an EXTERNAL_ORGAN flag to distinguish the two kinds.

This PR also fixes fox ears (from #87162, no tail is added) and
mushpeople's caps (they should be red, the screenshot is a tad
outdated).

And yes, you can now use a hair dye spray to recolor body parts like
most tails, podpeople hair, mushpeople caps and cat ears. The process
can be reversed by using the spray again.

## Why It's Good For The Game
Time-Green put some effort during the last few months to untie functions
and mechanics from external/internal organ pathing. Now, all that this
pathing is good for are a few typechecks, easily replaceable with
bitflags.

Also podpeople and mushpeople need a way to recolor their "hair". This
kind of applies to fish tails from the fish infusion, which colors can't
be selected right now. The rest is just there if you ever want to
recolor your lizard tail for some reason.

Proof of testing btw (screenshot taken before mushpeople cap fix, right
side has dyed body parts, moth can't be dyed, they're already fabolous):

![immagine](https://github.com/user-attachments/assets/2bb625c9-9233-42eb-b9b8-e0bd6909ce89)

## Changelog

🆑
code: Removed internal/external pathing from organs in favor of a bit
flag. Hopefully this shouldn't break anything about organs.
fix: Fixed invisible fox ears.
fix: Fixed mushpeople caps not being colored red by default.
add: You can now dye most tails, podpeople hair, mushpeople caps etc.
with a hair dye spray.
/🆑
2024-10-30 08:03:02 +01:00
d170a410d4 Recovered Crew | Medical+Cargo Respawns (#87072)
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2024-10-26 09:36:57 +02:00
Majkl-J e59d8ba64b Merge commit '179a607a90ad7ec62bdaff4e6fe72af60ee56442' of https://github.com/tgstation/tgstation into upstream-24-10b 2024-10-23 23:27:16 -07:00
SmArtKarandGitHub d4ac95a0e1 Nobody expects the span inquisition: replaces most <span>s with macros (#86798)
## About The Pull Request
123 changed files and multiple crashes after writing broken regex, I
replaced most remains of direct spans with macros. This cleans up the
code and makes it easier to work with in general, see justification for
the original PR. I also fixed a bunch of broken and/or unclosed spans
here too.
I intentionally avoided replacing spans with multiple classes (in most
cases) and spans in the middle of strings as it would impact readability
(in my opinion at least) and could be done later if required.

## Why It's Good For The Game

Cleaner code, actually using our macros, fixes borked HTML in some
places. See original PR.

## Changelog
Nothing player-facing
2024-09-26 19:36:13 +00:00
GhomandGitHub 5409570e01 Upgrades GODMODE from a flag to a trait. (#86596)
## About The Pull Request
GODMODE has a lot of sources that toggle it. From admin-stuff to status
effects, components, actions and mobs which are supposed to be
invincible. It's better off as a trait than a flag, so we can manage
these sources.

## Why It's Good For The Game
See above.

## Changelog

🆑
admin: godmode is now a datum trait instead of a bitflag. This means the
process for toggling it is a little different now.
/🆑
2024-09-15 13:40:19 +00:00
095f7e3b70 Death of mutant bodyparts AND external organs (#85137)
## About The Pull Request

Removes mutant bodyparts and external organs from the game completely
Digitgrade behaviour was mutant bodypart for no reason

Cat ears now work with the bodyparts overlay system, same as all the
other external organs (since all their behaviour is now just on /organ

It doesn't remove all the /external types, but moves all behaviour to
/organ. I'll follow up with a PR wiping all the /external organ types,
but it's just conflict heaven so not this PR

I've also streamlined a lot of duplicate/weird species regeneration code

Melbert did the same PR as well but due to a lack of time (?) I have
absorbed his PR to double nuke mutant bodyparts

## Why It's Good For The Game
Frees us from the chain of unmodular code, and kills my greatest nemesis
(after the shuttle meteor murder bug)

## Changelog
🆑 Time-Green and MrMelbert
Refactor: External organ behaviour has been moved to /organ, ears now
use the same system as the other organs
Refactor: Mutant bodyparts are dead! This likely does not mean much to
the average person but it's very dear to me
code: Improves digitgrade handling in preference code
/🆑

I have absorbed #85126, using Melberts code to improve and add some
missing changes. Mainly improving the functioning of preferences and
digitgrade legs. I didn't take over the hairstyle improvements.

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-08-20 16:33:34 +02:00
StrangeWeirdKitten 38c3a6336d Merge branch 'master' of https://github.com/skyrat-ss13/skyrat-tg into upstream-7-24/204 2024-07-25 00:08:53 -06:00
norsvenskaandSkyratBot aefec7cb2b Corrects 200+ instances of "it's" where it should've been "its" instead (#85169)
## About The Pull Request

it's - conjunction of "it" and "is"
its - possessive form of "it"

grammar is hard, and there were a lot of places where "it's" was used
where it shouldn't have been. i went and painstakingly searched the
entire repository for these instances, spending a few hours on it. i
completely ignored the changelog archive, and i may have missed some
outliers. most player-facing ones should be corrected, though
## Why It's Good For The Game
proper grammar is good

## Changelog
🆑
spellcheck: Numerous instances of "it's" have been properly replaced
with "its"
/🆑
2024-07-21 15:47:03 -04:00
norsvenskaandGitHub 5f80128fa9 Corrects 200+ instances of "it's" where it should've been "its" instead (#85169)
## About The Pull Request

it's - conjunction of "it" and "is"
its - possessive form of "it"

grammar is hard, and there were a lot of places where "it's" was used
where it shouldn't have been. i went and painstakingly searched the
entire repository for these instances, spending a few hours on it. i
completely ignored the changelog archive, and i may have missed some
outliers. most player-facing ones should be corrected, though
## Why It's Good For The Game
proper grammar is good

## Changelog
🆑
spellcheck: Numerous instances of "it's" have been properly replaced
with "its"
/🆑
2024-07-21 13:41:37 -06:00
Waterpig 00aa495320 Merge branch 'master' of https://github.com/Skyrat-SS13/Skyrat-tg into upstream-24-07a 2024-07-02 23:57:38 +02:00
ca45b92f49 [MIRROR] Brings back breathing nitrium randomly making you burp (#28331)
* Brings back breathing nitrium randomly making you burp (#84175)

## About The Pull Request
Before it got combined into nitrium, breathing nitryl had a chance to
make you burp every time you breathed it in. This PR adds this back to
nitrium.
## Why It's Good For The Game
Drugged up atmos techs constantly burping is the peak of soul how was
this ever removed
## Changelog
🆑
add: Breathing nitrium now has a chance to make you burp.
/🆑

* Brings back breathing nitrium randomly making you burp

---------

Co-authored-by: GoblinBackwards <22856555+GoblinBackwards@users.noreply.github.com>
2024-06-24 09:09:04 +05:30