Commit Graph

301 Commits

Author SHA1 Message Date
SmArtKar ad111f4950 Spacemove refactor - Newtonian physics (#84869)
## About The Pull Request

This PR significantly enhances how zero-g movement works. Its no longer
locked to one of 8 directions, everything now has inertia and is
affected by weight. This means that throwing a piece of wire will no
longer completely reverse your movement direction, and that being thrown
out of mass driver no longer will slow you down to a halt at some point.

This leads to following gameplay changes:
* Guns now accelerate you. Ballistics have higher acceleration than
lasers, and higher calibers have higher acceleration than smaller ones.
This means that firing full-auto weapons in zero-g will make you drift
and accelerate significantly. While this can be a hilarious way to
travel in space, it makes using them trickier.
* Impacting a wall or an object while moving at high speeds will cause
you to violently crash into it as if you were thrown. Careful when
exploring!
* Jetpacks now have inertia. Changes introduced in #84712 have been
mostly reverted, although speed buff has been reduced to 0.3 instead of
0.5 (although this is compensated by new movement mechanics, so overall
speed should be roughly equal). All MODsuit jetpacks now possess the
speed boost. Advanced MODsuit jets (which has also been added back) and
captain's jetpack instead have higher acceleration and stabilization
power, providing much more precise control over your movement.
* Firing guns while moving on a jetpack will partially negate your
pack's acceleration, slowing you down. Non-advanced jetpacks'
stabilization is not enough to compensate for heavy caliber weaponry as
sniper rifles, shotguns or rocket launchers.
* You no longer instantly decelerate upon sliding along a wall. Instead,
it may take a few tiles if you are moving at extreme speeds. Passing
over lattices still allows you to grab onto them!

As space movement is angle-based instead of dir-based now, its much more
smooth than before due to using new movement logic.

Example of jetpack stabilization in action:

https://github.com/tgstation/tgstation/assets/44720187/6761a4fd-b7de-4523-97ea-38144b8aab41

And, of course, you can do this now.

![jetpack_500](https://github.com/tgstation/tgstation/assets/44720187/37b11cd8-2bd1-4640-ae0c-5e0cc505bf52)

**This pull request requires extensive gameplay testing before
merging**, as a large amount of numbers have been picked arbitrarily in
an attempt to keep consistency with previous behavior (guns and
normal-sized items applying 1 drift force, which is equal to what
everything applied before this PR). Jetpacks and impacts may also
require adjustments as to not be frustrating to use.

Closes #85165

## Why It's Good For The Game

Zero-G refactor - currently our zero-g movement is rather ugly and can
be uncomfortable to work with. A piece of cable being able to accelerate
you the same as a duffelbag full of items when thrown makes no sense,
and so does instantly changing directions. Inertia-based version is
smoother and more intuitive. This also makes being thrown into space
more of a hazard (possibly opening the door for explosive
decompressions?)
Jetpack inertia and gun changes - this is mostly a consequence of
inertia-based movement. However, zero-g combat being preferred during
modes like warops was an issue due to it negatively affecting everyone
without jetpacks which are in limited supply onboard. This reverts the
mobility changes which severely impacted space exploration, while making
zero-g combat more dangerous and having it require more skill to be a
viable option.

## What's left

- [x] Refactor moth wings to use jetpack code
- [x] Refactor functional wings to use jetpack code
- [x] Locate and fix a recursion runtime that sometimes occurs upon
splattering against a wall
- [x] Add craftable tethers and modify engineering MOD tethers to use
the same system

## Changelog
🆑
add: You can now craft tether anchors, which can be secured with a
wrench and attached to with right click. They won't let you drift into
space and you can adjust tether length/cut it via lmb/rmb/ctrl click on
the wire.
add: MOD tethers now remotely place and connect to tether anchors
instead of throwing you at where they landed.
balance: MOD tethers can now be used in gravity
balance: Jetpacks are now inertia-based. 
balance: Guns can accelerate you significantly in zero-g.
balance: All jetpacks now give you equal speed buff, however advanced
MOD ion jets and captain's jetpack have higher acceleration/deceleration
values.
refactor: Refactored zero-g movement to be inertia-based and utilize
angles instead of directions.
/🆑
2024-09-26 02:49:54 -07:00
grungussuss 58501dce77 Reorganizes the sound folder (#86726)
## About The Pull Request

<details>

- renamed ai folder to announcer

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

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

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

-- instrumental --

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

-- items --

- moved secdeath to hailer
- moved surgery to handling

-- effects --

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

-- vehicles --

- moved mecha into vehicles


created mobs folder

-- mobs --

- moved creatures folder into mobs
- moved voice into mobs

renamed creatures to non-humanoids
renamed voice to humanoids

-- non-humanoids--

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

-- humanoids --




-- misc --

moved ghostwhisper to misc
moved insane_low_laugh to misc

I give up trying to document this.

</details>

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

- [ ] attributions

## Why It's Good For The Game

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

## Changelog
🆑 grungussuss
refactor: the sound folder in the source code has been reorganized,
please report any oddities with sounds playing or not playing
server: lobby music has been repathed to sound/music/lobby_music
/🆑
2024-09-23 22:24:50 -07:00
SmArtKar c7f547f9f8 Acromegaly no longer makes you bonk your head on airlocks while you're inside of objects (#86121)
## About The Pull Request
Closes #86118

## Changelog
🆑
fix: Acromegaly no longer makes you bonk your head on airlocks while
you're inside of objects
/🆑
2024-09-05 09:31:51 +02:00
Ben10Omintrix 91baa94ac5 event based incapicated and able_to_run (#86031)
## About The Pull Request
this is a revival of #82635 . i got permission from potato to reopen
this, he did almost all the work. i only just solved the conflicts and
fixed all the bugs that were preventing the original from being merged
(but it should be TMed first)

## Why It's Good For The Game
slightly improves the performance of basic mob AI

## Changelog
🆑
LemonInTheDark
refactor: able_to_run and incapacitated have been refactored to be event
based
/🆑

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: ZephyrTFA <matthew@tfaluc.com>
2024-09-04 10:02:49 -04:00
klorpa e1bf793264 Spelling and Grammar Fixes (#86022)
## About The Pull Request
Fixes several errors to spelling, grammar, and punctuation.
## Why It's Good For The Game
## Changelog
🆑
spellcheck: fixed a few typos
/🆑
2024-08-23 21:49:46 +02:00
klorpa d2c7806047 Spelling and Grammar Fixes (#85992)
## About The Pull Request
Fixes several errors to spelling, grammar, and punctuation.
## Why It's Good For The Game
## Changelog
🆑
spellcheck: fixed a few typos
/🆑
2024-08-21 17:07:02 +12:00
MrMelbert 1b19505cc1 Adds a copy of the famous 1995 musical "Space Station 13: The Musical" to contraband of the autodrobe (#85724)
## About The Pull Request

Adds a copy of the famous 1995 musical "Space Station 13: The Musical"
to contraband of the autodrobe

It's a "skillchip" that forces you to sing while implanted and active

(these messages were typed normally)


![image](https://github.com/user-attachments/assets/127a4418-0863-41c1-91ba-adc21438ca9b)


![image](https://github.com/user-attachments/assets/a9da1c4f-1337-4f76-93ac-82922fe153b9)


![image](https://github.com/user-attachments/assets/b5da247a-b8c4-48f9-8a8b-41dcbfc63ca0)

## Why It's Good For The Game

Makes it easier for entertainers to put on their own version of that
historic musical

## Changelog

🆑 Melbert
add: Adds a copy of the famous 1995 musical "Space Station 13: The
Musical" to contraband of the autodrobe
/🆑
2024-08-14 13:27:11 +02:00
MrMelbert 0bb92105aa Monkification Fixes Fixes (#85104)
## About The Pull Request

Fixes #85100 

Roundstart monkeys are monkeys before they're monkeys, whoops.

## Changelog

🆑 Melbert
fix: Fixed roundstart monkeys not having monkified 
fix: Fixed being "de-monkified" while dead making it difficult to
actually de-monkey you going forward
fix: Fixed genetic scanner showing dead mobs as "transforming"
/🆑
2024-07-20 11:03:30 +02:00
MrMelbert 8e56364e98 Monkification fixes (#85064)
## About The Pull Request

- Being monkified / humanified no longer knocks you down
- Fairly certain this was one of the consequences of the stun refactors
of ages past, using `Paralyze` rather than `Stun`.
- Having monkifiaction cured now gives you the cure text
   - Didn't call parent for some reason
- Monkification grant / cure text now has spans
   - Self evident
- Being humanified now tells you what species you are rather than you're
"Human"
   - Just a small tweak
  
## Changelog

🆑 Melbert
fix: When Monkified or Humanified, you are no longer knocked down.
fix: When cured of Monkified, you get the cure text now. 
fix: The text shown when cured / given Monkification now has color. 
fix: Being humanified now tells you what species you become rather than
assuming you are a human.
/🆑
2024-07-19 00:56:38 +02:00
MrMelbert 34f3f479ae Small hulk cleanup / nukes TRAIT_IGNOREDAMAGESLOWDOWN (#85003)
## About The Pull Request

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

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

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

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

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

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

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

## Changelog

🆑 Melbert
fix: Using hulk (and a myriad of similar effects) now properly updates
your movespeed to ignore the damage movespeed penalty
fix: Some things which temporarily make you fly don't make you fly
forever
fix: MODsuit ball module now properly makes you immune to damage
movespeed penalty when in ball form
fix: Adding Hulk via VV dropdown doesn't default to adding the strongest
hulk available (that which is used by the medieval pirates)
/🆑
2024-07-17 01:14:08 +02:00
SmArtKar 978a817283 Adds Ork subtype of hulk mutation with funny speech modifiers (#84883)
## About The Pull Request

Adds a subtype of hulk mutation created by mixing it with clumsy. Makes
the owner's skin olive green and forces a funny speech impediment on
them. Essentially revival of #69473 with some more lines

![изображение](https://github.com/tgstation/tgstation/assets/44720187/2f41dbee-5c54-4f80-bef5-fd8549afbbef)

## Why It's Good For The Game

WARBOYZ NEEDA MOAR DAKKA

funny flavor subtype for hulks which makes them sound even more brain
damaged

## Changelog
🆑
add: A new ork mutation which can be acquired by mixing hulk and clumsy.
/🆑
2024-07-12 23:52:15 +02:00
GPeckman ed8edd5a35 H.A.R.S. no longer disables your skillchips (and also doesn't show you the brain-removal text) (#84841)
## About The Pull Request

So, this one needs some explanation. First, how does H.A.R.S. work code
wise? Well, it's pretty simple:


https://github.com/tgstation/tgstation/blob/7d7a6da73542f9958ab99a502b2d66459e5539f4/code/datums/mutations/body.dm#L611-L613

It removes the victim's brain from their head and then immediately puts
it back into their chest. It also sets that special flag to true. This
is what the docs have to say about that flag:


https://github.com/tgstation/tgstation/blob/7d7a6da73542f9958ab99a502b2d66459e5539f4/code/modules/surgery/organs/organ_movement.dm#L27

So basically, it suppresses the side effects of having the organ
removed. This is why H.A.R.S. doesn't kill you instantly despite
removing your brain. So why does still deactivate skillchips, since
that's also a side effect? Well, that's because brain code doesn't
actually take it into account properly:


https://github.com/tgstation/tgstation/blob/7d7a6da73542f9958ab99a502b2d66459e5539f4/code/modules/mob/living/brain/brain_item.dm#L112-L119

Instead of treating the special flag as "should we prevent side
effects?" It treats it as "should we make this silent?" So I just took
the obvious route and changed that part.

There was also another bug, where you'd be shown this text upon gaining
or losing H.A.R.S.:

> You feel slightly disoriented. That's normal when you're just a brain.

That obviously shouldn't be happening, so I made H.A.R.S. pass
`movement_flags = NO_ID_TRANSFER` as well.

Fixes #84010 
## Why It's Good For The Game

Bugfix. To know why I fixed the bug in this way specifically, see above.
## Changelog
🆑
fix: H.A.R.S. will no longer disable your skillchips or show you text
reserved for total brain removal.
/🆑
2024-07-12 00:23:59 +02:00
SmArtKar 565c548108 Converts common speech modifiers into a component (#84675)
## About The Pull Request

Added a ``/datum/component/speechmod`` component which can be used to
perform basic speech modifications. It use either simple replacements or
regex, add a string at the end of any message (at a chance if required)
and convert speech to uppercase. However, a good chunk of speechmods are
far too niche and specific to be put into a speechmod component and thus
have been left alone.

## Why It's Good For The Game

Cuts down on copypasted code, makes making new speechmods easier.

## Changelog
🆑
refactor: Refactored a lot of speech modifiers to use a component
instead of copied over code.
/🆑
2024-07-08 22:52:45 -06:00
SmArtKar b6c84135c3 Refactors embedding to use datums instead of storing data in bespoke elements (#84599)
## About The Pull Request

This refactors embedding elements to make them use singleton datums
(similarly to armor) instead being bespoke and creating a new element
every time armor values are supposed to be adjusted.
Default values have been removed from defines due to now being declared
in base class itself.
Additionally fixes vending machines and tackling gloves setting
generated shards (which they instantly embed into their victim) embed
properties to null after running the embedding code, despite said shards
having non-null embedding values by default, making them not be able to
embed into anyone else, also potentially breaking the pain/jostling code
if they somehow get updated.

## Why It's Good For The Game

Current embedding system is an unnecessarily complicated mess as bespoke
elements are hard to work with, and creating a new element every time
you change values is hacky at best. This change should make it easier to
read and work with.

## Changelog
🆑
fix: Fixed glass shards generated from falling vending machines or
tackling windows not being able to embed into anyone.
refactor: Refactored embedding code to use datums instead of bespoke
elements and ugly associated lists.
/🆑
2024-07-07 23:20:07 +02:00
carlarctg 880a552d43 Properly fixes Mending Touch (#84569)
## About The Pull Request

fixed MT hurting simplemobs

Fixed the multiplier bug properly (last fix overrode coefficients), 

Improved its wound effects, allowing it to transfer severe and critical
wounds if upgraded.

Allowed it to transfer blood between the patient and doctor as well. It
adds a teensy bit of toxin damage if the blood types are incompatible.

Added balloon alerts on various failure states.

Added an inability to use the mutation if your active arm is inorganic.

Improved the code of the mutation overall, improving and updating the
comments.

## Why It's Good For The Game

> Fixed the multiplier bug properly (last fix overrode coefficients), 

I forgor to draft it... in my defence it hadn't been approved or been up
for 24 hours so I didn't expect a speedmerg.

> Improved its wound effects, allowing it to transfer severe and
critical wounds if upgraded.

Felt lacking that it couldn't transfer severe wounds, or critical ones
if you went the extra mile.

> Allowed it to transfer blood between the patient and doctor as well.
It adds a teensy bit of toxin damage if the blood types are
incompatible.

Blood is an important part of medbay now, it's wack that I didn't gave
it that before. Also the tox thing is funny.

> Added balloon alerts on various failure states.

Player feedback : GOOD

> Added an inability to use the mutation if your active arm is
inorganic.

How are you gonna transfer wounds to you if you have a robot arm?

## Changelog

🆑
fix: fixed MT hurting simplemobs
fix: Fixed the multiplier bug properly (last fix overrode coefficients),
add: Improved its wound effects, allowing it to transfer severe and
critical wounds if upgraded.
add: Allowed it to transfer blood between the patient and doctor as
well. It adds a teensy bit of toxin damage if the blood types are
incompatible.
imageadd: Added balloon alerts on various failure states.
add: Added an inability to use the mutation if your active arm is
inorganic.
code: Improved the code of the mutation overall, improving and updating
the comments.
/🆑
2024-07-07 14:34:11 +02:00
carlarctg 6d13e2ec44 Fixed adaptations not conflictnig (#84642)
## About The Pull Request

Fixed adaptations not conflictnig

## Why It's Good For The Game

Haha whoops

## Changelog

🆑
fix: Fixed temp n space adaptations not conflicting
/🆑
2024-07-05 20:00:38 +02:00
SmArtKar dc203278bc Fixes mending touch for simplemobs (#84523)
## About The Pull Request

Closes #84522
Mending touch should no longer have a reverse effect on simplemobs and
silicons

## Changelog
🆑
fix: Mending touch no longer damages non-humans
/🆑
2024-07-03 23:31:02 +02:00
carlarctg 8e9fc98a93 Fixed various issues with the genetics powers PR (#84515)
## About The Pull Request
https://github.com/tgstation/tgstation/issues/84509
#84557
Removed Trichromatic Larynx per @mothblocks decision that it looks uggo.

Replaced heckacious laryncks' color and size changes with random
bolding, italics, and underlining.

Stoner has been un-locked and replaces TL in the above's recipe.

Fixed elastic arms users being unable to use abstract items like mending
touch or shock touch.

Fixed mending touch being bad

## Why It's Good For The Game

> Removed Trichromatic Larynx per @mothblocks decision that it looks
uggo.

They say it looks ugly and bad. It also works like poop. So away it
goes!

> Replaced heckacious laryncks' color and size changes with random
bolding, italics, and underlining.

Removed color, but replaced with something just as neat.

> Stoner has been un-locked and replaces TL in the above's recipe.

No reason to lock it as far as I know.

> Fixed elastic arms users being unable to use abstract items like
mending touch or shock touch.


Bugge

## Changelog

🆑
del: Removed Trichromatic Larynx per @mothblocks decision that it looks
uggo.
del: Replaced heckacious laryncks' color and size changes with random
bolding, italics, and underlining.
add: Stoner has been un-locked and replaces TL in the above's recipe.
fix: Fixed elastic arms users being unable to use abstract items like
mending touch or shock touch.
fix: Fixed mending touch being bad
/🆑
2024-07-01 18:43:53 -07:00
carlarctg ff836e10be First Genetics Content in 5 Years (Adds new positive mutations!) (#83652)
## About The Pull Request

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

Adds a plethora of new positive mutations to the game!

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

Tripled cryobeam range.

Made the mushroom hallucinogen's code more readable.

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

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

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

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

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

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

## Why It's Good For The Game

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

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

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

Less stupid

> Tripled cryobeam range.

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

> Made the mushroom hallucinogen's code more readable.

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

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

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

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

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

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

## Changelog

🆑
add: Added tons of new mutations to Genetics, alongside some recipes!
add: Thermal Adaptation has been made a combination mutation from the
stronger but narrower Cold and Heat adaptations.
balance: Cryobeams have 9 tile range, and fiery sweat doesn't cause
spread on contact.
image: Added some neat new sprites for the new mutations, and added a
greyscale version of the magic hand sprites.
code: Infinitesmally improved mutation code.
/🆑
2024-06-28 17:52:09 -04:00
necromanceranne d50ac1c067 Fixes the Stimmed mutation instability being defined twice (#84237)
## About The Pull Request

What is says on the tin. This was likely missed during the genetics
rework when instability was defined.

## Why It's Good For The Game

Little accidents happen in a big shake up.
2024-06-24 16:39:52 -05:00
necromanceranne f0c80a0611 Nullblade; nullrod for stabbing people in contrived circumstances to get less than equivalent damage to a normal chaplain (#83848)
## About The Pull Request


![image](https://github.com/tgstation/tgstation/assets/40847847/a66960e4-be49-4ae1-8ee9-832f2c93db86)

Adds the nullblade, a nullrod variant that is a shortsword that deals
1d6 + A strength bonus derived from your attacking arm's lower and upper
melee force divided by 4 (plus any extra values from being sharpened or
enchanted).

But has the potential to do more damage if the target is debilitated in
some way or you attack them from behind. The sneak attack damage is 3d6,
and has a heavy wound chance.

The swingy nature of the damage means most of the time, this null rod is
much weaker than your standard null rod and struggles to even reasonably
compete with the other null rods unless you are orchestrating the
various methods to apply a sneak attack.

<details>
<summary>Overly complicated rules about sneak attacking
within:</summary>
  
You can sneak attack a target if;

- Your target is turned away from you.
- Your target is on the floor.
- Your target is unable to use their hands.
- You are standing in the same tile as your target.
- Your target is blind (sucks to be anyone with that quirk).
- Your target is staggered (from being shoved or recently tackled).
- Your target is confused (from being flashed or hit with a baton).
- Your target is being grabbed aggressively.
- Your target is spinning in place.

You cannot sneak attack a target if;

- Your target is a slime.
- Your target is incorporeal (this doesn't include revealed revenants).
- Your target is a mind reader, and you don't have anti-mind reading
technology fitted to your skull.
- A 50% chance of failure if your target does not need a heart.
- A 50% chance of failure if your target is some kind of Mansus entity,
which have weird anatomy.
- You are fucking blind.

Your sneak attacks are augmented by the following ways;
- +1d6 if your target is unconscious.
- +1d6 if you are Morbid and your target has been dissected.
- +2 if your target has been rebuked by the Eye of God.
- x0.5 if your target has recently been batonned. (This is way too easy
to combo together)
 
</details>

### Misc. stuff

I fixed the shortsword sprite having a misaligned handle to the rest of
the sword

I arranged the nullrod page to place the various subtypes into
categories, and removed some unnecessary subtyping.

Someone named a trait really poorly so I fixed that and also
alphabetized some traits.

## Why It's Good For The Game

I just thought a rogue-ish chaplain would be a neat change of pace to
the various tools of stabbing people to death that they already have. We
have a few chaplains sects that seem appropriate for this, and I enjoy
adding little minigames to our combat mechanics to make them more
engaging than simply stabbing people to death in a very direct fashion.

I had considered replacing one of the null rods that are kind of boring
or lack unique mechanics, but I'll hold off for now.
2024-06-24 16:17:39 -05:00
carlarctg 0119b95d2d Genetics Rebalance: Negative mutations add stability, standarized instability cost for mutations (#83439)
## About The Pull Request

PR has been reworked a bunch! Changes in bold. Some of the **HATE** is
now outdated.

**Negative mutations now allow you to have more positive mutations, via
reducing your instability!**

**All mutations have been overall standardized via defines on their
instability values. Many mediocre positive mutations have had their cost
reduced significantly!**

```
/// Negatives that are virtually harmless and mostly just funny (language)
// Set to 0 because munchkinning via miscommunication = bad
#define NEGATIVE_STABILITY_MINI 0
/// Negatives that are slightly annoying (unused)
#define NEGATIVE_STABILITY_MINOR -20
/// Negatives that present an uncommon or weak, consistent hindrance to gameplay (cough, paranoia)
#define NEGATIVE_STABILITY_MODERATE -30
/// Negatives that present a major consistent hindrance to gameplay (deaf, mute, acid flesh)
#define NEGATIVE_STABILITY_MAJOR -40

/// Positives that provide basically no benefit (glowy)
#define POSITIVE_INSTABILITY_MINI 5
/// Positives that are niche in application or useful in rare circumstances (parlor tricks, geladikinesis, autotomy)
#define POSITIVE_INSTABILITY_MINOR 10
/// Positives that provide a new ability that's roughly par with station equipment (insulated, cryokinesis)
#define POSITIVE_INSTABILITY_MODERATE 25
/// Positives that are unique, very powerful, and noticeably change combat/gameplay (hulk, tk)
#define POSITIVE_INSTABILITY_MAJOR 35

```

Added a new height mutation: Acromegaly! It's the opposite of Dwarfism
and makes you uncannily tall. It also makes you hit your head 8% or 4%
(with synch) of the time you pass through airlocks. Wear a helmet!

**Injectors and activators' duration is now dependent on the
in/stability (absolute value) of the mutations to be injected! With a
minimum of 5-10-15 seconds for each type of injector. Also changed up a
bit how part upgrade cooldowns work, by making each tier reduce
cooldowns by 25-15-10% for each injector type.**

## Why It's Good For The Game


**> Negative mutations now allow you to have more positive mutations,
via reducing your instability!**

Genetics has been long in dire need of a rework. This isn't really one,
but it IS intended to increase genetics depth a bit and stave off its
stagnation, making it slightly more interesting than 'free shit', by
making it so **you can now gain more positive mutations, but you need to
figure out what you're going to take as a downgrade in turn.**

Genetic powers are heavily themed around comic book superheroes, and you
know what those had a lot? Debilitating drawbacks to their powers. Let's
replicate that.

**I intend to make a sister PR for this that adds more interesting
positive mutations (for the first time in decades) to genetics, so
there's an actual element of pick-and-choose involved**

> Added a new height mutation: Acromegaly! It's the opposite of Dwarfism
and makes you uncannily tall. It also makes you hit your head 8% or 4%
(with synch) of the time you pass through airlocks. Wear a helmet!

We have Super Tall. Let's add it to the game somewhere! With a fun
downside, of course.

**Gigantism is now a recipe mutation, mix Acromegaly with Strength to
get it.**

> **Injectors and activators' duration is now dependent on the
in/stability (absolute value) of the mutations to be injected! With a
minimum of 5-10-15 seconds for each type of injector. Also changed up a
bit how part upgrade cooldowns work, by making each tier reduce
cooldowns by 25-15-10% for each injector type.**

**Made no sense that a Glowy injector cost the same as a Hulk injector.
Just annoying. The cooldown is based on the absolute value, so a -30
instability injector would take ~30 seconds. This mostly so that
geneticists can't make a million modded syringe gun supersyringes**
2024-06-18 04:39:04 +00:00
Kaostico c2e1ab080c Transcendent Olfaction fix: Pesky closets (#83993)
## About The Pull Request

Change to using the more robust get_turf method to get locations, as all
pinpointers currently do.

## Why It's Good For The Game

The transcendent olfaction mutation is currently broken. When the target
is inside a container, its x y z becomes zero, so it will always say the
target is below you when comparing your z level to it, and it won't even
point in the right direction. This PR fixes that.

## Changelog

🆑
fix: Transcendent Olfaction mutation now works properly
/🆑
2024-06-17 22:44:50 +02:00
Jacquerel 4339c0ba49 Mutadone restores your original monkey status (#83720)
## About The Pull Request

Before PR:
Giving mutadone to a monkey turns it into a human
Giving mutadone to a human does nothing about its human status

After PR:
Giving mutadone to a monkey created from a monkey cube does nothing
about its monkey status
Giving mutadone to a monkey which was originally a human restores it to
being a human
Giving mutadone to a human who has never been a monkey does nothing
about its human status
Giving mutadone to a human who was originally a monkey returns it to
being a monkey

I couldn't think of any better way to achieve this than putting a trait
on the monkey typepath but if anyone has one, I'd love to hear it
(actually, maybe I could just typecheck the mob... but that seems
equally gross)

## Why It's Good For The Game

Treating "being a monkey" as a mutation makes sense from the perspective
of the DNA console but not from the perspective of certain other game
mechanics.
A chemical which "removes all mutations" should _intuitively_ restore
people to the state they were in at the start of the round (so monkeys
turned into humans should return to monkey, and vice versa) rather than
unilaterally enact rapid evolution upon monkeys.
At least, I don't _think_ it's meant to be a lore implication that all
test apes on the station are transformed humans...

This has a couple of side effects, both of which I think are desirable.

Firstly- some mechanics work on humans but not monkeys (see #83698), and
can be circumvented by spraying mutadone gas into a monkey pen. This
will now only be achievable by individually mutating each monkey, which
requires more effort for whatever your desired result is.
Secondly- this adds a downside to the common "cure-all" surgical method
of turning a monkey into a human and transplanting a brain into it. This
new body will still genetically remember being a monkey, adding some
element of risk to this otherwise undramatic means of curing basically
any ailment in the game.
Thirdly- Some people have admitted to using mutadoned monkeys to create
a large number of humans to kill for Heretic and Changeling progression,
which I also don't want them to do, so making this take longer is a
positive.

## Changelog

🆑
balance: Mutadone restores your originally monkey status, rather than
always turning monkeys into humans
/🆑
2024-06-06 11:13:38 +12:00
uaioy b5fa92d691 Adds Medieval Pirates (and small assault_pod change) (#82392)
## About The Pull Request

(short, slightly outdated video compilation of the pirates)
https://youtu.be/j9BNFzcUSjc

Adds the **MEDIEVAL WARMONGERS** pirate gang, these pirates are focused
on causing chaos directly on the station with the use of melee weaponry
and swarming tactics.
they are not very smart when it comes to using technology, so they crash
in the station in an attempt to dock.

the pirates spawn with the NOGUN trait as they have never used guns
before but have access to dashing and the unbreakable component(small
heal burst upon reaching crit).
Warlord spawns with a better version of hulk(isnt removed upon crit and
can still do stuff while critted) and gigantism mutation by default
because ~~Chad Maximus~~ the other pirates require someone to run to
when stuff like flashbangs, batons or lasers are present. The warlord
spawns with a boarding axe which is a better axe that is good at
destroying things and a meat hook. **there's a total of 5 pirates.**

the pirate shuttle has:
- thermite barrel and 3 large beakers
- single weak claymore
- 3 extra military spears
- 3 kite shields
- 3 heavy bolas
- 4 regular bolas
- a stack of wood
- 2 stacks of mourning poultice (15 uses each)
- one burn medkit

**shuttle was made by striders18, big thanks to him**

![image](https://github.com/tgstation/tgstation/assets/114047053/766d0b96-4487-47d3-b524-70d811ce4d73)


things added:

- the new pirate gang
- a gamberson jumpsuit
- crude armor (good melee and wound protection but lacks on the rest)
- warlord armor (extreme protection at the cost of slowdown)
- a shortsword(bootleg claymore with 30 block chance and goes on belt
instead of back)
- military spear (better at throwing, better wounding, deals blunt
wounds instead of sharp)
- axe with better damage and demolition mod for the warlord
- a var to specify the name of the landing zone destination for the
assaultpod
- an assault pod targeting device item for the medieval shuttle
- a thermite barrel
- kite shields
- new hulk variant that doesnt go away when crit and has tenacity
## Why It's Good For The Game
I always liked the chaotic nature of the russian bounty hunters that
would come from their extra numbers and lack of tools. i thought
something of a similar idea on pirates would be good, a very direct and
scary militia rushing in with sword and faith would create some awesome
scenarios

## Changelog
🆑
add: New heavy weight pirates, medieval warmongers
add: Adds military spear, shortsword, boarding axe, kite shields
add: Adds warlord and crude armor
add: Adds medieval shuttle (made by striders18)
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2024-04-22 21:16:06 -07:00
necromanceranne ca2ff33292 Rocky DLXIII: Fitness to Athletics, Athletics skill influences Boxing against Boxers, Boxing overhaul, Evil Boxing (#82611)
## About The Pull Request

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

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

Reaching Legendary rewards you with the Golden Gloves.

### Boxing Overhaul

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

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

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

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

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

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

### Evil Boxing (Admin Only)

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

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

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

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

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

## Why It's Good For The Game

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

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

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

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

## Changelog
🆑
add: Replaces Fitness with Athletics; same skill, but now more
specifically applicable to boxing.
add: Athletics does not increase sprite size.
balance: Overhauls Boxing to add a lot more depth to the interactions.
Only applicable to other boxers, however. You can still punch the snot
out of non-boxers though. But only up to stamcrit or unconsciousness. No
hitting someone who can't fight back!
balance: Adds Evil Boxing, which is the evil and fucked up version of
boxing that you kill people with and are allowed to flout the sacred
rules of boxing as you please. Everyone is a victim!
/🆑
2024-04-22 16:43:58 +01:00
NeonNik2245 931d1f7286 Adds anosmia quirk (#82206)
## About The Pull Request

Adds anosmia quirk. Anosmia, also known as smell blindness, is the loss
of the ability to detect one or more smells.

I tried to find all smells action and (most likely) update all of them,
unfortunately I can't change descriptions for this quirk.

## Why It's Good For The Game

Some characters will be able to not feel smells
That affect:
* Gases feelings and alerts (CO2, Plasma, miasm) - you don't feel them
* Bakery and cooking
* Changeling ability to feel other changelings by smell
* Some unimportant spans
2024-04-09 03:21:51 -05:00
Jeremiah 9723b4b317 Replaces even more deciseconds with SECONDS (#82438)
## About The Pull Request
Using these search regexes:

Ending in 0:
`addtimer\((.*),\s?(\d{1,3})0\b\)`
replacement:
`addtimer($1, $2 SECONDS)`

Two digit ending in odd:
`addtimer\((.*), (\d)([1-9])\)$`
replacement:
`addtimer($1, $2.$3 SECONDS)`

Single digit ending odd:
`addtimer\((.*), ([1-9])\)$`
replacement:
`addtimer($1, 0.$2 SECONDS)`

## Why It's Good For The Game
Code readability

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2024-04-06 15:18:49 -06:00
Bilbo367 1ace94c7bb Aheal no longer turns monkies in to humans (#82393)
## About The Pull Request

Also changes the Make Monkey Admin button to turn you into a monkey with
mutations instead of just creating a new being.
Closes: https://github.com/tgstation/tgstation/issues/80744
Mabye Closes: https://github.com/tgstation/tgstation/issues/81722

## Changelog

🆑
fix: aheal no longer turns monkies into humans
qol: Player panel "make monkey" turns humans into monkeys through
mutation instead of making a new mob
/🆑
2024-04-02 21:45:33 -06:00
Pickle-Coding c1f11f26ce Converts arbitrary energy units to the joule. Fixes conservation of energy issues relating to charging cells. (#81579)
## About The Pull Request
Removes all arbitrary energy and power units in the codebase. Everything
is replaced with the joule and watt, with 1 = 1 joule, or 1 watt if you
are going to multiply by time. This is a visible change, where all
arbitrary energy units you see in the game will get proper prefixed
units of energy.

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

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

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

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

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

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

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

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

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

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

---------

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

Refactors a lot of the unused defines.

## Why It's Good For The Game

Refactors a lot of the unused defines.

## Changelog
Nothing player facing

---------

Co-authored-by: san7890 <the@san7890.com>
2024-03-22 21:29:35 -06:00
LemonInTheDark ef714c1c34 Overlay Lighting Color/Intensity Pass (#81425)
## About The Pull Request

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

Medium intensity, not colored at all, cringe.

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

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

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

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

## Why It's Good For The Game

Lighting should be impactful, subtle and colorful

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


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

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

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

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

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

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

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

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

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

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

</details>

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


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

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

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

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

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

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

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

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

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

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

</details>

## Changelog
🆑
add: Tweaked the saturation, color and intensity of a bunch of lights
/🆑
2024-03-09 23:57:19 +00:00
Singul0 855b447c7e Rebalances and adds more ambush-style cling abilities, buffs chameleon skin and adds a new ability! "Darkness Adaptation" (#81373)
## About The Pull Request
This PR adds a new ambush ability to changelings, "Darkness Adaptation"
and tweaks the balance of "Chameleon Skin".

The new cling ability, "Darkness Adaptation". makes your character
translucent and slightly dark while also giving the ability to see
slightly better into dark than normally (30% better). While this ability
is active, flash protection is lowered by one.

Buffs "Chameleon Skin" by reducing the DNA cost to 1 from 2, and sped up
the time it takes to go full invisible by 2.5x and zero instability cost

Below is the picture of the translucency through normal non-night-vision
vision: (note: this is using extremely dark armor already)

![gambar](https://github.com/tgstation/tgstation/assets/127663818/1f708705-abfc-48e8-a5a2-08a2cb985935)

Below is the picture of the translucency through the poor night-vision
that the ability gives you:

![gambar](https://github.com/tgstation/tgstation/assets/127663818/500169e3-7048-46aa-b33f-0b6d55373886)
## Why It's Good For The Game
This ability was added in #11148 back in 2015 and hasn't been touched
for 9 years. The original ability just gave you the _extremely_
situational "chameleon skin" mutation (one that is accessible to the
crew through genetics already). for a whopping **2 mutation points**
cost. The mutation makes you invisible after half a minute or so of
standing still and is immediately broken the second you move or get
pushed.

Compared to other similarly costed powers you get for 2 mutation points,
this is by far the worst bang for your buck by a large margin.

Needless to say, considering with how power-crept everything else in the
game is after all these years. this ability that hasn't been touched for
ages have fell into disuse to the point of uselessness, especially with
the heavy cost it that came with it.

This PR buffs that ability by making it cheaper, in line with the cost
of other less powerful abilities that clings have. and made it 2.5x
faster to turn invisible.

The PR also adds another ambush-oriented ability, "Darkness adaptation".
The ability allows your character to become translucent and slightly
dark while also giving the ability to see slightly better into dark than
normally (30% better); with the downside of your eyes being slightly
worse than before.

This ability follows the general spirit of clings, an stealth-generalist
oriented antag that you never know when they would strike (disguises
already have this effect, but them being far more able to jump you in
maint even more so.). and encourages more creative strategy than just
your average murderbone.

A Perfect force multiplier for maint combat and maint ambushes. Also
synergises well with augmented sight, and the blackish cling armor.

Don't worry if you think the new ability, combined with the faster cham
skin would make you invisible to the naked eye. The mutation cancels out
the translucency of the adaptation.
## Changelog
🆑
add: Adds a new changeling ability, "Darkness Adaptation". Making you
more translucent, especially in darkness and allowing you to see
slightly better in the dark
balance: The changeling power "Chameleon Skin" has been buffed, Reduces
the cost to 1 and sped up the time it takes to turn invisible
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-03-03 00:40:22 +00:00
Time-Green a87932c704 Fixes hars nullspacing da brain (#80400)
Fixes #80399 

This was still old organ code, I updated gain but not loss.

🆑
fix: Fixes losing HARS nullspacing your brain
/🆑
2023-12-17 17:31:53 +01:00
Bloop 3a1496bb18 [NO GBP] Fixes a mistake with mutation cleanup (#80242)
## About The Pull Request

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

`on_lose()` tends to call the parent first, where the `qdel(src)` was
happening. The issue with that: it returns from the parent call, and now
due to being qdeled the `owner` is set to `null`. Certain mutations try
to access owner to do various things post-removal, cue the runtimes...

---

I just moved the mutation qdeletion out of the proc and into
`force_lose()` instead. There are only two other places where
`on_lose()` gets called, one of which is for unstable mutations and it
already immediately qdels the mutation afterwards.

The other is when hulks get put into crit. I added a qdel to the latter.
This should ensure that mutations always get deleted after removal (but
without breaking anything this time).

Also renamed some abbreviated vars.

Fixes https://github.com/Skyrat-SS13/Skyrat-tg/issues/25543

## Why It's Good For The Game

Fixes a bug that I accidentally introduced.

## Changelog

🆑
fix: fixes a bug which was causing certain mutations to only get
partially removed
/🆑
2023-12-14 17:20:45 +01:00
Time-Green 54ab1e3936 Organ movement refactor *Un-nullspaces your organs* (#79687)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

closes #53931, #70916, #53931

## About The Pull Request

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

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

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

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

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


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

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

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

## Why It's Good For The Game

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

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

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

## Changelog

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

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

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
2023-12-09 17:50:46 +00:00
YesterdaysPromise 71a1fee2f1 Explodes device.dmi (#80025)
## About The Pull Request

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


## Why It's Good For The Game

The device.dmi was kind of a mess.

## Changelog

🆑
/🆑
2023-12-09 13:31:50 +01:00
Bloop 3294d7bb2d Makes mutations clean up after themselves (#80107)
## About The Pull Request

They weren't doing this before. This was an issue because they hold refs
to a `mob/living/carbon/owner` as well as a `datum/dna`, making it a
potential source of hard dels.

As far as I can tell, I do not see this causing any issues as
`remove_mutation(mutation)` takes a type path as an arg rather than a
reference, same thing with `get_mutation(mutation)`. I couldn't find any
examples of a reference to a mutation being reused by anything after
being removed.

---

When I was investigating potential reasons for why it might have been
like this I found more problem code. Timed dna injectors were setting
`target` to the return value of `add_mutation()`/`remove_mutation()`
which is a bool. This made no sense and would cause runtimes as well as
mislead people into thinking that the return value of those procs was a
`mob/living/carbon`.

## Why It's Good For The Game

Fixes an oversight, and headache further down the line.

## Changelog

🆑
fix: fixed mutations holding onto refs after removal
fix: fixes timed dna injectors
/🆑
2023-12-06 19:59:32 -07:00
Y0SH1M4S73R 376781879c Different pen types have unique behavior when used in foam darts. (#79587)
## About The Pull Request

This PR makes the following changes:
- Refactors inserting items into foam darts into a component on items
that can be inserted into darts
- Adds the aforementioned component to pens
- Provides an inspection tip for how to modify a foam dart
- Gives different pen types specific behavior when used in a foam dart

Pens typically give a foam dart 5 brute and 50% embed chance (affected
by falloff). The following types of pens give the specified properties
(usually directly derived from the pen's stats and additional
functions):
- Red pen (and four-color pen set to red): Slightly faster dart
- Captain's fountain pen: Slightly faster dart, and 75% base embed
chance
- Sleepypen: Tries to inject its reagents into the hit mob, but doesn't
penetrate thick clothing like syringe guns do
- Energy Dagger: 35 brute, 100% base embed chance, and slightly faster
dart
- Survival Pen: Mines rocks on impact
- Fine Tip Pen (if someone somehow manages to get one): 100 bare wound
bonus and 9000 demolition modifier

## Why It's Good For The Game

Expands the emergent gameplay possibilities of using pens in foam darts.

While there are balance risks involved with traitors being able to buy
the equivalent of reusable 45u syringe shots and 35 brute bullets, you
are not likely to get your pen back once it hits its target, unless you
somehow have the recall spell and have bound the pen to it. There are
probably more TC-efficient ways to achieve comparable projectile
weaponry, but foam dart guns have an air of subtlety to them... at least
until your skin is pierced by a pointy writing implement that may also
be something more deadly. If maintainers still have balance concerns,
please let me know.

## Changelog

🆑
add: Certain types of pens now function like you expect they would when
inserted into a foam dart
qol: Examining a foam dart closely will show you how to modify it, or
what it is modified with
/🆑
2023-11-21 20:34:41 -05:00
YesterdaysPromise f4535255c0 Nukes radio.dmi, adds inhands for somewhat relevant items. (#79792)
## About The Pull Request

Third /icon/ cleansing splinter 1. Comments on commits say all it does
pretty much.


![image](https://github.com/tgstation/tgstation/assets/122572637/6540e588-bed8-4e98-81f5-2a6f449c53c3)


## Why It's Good For The Game

Inhand for walkietalkie was requested in the project, gets rid of some
usecases of old 'gangtool', headset splitoff requested by Fazzie.
Inhands reflecting the items they are supposed to represent is nice.

## Changelog

🆑
image: Following now have unique item sprites: syndicate war declaration
radio, curator and chief beacon's, chaplain beacon.
image: Following now have unique inhand sprites: radio, export scanner,
walkie-talkie, syndicate war declaration radio, curator and chief
beacon's, chaplain beacon.
/🆑
2023-11-20 14:22:07 +01:00
Bloop f77d9a7270 Fixes a race condition in mutations code (#79829)
## About The Pull Request

One of the timers has a callback to the `modify()` proc which also
doesn't check whether the mutation owner has been deleted since the
timer began, potentially resulting in a runtime.


![image](https://github.com/tgstation/tgstation/assets/13398309/1e41c48b-2620-4473-9278-702d490871cc)

## Why It's Good For The Game

Fixes bugs

## Changelog

🆑
fix: fixed a race condition with mutations
/🆑
2023-11-19 18:08:59 +01:00
SyncIt21 130b3dfa64 Code compression for reagent holder. Lowers plumbing reaction chamber tick usage (#79686)
## About The Pull Request
More code improvements for reagent holder. As you can see it removes a
lot more code than it adds so code savings are significant. This does
not touch on any floating point arithmetic, all that is behind us, this
focuses on removing redundant procs and merging existing procs to
achieve the same functionality so if you do see any changes in reagent
related behaviour it's not intentional and should be reported as a bug
here.

The following code changes can be summarized into points.

**1. Removes procs `get_master_reagent_id()` &
`get_master_reagent_name()`**
Both of these procs have the exact same functionality as
`get_master_reagent()` with the only exception of returning a different
value. Instead we can just call `get_master_reagent()` directly and
infer the name & type of it ourselves rather than creating a wrapper
proc to do it for us, therefore reducing overall code

**2. Removes & Merges `remove_all_type()` proc into `remove_reagent()`**
The proc `remove_all_type()` is highly inefficient, it first uses a for
loop to look for the reagent to remove & then it again calls
`remove_reagent()` on the reagent once it has found it. We can just
embed this functionality directly into `remove_reagent()` by simply
adding an additional parameter `include_subtypes`. This way the
operation is faster, and we reduce the code to get the job done. Also
now `remove_reagent()` will return the total volume of reagents removed
rather that a simple TRUE/FALSE

**3. Removes & Merges `trans_id_to()` proc into `trans_to()`**
Both these procs have the same job of transferring either a single
reagent or all reagents. `trans_id_to()` is a scaled down version of
`trans_to()` because
- It does not have any `method` var. This means if you want to transfer
a single reagent to a mob/organ or any other object it does not have the
functionality to expose the target to that transferred reagent.
- It does not have a `multiplier` var to scale reagent volumes
- It does not have code to deal with organs or stop reactions i.e. it
does not have the `no_react` var.

We can overcome all these short comings by simply adding an extra var
`target_id` to specify what specific reagent to transfer therefore
attaining the same functionality while keeping the benefits of
`trans_to()` proc therefore reducing overall code

**4. Lowers plumbing reaction chamber tick usage for balancing ph.**
Rather than invoking a while loop to balance ph it's much easier for the
player to simply make the reaction chamber wait for e.g. add a reagent
that will never come. This will make the chamber wait therefore giving
the reaction chamber ample time to correctly balance the ph and then
remove that reagent from the list therefore getting correct ph levels.
No need to create code hacks when the player can do it themselves  so
the while loop has been removed

## Changelog
🆑
code: removed redundant procs `get_master_reagent_id()` &
`get_master_reagent_name()`
code: merged `remove_all_type()` proc with `remove_reagent()` now this
proc can perform both functions. `remove_reagent()` now returns the
total volume of reagents removed rather than a simple TRUE/FALSE.
code: merged `trans_id_to()` proc with `trans_to()` now this proc can
perform both functions
refactor: plumbing reaction chamber will now use only a single tick to
balance ph of a solution making it less efficient but more faster. Just
make the reaction chamber wait for longer periods of time to accurately
balance ph
refactor: reagent holder code has been condensed. Report any bugs on
GitHub
/🆑
2023-11-16 21:44:48 +01:00
Pickle-Coding 15e2aa056d [NO GBP]Fixes tesla zaps. (#79398)
## About The Pull Request
Closes #79297 
Closes #79312 

Due to the new cutoff parameter being added to tesla_zap() (from
#78310), and most callers used positional arguments instead of keywords,
the zap flags was getting fed the shocked_targets list and maybe other
junk. This caused a bunch of unusual phenomena. This is fixed by using
keyword arguments.

Tesla zaps that use the grid were significantly weaker in terms of
damage than they're supposed to be. This was a byproduct of trying to
convert everything to joules and removing unnecessary power multipliers.
This is fixed by reverting the damage scaling and zap power of zap
sources that aren't based on grid. Technically this will cause the zaps
from other sources to have less power, but these tend to not be able to
put power on grid, so this wouldn't have any change other than what a
grounding rod displays. Doesn't really matter.

Logs machine explosions from zap_act. Not the most helpful log (would
take a lot of effort to add an extra parameter to pass the source), but
better than nothing.

Probably other stuff I did, lol.
## Why It's Good For The Game
Stops zap fuckery. Admins can now find the explosions when a 9GeV engine
decides to go haywire or whatever.
## Changelog
🆑
fix: Fixes tesla zaps being weird.
admin: Logs explosions from explosive zaps.
/🆑
2023-10-31 17:10:15 +00:00
MrMelbert dcedf89c70 Fixes being able to punch yourself (#79033)
## About The Pull Request

Fixes #79031 

Fixes #79042

I forgot some logic here when making the human override. 
Not the cleanest way to do it but it'll suffice. 

## Changelog

🆑 Melbert
fix: You can punch yourself again
/🆑
2023-10-17 13:02:07 -06:00
MrMelbert 9664d24c13 Refactors UnarmedAttack so we don't have like 4 Unarmed Attack signals, kills two more snowflake species procs (#78991)
## About The Pull Request

- Deletes `spec_unarmedattack`
- Deletes `spec_unarmedattacked`
- Replaces `COMSIG_HUMAN_EARLY_UNARMED_ATTACK` with
`COMSIG_LIVING_EARLY_UNARMED_ATTACK`
- Replaces uses of `COMSIG_HUMAN_MELEE_UNARMED_ATTACK` with
`COMSIG_LIVING_EARLY_UNARMED_ATTACK`
- Fixes(?)(I've never seen this work) / Elementizes Monkey ability to
bite while handcuffed
- Monkey clever `attack paw` / `attack hand` thing is now handled the
same on the human level (via `resolve_unarmed_attack`)

## Why It's Good For The Game

Atomized from swing branch. I was really annoyed with these two signals,
this kinda unifies the behavior between living and human mobs (they were
already quite similar).

One thing of note is that this will make dis-coordinated humans use
`attack_paw` rather than `attack_hand`, so they'll bite people instead
of punching them. I'm not sure if this is what we want, if we wanna
tweak that before then I can by all means.

## Changelog

🆑 Melbert
refactor: Refactored unarmed attacking mechanisms, this means
dis-coordinated humans will now bite people like monkeys (like how
coordinated monkeys punch people like humans?)
refactor: Dis-coordinated humans smashing up machines now use their
hands, rather than their paws
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-10-15 22:25:19 -06:00
John Willard 58d929461d Fixes an issue w/ antiglow. (#78865)
## About The Pull Request

Antiglow's ``glow`` var used to be how strong it would glow, but it was
renamed to ``glow_power`` when
``/obj/effect/dummy/lighting_obj/moblight`` got added to it, which took
its previous name of ``glow``. Antiglow was never updated for this, so
they set the moblight as -1.5, which is supposed to be its strength.

I also removed some unused defines dw about that

## Why It's Good For The Game

Fixes an unintentional change that maybe breaks something idk.

## Changelog

🆑
fix: Antiglow now probably has negative glow power.
/🆑
2023-10-10 16:38:44 +02:00
Tim d6f79f4427 Refactor gib code to use bitflags and have documentation (#78754)
## About The Pull Request
This takes all the gib related procs:
- `gib()`
- `spawn_gibs()` 
- `spill_organs()`
- `spread_bodyparts()`

And adds heavy documentation that communicates what the procs are used
for and how the different bitflags affect them. The difference is
noticeable:

`gib(TRUE, FALSE, FALSE, null)` vs `gib(DROP_ORGANS|DROP_BODYPARTS)`

The code is now much more legible which is important considering it's
used in a lot of places!

Another robust change, is that we had several places in the code where
there were double negatives like so:

```
/mob/living/carbon/spill_organs(no_brain, no_organs, no_bodyparts)
	if(!no_bodyparts) // DOUBLE NEGATIVES ARE BAD M'KAY?!?
		// do stuff here
```

This is a mindfuck to untangle. I inverted a lot of these parts so we
don't lose our sanity.

Last thing that was changed was a big `if()` loop in the `spill_organ()`
proc. This was refactored to just be a simple `for` loop with `continue`
statements where we needed to skip enabled bitflags. It's now shorter
and cleaner than before.

The only slight gameplay change this affects is that gibbing a mob now
guarantees to drop all items unless the `DROP_ITEMS` bitflag is
deliberately omitted. Some places like admin gib self, we don't want
this to happen.

## Why It's Good For The Game
Gib code is very old. (~15 years) People kept adding more arguments to
the procs when it should have been a bitflag initially. By doing it this
way, there is more flexibility and readability when it comes to adding
new code in the future.

## Changelog
🆑
refactor: Refactor gib code to be more robust.
qol: Gibbing a mob will result in all items being dropped instead of
getting deleted. There are a few exceptions (like admin gib self) where
this will not take place.
/🆑
2023-10-06 13:12:22 +01:00
MrMelbert 9e1c71f794 Reworks transformation sting to be temporarily in living mobs, forever in dead mobs (#78502)
## About The Pull Request

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

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

- Organizes some trait lists alphabetically

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

## Why It's Good For The Game

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

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

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

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

## Changelog

🆑 Melbert
balance: Transformation sting now lasts 8 minutes, down from permanent.
However, the effect is paused for dead and stasis mobs, making it
permanent SO LONG AS they stay dead or in stasis. The effect is also
permanent if used on a monkey.
balance: Transformation sting now costs 33 chemicals, down from 50. 
balance: Transformation sting now costs 2 dna points, down from 3. 
fix: Transformation sting works on monkeys again.
refactor: Refactored a bit of human randomization. 
/🆑
2023-09-28 13:47:39 -06:00
Jacquerel f861532d24 Basic Legion & Hivelord (#78624) 2023-09-27 18:41:07 -04:00
Pickle-Coding 64cbbdbf2c [NO GBP]Zap strength is now measured in joules. NT CIMs will now display the power transmission from the zaps, accounting for every factor. (#78310)
## About The Pull Request
Zap strength is now measured in joules. Scales everything to account for
this.

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

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


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

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

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