Commit Graph

456 Commits

Author SHA1 Message Date
BlueMemesauce a698aa2fd5 Simple and basic mobs can breath pluoxium (#76694)
## About The Pull Request

Fixes #76661

Also adds new PLUOXIUM_PROPORTION define, this is set to 8 which is
currently how better pluoxium is at metabolism compared to oxygen
## Why It's Good For The Game

Since pluoxium is 8 times as effective as oxygen, mobs only need 0.625
mol of it compared to 5 mol of oxygen. This is a very small amount,
maybe it should just be the same as oxygen?
Also pluoxium and oxygen are counted together, so you could have a mix
of 0.5 mol of pluoxium and 1 mol of oxygen for example.
## Changelog
🆑
fix:Mobs can breathe pluoxium
/🆑
Define not player-facing
2023-07-10 12:33:31 -06:00
Ghom f5bfff758d [NO GBP] Fixes the venomous element for projectiles, invisible arrows and something off with envenomable casings. (#76565)
## About The Pull Request
See #76551. The on hit effect component was treating the `hit_limb` arg
of the projectile on_hit signals as if it were a bodypart item rather
than a string. This wasn't my fault.
Also, invisible arrows because I forgot to set up their definition of
update_icon_state() and base icon state var.
Lastly, the envenomable casing registering a signal on the wrong atom,
and the arrow bullet subtype being defined twice.

## Why It's Good For The Game
This will close #76551.

## Changelog

🆑
fix: Fixes venomous projectiles for real, and invisible arrow sprites.
/🆑
2023-07-10 13:00:01 +01:00
ChungusGamer666 ca401b57a7 Bargain bin organ quirks: Prosthetic organ and Tin Man (#76498)
## About The Pull Request

Basically, the organ equivalents of prosthetic limb and quadruple
amputee.
These replace your organs with absolutely terrible cybernetic
counterparts which also have absolutely no resistance against EMPs.

![image](https://github.com/tgstation/tgstation/assets/82850673/1e4a4abc-8871-41fc-b2f7-a2e626f1fdfb)

### ADDITIONAL FUN
Surplus organs are so awful that if surgically removed while not EMPed
nor failing, they *explode*!

## Why It's Good For The Game

More character customization, and more suffering for hardcore random
players.

## Changelog

🆑
add: Added two new quirks, prosthetic organ and tin man. Essentially,
they replace organs with bad bad not good cybernetic counterparts.
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com>
2023-07-08 00:31:43 +01:00
Ghom d4cdd6b63e Replaces lava and chasm's "safeties" and ignoring turf slowdown on catwalks with traits and a new element. (#76376)
## About The Pull Request
This adds a new element for movables that grants turfs they're in
traits, changes lava and the chasm component to check for traits
instead, ditto for turf slowdown. It also implements another trait that
prevents wet floor from slipping people, as well as some other changes
(feel free to opine on them really):
- Tables and conveyor belts now stop turf slowdown, much like catwalks,
as I imagine people walking on them are not really touching the floor.
(I'd include protection against lava too... until they melt, but that'd
mean finding a way to have these objects burn in the first place, and
lava code is still stupid despite a years old refactor I did)
- Tables also stop slippery turfs from slipping (bananas, soaps etc.
still apply). I wish there were a way to make some objects slippery by
coating them in water vapor or splashing water/lube, but that's outside
the scope of this PR.
- Fixed an edge case in which a mob standing on a lava turf would be
left permanently visually on fire if the lava is changed to another kind
of turf.
- Removed unused code from stone tiles.

I'm going to include these traits in that global list for admin-added
traits... tomorrow perhaps. 💤

## Why It's Good For The Game
Replacing some hard-coded mechanics with easier to use traits and an
element, which I also need for the submerge element PR.

## Changelog

🆑
refactor: Replaced hardcoded "safeties" for lava, chasms and ignoring
turf slowdowns on catwalks with traits.
balance: much like catwalks, tables and conveyors also disable turf
slowdowns.
balance: slippery turfs won't slip you when walking on a table.
fix: Fixed an edge case in which a mob standing on a lava turf would be
left visually but permanently on fire if the lava is changed to another
kind of turf.
/🆑
2023-07-07 10:04:33 +01:00
ChungusGamer666 4f2227baf3 Implements a macro for checking mind traits (#76548)
## About The Pull Request


![image](https://github.com/tgstation/tgstation/assets/82850673/f85d0556-1806-40bf-92b8-597e46ccb4af)
Seeing this pattern repeated over various sections of code was starting
to piss me off

## Why It's Good For The Game

Lessens chance to cause errors with mind traits, ensures consistent
behavior, makes it easier to change how mind traits work if necessary.

## Changelog

hopefully not player facing

---------

Co-authored-by: san7890 <the@san7890.com>
2023-07-06 11:45:46 -06:00
Jacquerel 48cc57010d Various spider fixes (#76528)
## About The Pull Request

Fixes #76484
Then I noticed some weird stuff which slipped through the PR and poked
at that too.

- Spiderlings and Spiders once more have names ending in (###)
- Removed an unused property on Spiderlings.
- Rewrote the descriptions for a bunch of web-abilities and web-objects
to be clearer and have better capitalisation.
- Refactored the "Web Carcass" ability to not extend from "lay web" as
it didn't need to perform most of that behaviour.
- Also I renamed it and made the description give you a hint about why
you would want to instantly spawn a statue.
- The web effigy now despawns at the same rate as the ability cools down
so you're not dumping spider statues all over the place.
- I made spiderlings move at about the same speed as humans except if
they're on webs in which case they're still pretty fast.

To be honest I am not certain an instant statue spawning button is great
to begin with and I didn't even know it was added to the game but I am
not interested in messing much with the balance for now.

This made me look at spiderlings enough that I'm going to try and make a
new sprite for them that isn't awful.

## Why It's Good For The Game

Lets you differentiate individual spiders a little bit.
Makes usage of abilities clearer.

## Changelog

🆑
balance: Guard spider web statues despawn as the ability comes back off
cooldown.
balance: Spiderlings now only move at light speed if they're on webs,
stay safe little guys.
fix: Spiders once again have random numbers after their names.
/🆑
2023-07-05 19:26:45 -06:00
Ghom 55e00665f3 Walking on conveyors, catwalks and tables no longer plays the footstep sound of the turf, and have theirs. (#76391)
## About The Pull Request
Adds a footstep_override element to the game, that allows object to do
what it reads on the tin.
Only conveyor belts, catwalks and tables use it for now.

## Why It's Good For The Game
Consistency. If you're walking on a table or catwalk, the sound of shoes
trudging on snow or lava shouldn't be played. Tested.

## Changelog

🆑
sound: Walking on conveyors, catwalks and tables no longer plays the
footstep sound of the turf. They have theirs.
/🆑
2023-07-04 22:38:08 +01:00
MrMelbert 7f3d763285 Adds Roach Infusion to the DNA infuser (#76393)
## About The Pull Request

- Adds Roach Infusion to the DNA infuser. 
   - Bonuses include:
- All infused organs are 2x as healthy, notably your heart: Meaning
getting revived after being dead a while is easier
- When being attacked from behind or while lying down, take 50% less
damage from brute attacks
      - Lose disgust 32x faster, making it a non-issue
      - Higher toxin purge threshold (5 units, up from 3)
      - Virus resistance (same as spaceacillin)
      - 100 innate bomb armor, preventing explosions from gibbing you
      - 90 innate bio armor
- Immunity to appendicitis, radiation, and to being gibbed by nuclear
bombs
   - Downsides include:
      - Knockdowns are 3x as long
      - get 3x as hungry
      - Ingest reagents to your stomach 1.5x slower
      - Take 2x as much damage from toxins
- Toxins over the purge threshold deal 4x more liver damage (effectively
2x, as the liver has 2x health)
      - Becoming a bug
      - Roaches are gross

- Adds a way to kill roaches without having them splat. If they are
sprayed with bug spray, they will simply fall over, and can be scooped
up.


https://github.com/tgstation/tgstation/assets/51863163/5078c493-9e28-42cb-ae51-45fa25b67a34

## Why It's Good For The Game

More content for the DNA infuser, which benefits greatly from variety. 

While initially it may seem like a lot of bonuses, a lot of them are
very niche, with the exception being the brute resilience which is the
big "actually useful" bonus you gain.

The infusion is intended to be given to Engineers, offering innate
Radiation immunity to allow them to work on the Supermatter without
needing a rad suit. Likewise, if the work goes south and the Supermatter
goes boom, their body will more than likely survive the blast.

## Changelog

🆑 Melbert
add: Adds the Roach infusion to the DNA infuser. Do you want to survive
a nuclear apocalypse? Visit genetics today.
add: Adds a way to kill Roaches without splatting them. Visit botany for
a spray bottle of pestkiller.
qol: Infuser book is more book-like
fix: DNA infuser correctly gives on-success feedback messages
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-07-02 03:44:03 +01:00
Ghom b82567ebd3 AddComponent() now throws a crash message when the comp type arg is not a component. (#76221)
## About The Pull Request
HEY! Did you know that the AddComponent() proc can complete without
throwing errors when the component type argument is actually not a type
or instance of a component? Me neither (until now), but I've recently
discovered that while working on #76219 (Make sure to merge that one
first).

Also adds early return checks to the AddElement and RemoveElement procs.

## Why It's Good For The Game
Silent bugs are awful.

## Changelog
N/A
2023-07-01 19:21:07 +01:00
Ghom 0f4be6d9b5 Adds an element for noisy movement (wheelchairs, office chairs, trashcarts etc. etc.) (#76378)
## About The Pull Request
Converts generic, copypasted behavior into an element.

## Why It's Good For The Game
I'd rather not have someone just copypaste the old thing, since there're
a few more things to take into account now than just whether the item
has gravity, and if that ever has to change, we will only have to modify
one line than several.

## Changelog

🆑
fix: Fixed the office chair being silent. My bad.
/🆑
2023-07-01 15:30:09 +01:00
Ghom 6b007f758b Replaces ammo_casing/caseless and bullet/reusable with elements. (#76335)
The reusable and caseless types only purposes are the behaviors of
deleting the casing when fired and spawning a new object when the
projectile ultimately reaches its maximum range or hits a target, both
of which are easily "elementizable". Also, I don't like those barely
filled sub-folders in the projectile module, and the fact we've
divergent reusable and single use arrow types.
2023-06-28 01:14:59 +00:00
MrMelbert dc88203f0b Fix Too Slowing people with high fives (#76277)
## About The Pull Request

At some point with the refactors to offering it was made so that
dropping the item stops the offer, unfortunately too slowing people with
high fives relied on this behavior (dropping not stopping the offer).

Restores that behavior with a bit more code tweaking. 

## Why It's Good For The Game

How can I be too slow?

## Changelog

🆑 Melbert
fix: You can once again "too slow" someone with a high five
/🆑
2023-06-26 22:13:22 -06:00
Ghom 1436b3f63a Fixes the envenomable casing element and arrows. (#76219)
## About The Pull Request
Both the element and the object were trying to add an element as a
component, which to my amusement, just silently fails without throwing
any runtime, crash or stack trace (stuff for another PR, I suppose).

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

## Changelog

🆑
fix: arrows can now be actually coated with reagents.
/🆑
2023-06-24 11:52:59 +02:00
Rhials 1f44eb9c5e Fixes a runtime when attacking non-carbon mobs with a cuffsnapper (#76190)
## About The Pull Request

The cuffsnapper component now checks to make sure the target is a carbon
before running the rest of the cuffsnapping process on them.

target.handcuffed is checked (handcuffed is defined on carbon), but
nowhere is it actually asserted that the target is a carbon, so a
runtime would occur when attacking non-carbon mobs.
## Why It's Good For The Game

This runtime fix was brought to you by https://runtimes.moth.fans
## Changelog
🆑
fix: attacking non-carbon mobs with a cuffsnapping object will no longer
runtime.
/🆑
2023-06-21 15:07:47 -04:00
Ghom 85b72e4b30 The honorbound trauma now makes use of the relay_attackers element. (#75908)
## About The Pull Request
Whoever made the relay_attackers element, thank you for streamlining the
bucketload of signals that had to be registered for everything that
counted as an attack. It's very much needed.

Beside, I only had to add a few flags to be sent by the
ATOM_WAS_ATTACKED signal, so that stamina and shoving doesn't
automatically make the attacker guilty.

Oh, one more thing I have forgot to mention. Currently medical staff is
immune to "guilt" altogether, while the comments suggest they should be
affected by declaration but not attacking. This PR also covers that
issue.

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

## Changelog

🆑
fix: Fixed the honourbound trauma not reacting to attacks from basic
mobs
fix: Fixed the "Declare Evil" spell not working against the medical
department.
/🆑
2023-06-21 06:01:09 -07:00
carlarctg 3dac29f828 Fixes and adds an element for TC reimbursement. (#75816)
## About The Pull Request

Fixed being unable to reimburse syndicate spawners via uplinks. This
includes nukie reinforcements, cyborgs, and holoparasite injectors.

Turned TC reimbursement into a bespoke element.

Tuned demon's blood message when there's no ghosts to pick to be a
little more understandable and sensible.

## Why It's Good For The Game

> Fixed being unable to reimburse syndicate spawners via uplinks. This
includes nukie reinforcements, cyborgs, and holoparasite injectors.

This bug was, to my knowledge, introduced with bubby traitors when
uplinks were turned into components, as the code no longer supported it
due to what I presume to be an oversight, since there's plenty of
references to it ingame still.

> Turned TC reimbursement into a bespoke element.

Seemed like the best way of doing this. Since for some godforsaken
reason attackby() is one-way only (no attackto() ), the uplink component
sends a signal to any item hit with it instead.

## Changelog

🆑
fix: Fixed being unable to reimburse syndicate spawners via uplinks.
This includes nukie reinforcements, cyborgs, and holoparasite injectors.
refactor: Turned TC reimbursement into a bespoke element.
spellcheck: Tuned demon's blood message when there's no ghosts to pick
to be a little more understandable and sensible.
/🆑
2023-06-20 16:51:52 +01:00
Couls c0e46fabf7 Standardize Welder Fuel Usage (#76021)
Remove welder fuel usage from all actions except attacking and leaving
it on
most welder tasks require a minimum of 1u of fuel, some longer tasks
require a minimum of 2 or 3u welders now drain 1u every 5 seconds
they're active
## About The Pull Request
Prior to this PR welder fuel usage was random, a lot of tasks didn't use
any welder fuel and welders were basically near infinite so long as you
didn't use them for combat, it took 26 seconds of activity to drain 1u
of fuel, that means an emergency welder alone could run for 5 minutes
straight before needing a refuel

After this PR all welders will drain 1u every 5 seconds instead of every
26 seconds, but welding objects won't require extra fuel anymore, making
the fuel usage much more consistent.

resolves #55018
## Why It's Good For The Game
Actually makes fuel tanks useful and relevant without making it
obnoxious to do repetitive quick tasks like turn rods into plates,
there's actually a reason to upgrade off the emergency welder now since
it lasts 50 seconds rather than 5 minutes
## Changelog
🆑
qol: Welders now have a more consistent fuel usage
/🆑
2023-06-19 23:01:10 -07:00
ChungusGamer666 ce2a1185ad Renames COMSIG_ITEM_ATTACK_OBJ to COMSIG_ITEM_ATTACK_ATOM (#76112)
## About The Pull Request
 
For some reason this was missed when moving attack_obj() to /atom level.

## Why It's Good For The Game

It peeves me that this signal is misnamed
2023-06-18 18:48:01 +08:00
ChungusGamer666 f85ffb6f49 Fixes a possible dupe bug with looming (#76059)
## About The Pull Request

Title.
Adds a second amount check to once the do_after() is done to prevent a
possible epic dupe minecraft pay to win server lag machine server crash
glitch.

## Why It's Good For The Game

Bugs are bad

## Changelog

🆑
fix: You can no longer make extra cloth when looming cotton by spamming
do afters.
/🆑
2023-06-16 15:17:06 +02:00
carlarctg ee4aaebc5f Assistants get a liver trait + Officer's sabre banes against them (#75933)
## About The Pull Request

Assistants get a new liver trait, maintenance metabolism. This trait
only lets them process maintenance drugs, grey bull, and pump-up for 20%
more time and gives them a probably-positive 2 minute moodlet when
ingesting these.

The officer's sabre has gained a small amount of bloodthrist for
assistants!

Fixed liver masters being unable to inspect the liver of scientists.

## Why It's Good For The Game

> Assistants get a new liver trait, maintenance metabolism. This trait
only lets them process maintenance drugs, grey bull, and pump-up for 20%
more time and gives them a probably-positive 2 minute moodlet when
ingesting these.

This trait is pretty much entirely here for the actual
liver-identification of assistants the sabre uses, though I didn't want
to just add an empty trait so I gave it the above effects as pretty damn
harmless effects. I'm sure the maints will dislike even this so I'm open
to anything.

> The officer's sabre has gained a small amount of bloodthirst for
assistants! Or at least their livers.

I find the concept of the sabre having a bane against assistants
amusing, and it wouldn't hurt to give them something that may help
against tiders. As a smidgen of fairness, the detection is tied to the
liver - if they want to take less damage they can have it replaced,
though the captain can also help with that by disemboweling organs. The
liver being used for something that isn't reagents processing might be a
bit controversial, but like I said, I'd rather have that than have it
permanently, intrinsically tied to a job.

> Fixed liver masters being unable to inspect the liver of scientists.

Ballmer metabolism quacks like a duck, traits like a duck, and thus
should be able to be duck inspected by the duck master, since there is
no practical difference between it and other 'official' metabolisms.

## Changelog

🆑
add: Assistants get a new liver trait, maintenance metabolism. This
trait only lets them process maintenance drugs, grey bull, and pump-up
for 20% more time and gives them a probably-positive 2 minute moodlet
when ingesting these.
add: The officer's sabre has gained a small amount of bloodthrist for
assistants!
fix: Fixed liver masters being unable to inspect the liver of
scientists.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-06-10 20:17:30 -04:00
LemonInTheDark ae5a4f955d Pulls apart the vestiges of components still hanging onto signals (#75914)
## About The Pull Request

Signals were initially only usable with component listeners, which while
no longer the case has lead to outdated documentation, names, and a
similar location in code.

This pr pulls the two apart. Partially because mso thinks we should, but
also because they really aren't directly linked anymore, and having them
in this midstate just confuses people.

[Renames comp_lookup to listen_lookup, since that's what it
does](https://github.com/tgstation/tgstation/commit/102b79694fa8eb57ecf7b36032616a9e368ccced)

[Moves signal procs over to their own
file](https://github.com/tgstation/tgstation/commit/33d07d01fd336726b4f6f6f1b61bb0b3f11a00dc)

[Renames the PREQDELETING and QDELETING comsigs to drop the parent bit
since they can hook to more then just comps
now](https://github.com/tgstation/tgstation/commit/335ea4ad081ec63c42cfa05856e582cca833af6e)

[Does something similar to the attackby comsigs (PARENT ->
ATOM)](https://github.com/tgstation/tgstation/commit/210e57051df63f88dac3dd83321236da825aae5e)

[And finally passes over the examine
signals](https://github.com/tgstation/tgstation/commit/65917658fb8a1e7d28ae23c9437a583d646f0302)

## Why It's Good For The Game

Code makes more sense, things are better teased apart, s just good imo

## Changelog
🆑
refactor: Pulled apart the last vestiges of names/docs directly linking
signals to components
/🆑
2023-06-09 06:14:31 +00:00
Ghom 7bc5e03ae5 Late adjustments to my previous move_loop PR. [NO GBP] (#75778)
## About The Pull Request
Lemon guy was a bit too late in reviewing #75732 because it got already
merged by someone else, and I too hadn't managed to make some adjustment
to that PR in time.

This PR applies suggested changes, turns a simple proc into a macro, and
makes it so that also waddling, squeaky shoes and swivel chair sounds
don't running when moved by conveyor belt.

This doesn't stop squeaking from happening when other
conveyor-belt-moved objects or mobs cross its tile. That'd be hacky and
I'm not here to fight sfx-spamming machines.

## Why It's Good For The Game
These are changes that should have been included in #75732 but couldn't.
See that PR for the general idea.

## Changelog

🆑
fix: waddling, squeaky shoes and swivel chair sound effects no longer
run when moved by conveyor belt.
/🆑

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2023-06-08 17:41:28 -07:00
LemonInTheDark daf55e611c Cleans up/renames as private some internal var definitions, removes some fucked uses of internal list vars (#75769)
## About The Pull Request

[Improves the documentation of DCS lists, removes old list of callback
docs that no longer
apply](https://github.com/tgstation/tgstation/commit/c3821d9f5ffaeaa4772f927c819da0c1de0ca27c)

[Adds a second signal register to decal rotating, adds a trait to
objects under a tile. STOP DIRECTLY READING HIDDEN LISTS I SWEAR TO
GOD](https://github.com/tgstation/tgstation/commit/6b3f97a76a6f7d24ab952739a1561633922994e1)

[Removes direct reads of the timer list, they were redundant
mostly](https://github.com/tgstation/tgstation/commit/14fcd9f8a6d1b2d42ec6df3493ebc76fe7c12032)

[Please stop directly reading/modifying the traits list to ensure your
dna rot follows the
brain](https://github.com/tgstation/tgstation/commit/ec0e5237ec2b7c3b7806cb993670acc8ce388bdc)

[Marks internal datum lists as well internal with
_](https://github.com/tgstation/tgstation/pull/75769/commits/57c6577ff61629b8ea792ee37ec4f2490a8e2865)

[57c6577](https://github.com/tgstation/tgstation/pull/75769/commits/57c6577ff61629b8ea792ee37ec4f2490a8e2865)

Does the same to _clear_signal_refs() in hopes of keeping people from
touching it

## Why It's Good For The Game

They pissed me off.

Users should not be touching these lists, especially in ways that make
assumptions about their structure and are thus prone to breaking if that
ever changes.
Most of these are close to zero cost changes, using a wrapper to solve
the problem, or just yeeting it

Two aren't, Decals with a direction have gained a second signal register
on init, and things that sit underfloor (cables/pipes) now get a trait
when inserted there.

This should have a minimal impact on memory/init time, bugging
@Mothblocks about it just in case
2023-06-05 22:25:09 -06:00
Pickle-Coding e54136194c block_explosives remove remnants when detached. (#75794)
Removes the explosive resistance remnants on the turf(s) if
blocks_explosives gets detached.
## About The Pull Request
Closes #75793

Also this is an untested webedit.
## Why It's Good For The Game
hhhhhhhhhhhhhhhhh
## Changelog
🆑
fix: Fix movable explosive blockers leaving remnants of explosive
protection on turfs after they get destroyed.
/🆑
2023-06-05 04:13:40 -07:00
Ghom 88b898dffd Stops shields getting broken by pillows and disablers. (#75759)
## About The Pull Request
See the title. Doing so by adding a new arg for damage type to
`check_shields()` and `hit_reaction()`. The other way would had involved
a couple istype checks for item or projectile damage type, but this is a
longer term solution and can tackle more than just that.

## Why It's Good For The Game
Fixes #74876.

## Changelog

🆑
fix: Stops shields getting broken by pillows and disablers.
/🆑
2023-06-01 16:26:10 -04:00
Ghom e1344a5ddc Being moved around by conveyor belt or tram no longer plays footsteps and wheelchair sounds. (#75732)
## About The Pull Request
More or less a triviality, currently footstep/wheelchai sounds are
played even when the mob is moved by a conveyor belt, or riding the
tram. This PR puts an end to that.

To clarify, this doesn't stop these sounds from being played if you're
walking/running/rolling along or against a belt, or inside the tram.

But more than that, I made this PR because, afaik, we don't have a good
way to tell if a given movement proc chain was caused by a move loop or
not, and I need one for something I'm working on. This is more of an
implementation and reason for this PR to be made.

Tested, no issue. Waiting for a review, specially from @LemonInTheDark,
since they're the mind behind the movement loop code. Hopefully I'm
right saying what I said.

## Why It's Good For The Game
This fixes a consistency issue (if it can be called such) and the lack
of a simple way to tell if a movable is being moved by a move loop
outside of its own code.

## Changelog

🆑
fix: Being moved around by conveyor belt or tram no longer play
footsteps and wheelchair sounds.
/🆑
2023-05-31 14:29:44 -04:00
FlufflesTheDog 76f5bb063e Prevent abstract items from being put onto others (#75739)
## About The Pull Request
Items with the abstract flag are stopped from being given to others
using the strip UI. This cleans up some general weirdness with being
able to put hand items like kiss or slap into people's hands just to see
them immediately vanish and cause a harddel.


https://github.com/tgstation/tgstation/assets/25628932/2f27a4d6-64f1-4e26-a5b5-219805f57875

Though perhaps a bit less subtle, this fixes a silly and somewhat
terrifying bug, that allows a body to be rapidly thrown without being
picked up or grabbed, or tableslammed through z-levels.


https://github.com/tgstation/tgstation/assets/25628932/0cd587ac-12dc-4ea3-9bf2-fc29603b1cda
## Why It's Good For The Game
Bugs bad, doesn't really make sense for abstract items to be physical
enough to placed into someone's hand or pocket.
We all know what the assistants will do with this
## Changelog
🆑
fix: Abstract items can no longer be placed in others' hands.
/🆑
2023-05-31 14:27:09 -04:00
carlarctg 285c7acf24 Refactors snipping cuffs into a bespoke cuffsnapping element (#75432)
Refactors snipping cuffs into a bespoke cuffsnapping element, adding
support for delayed cuffsnipping. Adds this element to box cutters!
Effectively speaking everything is the same as usual.

It's cool, it's based and elementized and modularized and not
hardcodeized on the jaws of life anymore. Plus it could be used in the
future for things (it won't)
2023-05-25 17:57:50 +00:00
John Willard e38882179f Fixes mind traits (Curator, Miner, Clown) (#75593)
## About The Pull Request

Tower of Babel (Curator), Naive (Clown), and Storm detector (Shaft
Miner), are all traits that are given to your mind upon taking these
jobs.
However, we have been checking the body for these traits, not the mind.
This meant that Shaft miners werent alerted of ice storms, Clowns didnt
have their unique examine text, and Curators were affected by Tower of
Babel.
This fixes all those issues.

Naive and Tower of Babel realistically should only be on the mind, so I
changed all instances to check the mind. Storm detection is something
you can get through analyzers, so I left it as a check for both your
body and mind traits.

Clown's Naive:

![image](https://github.com/tgstation/tgstation/assets/53777086/30e92026-5d1d-44a5-9969-206df99c5e8f)

Tower of Babel:

![image](https://github.com/tgstation/tgstation/assets/53777086/b1d41f9d-e020-495c-89de-0d4e2c953442)

## Why It's Good For The Game

Fixes several bugs for 3 jobs all at once. I don't see any issue reports
on any of these, but they existed.

## Changelog

🆑
fix: Shaft Miners are now alerted of Icemoon storms, Clowns are naive,
and Curators are immune to the Tower of Babel again.
/🆑
2023-05-23 16:53:51 -06:00
SyncIt21 fe9012d935 Adds general helper proc for processing atmos based on it's turf air contents (#75144)
## About The Pull Request
Fixes this
![Screenshot
(186)](https://user-images.githubusercontent.com/110812394/235907166-7c62503a-994b-4b5d-a3ae-ca61326fc5b4.png)

Caused by this

https://github.com/tgstation/tgstation/blob/c8982bfb1cd103539d0be86689f40a023dbb7f22/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm#L305

Scrubbers will now call ` atmos_conditions_changed()` which starts
processing based on the turf air contents which indirectly calls
`should_atmos_process()` with the correct values. The same helper has
been applied to the atmos sensitive component as well and other places

## Changelog
🆑
fix: runtime when turning scrubber's on via  the air alarm UI
refactor: `atmos_conditions_changed()` now starts atmos processing based
on it's turf air contents
/🆑
2023-05-16 05:03:09 -07:00
Paxilmaniac 3921d53132 Makes shattering on throw impact an ELEMENT, anything made primarily of the glass material datum will shatter when thrown (#75303)
## About The Pull Request

I thought, "Hey it'd be neat if glass stuff shattered when thrown
around, wouldn't it?" And thus, shattering became a component. Though it
only applies to any subtype of object, its still more than enough for my
purposes. Plates will still shatter as normal before, but if for any
reason a glass toolbox, or glass statue block, anything glass you get
the idea, is thrown? Shards everywhere. Oh no, our table, its broken.
## Why It's Good For The Game

Something shattering on impact from being thrown or dropped a zlevel is
hilarious, and it'd be even funnier to be able to extend this behavior
to other objects as well. Finally we can relive every comedy movie ever
where some construction workers drop a comically large glass object on
someone from two floors up.
2023-05-13 16:33:17 -05:00
ShizCalev d927f28951 Makes update_icon_updates_onmob more robust (#75324)
Safeguards against #74965 happening in the future.

Noticed a bunch of these were using ITEM_SLOT_HANDS. This is incorrect,
as the element already automatically updates held items. grep'd it to
catch future instances.

Likewise, a number of objects weren't passing slot_flags to the element,
meaning it wasn't actually updating those things properly when they were
being worn. I've simplified this so now the element will automatically
update all slot_flags, and passing an additional slot to the element
when being added is only needed for additional slots that might need to
be updated. This also means if slot_flags change, the element will now
update correctly as well.

🆑 ShizCalev
code: The update_icon_updates_onmob element will now automatically
update all slots in an item's slot_flags var. This does fix multiple
things that weren't updating properly. Passing a slot to the element is
now only necessary if you want to add additional slots to be updated.
/🆑
2023-05-10 18:36:01 -06:00
SyncIt21 2068ea9ab5 Crate, Closet Refactors & Access Secured Stuff (#74754)
## About The Pull Request
This PR is actually 2 parts, one that fixes runtimes with crates & the
other that allows secured closets to be crafted
along with a secured suit storage unit

**Crate Fixes**

Fixes #74708

The problem starts here

https://github.com/tgstation/tgstation/blob/f1178342084bf89897a46f6ce9dc849233bed21b/code/game/objects/structures/crates_lockers/crates.dm#L31-L34
Not only does this if condition look ugly but it's highly error prone
because one single call to `update_appearance()` can cause this to fail,
and sure enough if you look at the parent `Initialize()` proc it calls
just that

https://github.com/tgstation/tgstation/blob/f1178342084bf89897a46f6ce9dc849233bed21b/code/game/objects/structures/crates_lockers/closets.dm#L81-L88
Since we know the appearance is guaranteed to be changed in some way
before the if condition gets executed let's check what the final state
of the crate would be before this if check

https://github.com/tgstation/tgstation/blob/f1178342084bf89897a46f6ce9dc849233bed21b/code/game/objects/structures/crates_lockers/crates.dm#L54-L56
We see that the final icon state depends on the variable `opened` so if
we want to place/spawn a crate that is opened at round start we have to
ensure that `opened = TRUE` so the `if(icon_state ==
"[initial(icon_state)]open")` succeeds and does its job correctly.
Sadly we did dum shit like this
```
/obj/structure/closet/crate{
	icon_state = "crateopen"
}
```
throughout the entire code base, we thought backwards and were only
concerned in making the closet look open rather than setting its correct
variables to actually say that it is opened. because none of these
crates actually set `opened = TRUE` the final icon state becomes just
"crate" NOT "crateopen" therefore the if condition fails and we add the
component

https://github.com/tgstation/tgstation/blob/f1178342084bf89897a46f6ce9dc849233bed21b/code/game/objects/structures/crates_lockers/crates.dm#L36-L37
with the wrong parameters, so when closing the closet after_close()
removes the component with the wrong arguments

https://github.com/tgstation/tgstation/blob/f1178342084bf89897a46f6ce9dc849233bed21b/code/game/objects/structures/crates_lockers/crates.dm#L81-L84
that is does not unregister the signals and readds the component i.e.
re-registers the signals causing runtime.

The solution just do this
```
/obj/structure/closet/crate/open[mapping helper]
```
To clearly state that you want the closet to be open, that way you don't
have to memorize the icon_state for each different type of crate, it's
consistent across all crates & you don't get runtimes.

And that's exactly what i did everywhere

Another issue that is fixed is "Houdini crates" i.e. crates which are
open & appear empty but when you close & reopen them magical loot
appears, Go ahead walk upto to cargo and find any empty crate that is
open and do this

Fixes #69779


https://user-images.githubusercontent.com/110812394/232234489-0193acde-22c8-4c19-af89-e897f3c23d53.mp4

You will be surprised, This is seriously harmful to players because they
can just walk by a crate that appears to be open & empty only to realize
later that it had some awesome loot. Just mean

The reason this happens is because of the Late Initialization inside
closets

https://github.com/tgstation/tgstation/blob/f1178342084bf89897a46f6ce9dc849233bed21b/code/game/objects/structures/crates_lockers/closets.dm#L85-L86

What late initialization does is suck up all stuff on its turf

https://github.com/tgstation/tgstation/blob/f1178342084bf89897a46f6ce9dc849233bed21b/code/game/objects/structures/crates_lockers/closets.dm#L97-L100

In theory this is supposed to work perfectly, if the closet is closed
move everything on the turf into the closet and so when the player opens
it, they all pop back out.
But what happens if the closet is opened before ` LateInitialize()` is
called? This breaking behaviour is caused by object spawners

https://github.com/tgstation/tgstation/blob/f1178342084bf89897a46f6ce9dc849233bed21b/code/game/objects/effects/spawners/random/structure.dm#L94-L100
And maint crates

https://github.com/tgstation/tgstation/blob/f1178342084bf89897a46f6ce9dc849233bed21b/code/game/objects/structures/crates_lockers/crates.dm#L141-L143
These 2 spawners open up the crate based on random probability before `
LateInitialize()` is called on the crate and so what happens is the
crate is first opened and then stuff on the turf is sucked in causing an
open but empty crate to appear.

The solution is simple just check again in ` LateInitialize()` if our
crate is still closed before we proceed.That's fixed now too

**Code Refactors**
1. Introduced 2 new signals COMSIG_CLOSET_PRE/POST CLOSE which are the
counter parts for the open signals. hook into them if you ever need to
do stuff before & after closing the closet while return BLOCK_CLOSE for
COMSIG_CLOSET_PRE_CLOSE if you want to block closing the closet for some
reason
2. 2 new procs `before_open()` & `before_close()` which are the counter
parts for `after_open()` & `after_close()`. If you need to write checks
and do actions before opening the closet or before closing the closet
override these procs & not the `open()` & `close()` procs directly

**Secured Craftables** 
This is just a reopened version of #74115 after i accidently merged
another branch without resolving the conflicts first so i'll just
repaste everything here, since crates & closets are related might as
well do all in one

1. **Access secured closets**
   
   - **What about them?**
          **1. Existing System**
If you wanted to create a access secured closet with the existing system
its an 4 step process
            - First construct a normal closet
            - Weld it shut so you can install the airlock electronics
            - Install the electronics [4 seconds]
            - Unweld
This is a 4 step process which takes time & requires a welding tool
         **2. New system**
Combine the 4 steps into 1 by crafting the secure closet directly
                    
![Screenshot
(184)](https://user-images.githubusercontent.com/110812394/235904926-c2ea231c-eba7-45d0-a5af-e0456fdd40bc.png)

    - **Bonus Features**
              **1. Card reader**
The card reader acts as an interface between the airlock electronics &
the player. Usually if you want to change access on a locker you have to
                  - Weld the closet shut
                  - Screw driver out the electronics
                  - Change the settings
                  - Install it back
                  - Unweld
With a card reader there is no need of a welder & screwdriver. You can
change the access of the locker while its operational

        **How do i install the card reader?**
             1. Weld the closet shut
             3. Insert card reader with hand
4. To remove the card reader use crowbar or just deconstruct the whole
closet with a welding tool
             5. Unweld closet

         **How to change its access?**
This will overwrite the settings on your airlock electronics. To do this
1. make sure the closet is first unlocked. This is important so that no
random person who doesn't have access to the closet can change its
access while its locked. It would be like giving the privilege of
changing your current password without first confirming if you know the
old password
2. attack/swipe the closet with your PDA. Make sure your ID card is
inside the PDA for this to work. You can also just use your ID card
directly without a PDA
         3. You will get 3 options to decide the new access levels
           
![Screenshot
(174)](https://user-images.githubusercontent.com/110812394/233454364-d99a2fb6-9f26-4db3-9fac-a10689955484.png)


        They work as follows
- **Personal**: As the name implies only you can access this locker and
no one else. Make sure to have your ID on you at all times cause if you
loose it then no one can open it
- **Departmental**: This copies the access levels of your ID and will
allow people having those exact same access levels. Say you want to
create a closet accessible to only miners. Then have an miner choose
this option and now only miners can open this closet. If the Hop sets
custom access on your ID then only people with those specific access
levels can open this closet
         - **None**: No access, free for all just like a normal closet

**Security:** After you have set the access level it is important to
lock the access panel with a "multi-tool", so no one else can change it.
Unlock the panel again with the "multi-tool" to set the new access type

       **2. Give your own name & description**
To rename the closet or change its description you must first make the
closet access type as personel i.e. make it yours, then use an pen to
complete the job. You cannot change names of departmental or no access
closets because that's vandelism

       **3. Custom Paint Job**
    Use airlock painter. Not intuitive but does the job. 
   
![Screenshot
(181)](https://user-images.githubusercontent.com/110812394/234202905-00946b88-2513-489d-b0a2-d618a72f3e49.png)

      **4. Personal closets**
Round start personal closets can have their access overridden by a new
ID when in it's unlocked state. This is useful if the last person has no
use for the closet & someone else wants to use it.


    - **Why its good for the game?**      
1. Having your own personal closet with your own name & description
gives you more privacy & security for your belongings so people don't
steal your stuff. Personal access is more secure because it requires you
to have the physical ID card you used to set this access and not an ID
which has the same access levels as your previous ID
2. Make secure closets faster without an welding tool & screw driver
3. Bug fix where electronics could be screwed out from round start
secured closets countless times spawning a new airlock electronic each
time
      
2. **Access secured freezers**

    - **What about them?**
The craftable freezer from #73942 has been modified to support secure
access. These can be deconstructed with welders just as before

![Screenshot
(185)](https://user-images.githubusercontent.com/110812394/235905000-ba165feb-4384-4759-b46b-dba77c9e6ba3.png)


    - **How does it work?**
The access stuff works exactly the same as secure closets described
above. You can rename & change description with pen just like the above
described secure closets. No paint job for this. Install card reader
with the same steps described above.

    - **Why it's good for the game?**
1. Make access secured freezers faster without a welder and screwdriver
2. Your own personally named & locked freezer for storing dead bodies is
always a good thing

4. **Access secured suit storage unit**
   - **What about them?**
Suit storage units now require airlock electronics for construction. The
access levels you set on it will be used to decide
       1. If a player can unlock the unit
       2. If the player can open the unit after unlocking
       3. If the player can disinfect whatever is inside
       
      By default all round start suit storage units have free access

   - **Install card reader**
Provides the same functionality as secured closets described above. To
install it
     1. Open its panel with a screw driver
     2. Add a card reader to it with hand
     3. Close the panel
     
     When you deconstruct the machine the card reader pops back out

   - **Why it's good for the game?**
1. Having your own access protected and named suit storage unit so
random people don't steal your mod suits? Who wouldn't want that.?
Provides security for department storage units.
2. If you have the unit locked then you cannot deconstruct the machine
with a crowbar providing additional security
3. Fixes #70552 , random people can't open/unlock the suit storage unit
without access. You can set personal access to make sure only you can
access the unit

## Changelog
🆑
add: Access secured closets. Personal closets can have their access
overwritten by an new id in it's unlocked state
add: Access secured freezers.
add: Access secured suit storage units.
fix: Suit storage unit not having access restrictions.
fix: airlock electronics not properly getting removed after screwing
them out from round start lockers
fix: round spawned open crates run timing when closed
fix: open crates hiding stuff in plain sight
fix: open closets/crates sucking up contents during late initialize
causing them appear empty & open
/🆑

---------

Co-authored-by: Tim <timothymtorres@gmail.com>
2023-05-08 10:42:54 -07:00
John Willard 1674f25725 New Medical job: The Coroner (#75065)
## About The Pull Request

HackMD: https://hackmd.io/RE9uRwSYSjCch17-OQ4pjQ?view

Feedback link: https://tgstation13.org/phpBB/viewtopic.php?f=10&t=33972

Adds a Coroner job to the game, they work in the Medical department and
have their office in the Morgue.
I was inspired to make this after I had played my first round on
Paradise and messed around in there. The analyzer is copied from there
(https://github.com/ParadiseSS13/Paradise/pull/20957), and their
jumpsuit is also mostly stolen from it (i just copied the color scheme
onto our own suits).

Coroners can perform autopsies on people to see their stats, like this

![image](https://user-images.githubusercontent.com/53777086/235369225-805d482c-56c0-441c-9ef8-a42d0a0192bc.png)

They have access to Medbay, and on lowpop will get Pharmacy (to make
their own formaldehyde). They also have their own Secure Morgue access
for their office (doubles as a surgery room because they are edgelords
or whatever) and the secure morgue trays.

Secure Morgue trays spawn with their beepers off and is only accessible
by them, the CMO, and HoS. It's used to morgue Antagonists. Security's
own morgue trays have been removed.

The job in action


https://cdn.discordapp.com/attachments/950489581151735849/1102297675669442570/2023-04-30_14-16-06.mp4

### Surgery changes

Autopsies are a Surgery, and I tried to intertwine this with the
Dissection surgery.
Dissections and Autopsies both require the Autopsy scanner to perform
them, however you can only perform one on any given body. Dissections
are for experiments, Autopsies is for the paper of information.

Dissected bodies now also give a ~20% surgery speed boost, this was
added at the request of Fikou as a way to encourage Doctors to let the
Coroner do their job before reviving a body.
I also remember the Medical skill, which allowed Doctors to do surgery
faster on people, and I hope that this can do something like that
WITHOUT adding the potential for exploiting, which led to the skill's
downfall.

### Morgue Improvements

Morgue trays are no longer named with pens, they instead will steal the
name of the last bodybag to be put in them.

Morgue trays are also removed from Brig Medical areas and Robotics, now
they have to bring their corpses to the Morgue where the Coroner can
keep track and ensure records are properly updated.

### Sprite credits

I can't fit it all in the Changelog, so this is who made what

McRamon
- Autopsy scanner

Tattax 
- Table clock sprites and in-hands

CoiledLamb
- Coroner jumpsuits & labcoats (inhand, on sprite, and their respective
alternatives)
- Coroner gloves
- CoronerDrobe (the vending machine)

## Why It's Good For The Game

This is mostly explained in the hackmd, but the goal of this is:

1. Increase the use of the Medical Records console.
2. Add a new and interesting way for Detectives to uncover mysteries.
3. Add a more RP-flavored role in Medical that still has mechanics tied
behind it.

## Changelog

🆑 JohnFulpWillard, sprites by McRamon, tattax, and Lamb
add: The Coroner, a new Medical role revolving around dead corpses and
autopsies.
add: The Coroner's Autopsy Scanner, used for discovering the cause for
someone's death, listing their wounds, the causes of them, their
reagents, and diseases (including stealth ones!)
qol: Morgue Trays are now named after the bodybags inside of them.
balance: The morgue now has 'Secure' morgue trays which by default don't
beep.
balance: Security Medical area and Robotics no longer have their own
morgue trays.
balance: Dissected bodies now have faster surgery speed. Autopsies also
count as dissections, however they're mutually exclusive.
/🆑

---------

Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
2023-05-05 21:31:28 -04:00
BlueMemesauce e8840cfebc Delete blank line from the combat information box (#75025)
## About The Pull Request

I asked eobgames to do it in #74203 but he didnt and i forgot to do it
until now
## Why It's Good For The Game

Since there's a box around it now, we don't need a blank line to
separate it anymore

Old:

![image](https://user-images.githubusercontent.com/47338680/235238660-951de8f1-ecc6-4466-b130-450f76cc4e40.png)


New:

![image](https://user-images.githubusercontent.com/47338680/235237497-9d2d05b3-70eb-4d05-8b07-8f518076e928.png)
## Changelog
🆑
spellcheck: Deleted the extra line in combat information
/🆑
2023-04-29 21:49:39 -06:00
tralezab bc813ab93d Cleans up + Improves bows, Sorts files, Adds the Divine Archer clothing, weapon, rite (#74811)
## About The Pull Request

### Divine Archer 🏹 


![image](https://user-images.githubusercontent.com/40974010/232647927-aace69ea-bda8-4ec9-9bf1-60140034fbb3.png)

Adds a new chaplain weapon and suit of armor, the divine archer. It's an
orderable set of armor, but provides less armor than the rest, but you
get more pieces of armor (boots, bracer, undersuit).

The divine bow comes with a quiver that holds holy arrows. The holy
arrows come with bane support, dealing critical damage to revenants.

### Bow Features  

- arrows can now be dipped in poison

### Bow Improvements 🔧 

- bows now drop their arrow when you put them on your back while nocking
a bow
- bows give feedback for trying to draw without a nocked arrow
- codewise, bows support subtypes much better. They still have
hard-sprited loaded arrows, but one day that'll change.

## Why It's Good For The Game

Yeah, we could add null rod #2342 that does almost the same as the
others, or we could have a unique bow weapon!

Player Dev Project thread:
https://discord.com/channels/326822144233439242/1093521091957370940/1093521091957370940

## Changelog
🆑 tralezab code, Drag for the commission and player project, cre#0484
for their spritework
add: Divine Archer Armor and Weapon
qol: Bows give more feedback when you're doing something wrong, like
trying to draw without a nocked arrow
code: Sorted files, cleaned bow code up to allow subtypes
/🆑
2023-04-29 02:07:44 +00:00
Comxy 61795ee325 Cosmic Ascension Balance Patch (#74715)
## About The Pull Request
Now the stargazer does more damage to people in the area and prioritizes
mobs attacking them instead of random circuit bots 7 tiles away. It will
also slowly heal you. Makes some abilities create more carpet fields
when ascending. Increases combo times when ascending. Also makes the
Star Gazer die only when the owner dies. Star Gazer will explode when it
does die. Star Gazer has a damage aura that does heal the owner.
## Why It's Good For The Game
I have seen a lot of people complaining that the cosmic ascension isn't
good and not worth getting so I thought I would make it a little better.
## Changelog
🆑
balance: Star Gazer now explodes when it dies.
balance: Star Gazer will only die when the owner dies.
balance: Star Gazer will attack the most recent enemy that attacked him
when on autopilot.
balance: Star Gazer has an aura that slowly damages people and heals the
owner.
balance: Cosmic Ascension now buffs some spells.
/🆑
2023-04-27 19:11:13 +01:00
MrMelbert ed2f04f486 Experiment with replacing weakrefs in AI blackboard with deleting signals, ideally making it easier to work with and harder to cause hard deletes (#74791)
## About The Pull Request

Replaces weakref usage in AI blackboards with deleting signals

All blackboard var setting must go through setters rather than directly

## Why It's Good For The Game

This both makes it a ton easier to develop AI for, and also makes it
harder for hard deletes to sneak in, as has been seen with recent 515
prs showing hard deletes in AI blackboards

(To quantify "making it easier to develop AI", I found multiple bugs in
existing AI code due to the usage of weakrefs.)

I'm looking for `@Jacquerel` `@tralezab` 's opinions on the matter, also
maybe `@LemonInTheDark` if they're interested

## Changelog

🆑 Melbert
refactor: Mob ai refactored once again
/🆑
2023-04-23 17:07:17 -06:00
ChungusGamer666 2536fd85ee Cleans up thermite component code (#74825)
## About The Pull Request

Nothing too interesting to be quite honest, just cleans up the thermite
component code a bit because it was a bit weird.

## Why It's Good For The Game

This probably fixes a few rare bugs where the thermite overlay
disappears due to an update_icon call. Slightly neater code.
Also, adds an examine message to thermite walls because small QoL stuff
is neat.

## Changelog

🆑
qol: Thermited walls now get an examine message telling you they are, in
fact, thermited.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-04-21 13:11:52 -06:00
ChungusGamer666 b54b2f62b3 Turns loomable component into a bespoke element (#74685)
## About The Pull Request

Thought https://github.com/tgstation/tgstation/pull/74552 was good?

YOU WON'T BE READY FOR THIS ONE...

## Why It's Good For The Game

free miniscule amount of performance by getting rid of some silly
component datums

## Changelog

player dont care

---------

Co-authored-by: san7890 <the@san7890.com>
2023-04-17 16:11:36 -06:00
oranges 4c48966ff8 Renames delta time to be a more obvious name (#74654)
This tracks the seconds per tick of a subsystem, however note that it is
not completely accurate, as subsystems can be delayed, however it's
useful to have this number as a multiplier or ratio, so that if in
future someone changes the subsystem wait time code correctly adjusts
how fast it applies effects

regexes used

git grep --files-with-matches --name-only 'DT_PROB' | xargs -l sed -i
's/DT_PROB/SPT_PROB/g'
git grep --files-with-matches --name-only 'delta_time' | xargs -l sed -i
's/delta_time/seconds_per_tick/g'
2023-04-11 21:31:07 -07:00
Pinkufeck d7ce8761c7 Modifies spectral instruments to make retaliation more viable. (#74599)
## About The Pull Request

Reduces the damage dealt by the spectral trombone, saxophone and trumpet
and adds a message warning of the change they cause

## Why It's Good For The Game

In their current state the spectral instruments transform people into 4
hits, the first two hits dealing enough stam damage that it slows to
point where escape isn't possible.
Since it's also rare most people don't know of it'll transform you into
a skeleton
In order to allow for more viable retaliation against the transformation
into a skeleton this PR reduces the stamina damage dealt and prints a
message for the target that hints them towards the transformation.

## Changelog

:cl:Somepan
add: Added a message upon being hit by any spectral instruments
balance: Reduced the stamina damage dealt by spectral instruments from
25 to 18 making it transform after 6 hits instead of 4
/🆑
2023-04-09 21:49:39 +02:00
Comxy 73ba9046df [Ready] New Cosmic Heretic Path DLC (#73915)
## About The Pull Request
This PR adds a new Cosmic Heretic.

![promo1](https://user-images.githubusercontent.com/25363960/224495697-5a398430-54b3-4473-bdf7-a041abb09596.PNG)

![promo2](https://user-images.githubusercontent.com/25363960/224495702-245b0a0b-7dc1-428f-b3b8-d7ef9c66f9ee.PNG)

![promo3](https://user-images.githubusercontent.com/25363960/224495707-d2ba034c-fc4f-4548-a782-78fe37311b37.PNG)

![promo4](https://user-images.githubusercontent.com/25363960/224495710-e9887cfd-cccd-4be4-9270-023b8dd98915.PNG)

![promo5](https://user-images.githubusercontent.com/25363960/224515282-2e9dceb7-e9f1-4136-9338-d370dd11b919.PNG)

Main Paths:
- Eternal Gate: Opens up the Path of Cosmos to you. Allows you to
transmute a sheet of plasma and a knife into an Cosmic Blade. You can
only create two at a time.
- Grasp of Cosmos: Your Mansus Grasp will give people a star mark
(cosmic ring) and create a cosmic field where you stand.
- Cosmic Runes: Grants you Cosmic Runes, a spell that creates two runes
linked with eachother for easy teleportation. Only the entity activating
the rune will get transported, and it can be used by anyone without a
star mark.
- Mark of Cosmos: Your Mansus Grasp now applies the Mark of Cosmos. The
mark is triggered from an attack with your Cosmic Blade. When triggered,
the victim transport back to the Cosmic Diamond, which is the location
your mark was applied to them. After getting transported they will be
paralyzed for 2 seconds.
- Star Touch: Grants you Star Touch, a spell that will give people a
star mark (cosmic ring) and create a cosmic field where you stand.
People that already have a star mark will be forced to sleep for 4
seconds. When the victim is hit it also creates a beam that deals a bit
of fire damage and damages the cells. The beam lasts a minute, until the
beam is obstructed or until a new target has been found. Can remove
Cosmig Runes and teleport you to your Star Gazer when used in hand.
- Star Blast: Fires a projectile that moves very slowly and create a
cosmic field on impact. Anyone hit by the projectile will recieve burn
damage, a knockdown and a star mark.
- Cosmic Blade: our blade now deals damage to peoples cells through
cosmic radiation.
- Cosmic Expansion: Grants you Cosmic Expansion, a spell that creates a
3x3 area of cosmic fields around you. Nearby beings will also receive a
star mark.
- Creators's Gift: The ascension ritual of the Path of Cosmos. Bring 3
corpses with bluespacedust in their body to a transmutation rune to
complete the ritual. When completed, you become the owner of a Star
Gazer. You will be able to command the Star Gazer with Alt+click. You
can also give it commands through speech. The Star Gazer is a strong mob
that can even break down reinforced walls. Star Touch can now teleport
you to your Star Gazer when Star Touch is used in hand."

Side Paths:
- Ash-Cosmic: Fire Fish: Allows you to transmute a pool of ash, eyes,
and a sheet of plasma into a Fire Shark. Fire Sharks are fast and strong
in groups, but are bad at combat.
- Ash-Cosmic: Curse of The Stars: Allows you to transmute a bluespace
crystal, a pool of ash, and a liver to cast a Curse of The Stars on a
crew member. While cursed, the victim will recieve a star mark that
lasts for at least 3 minutes. This star mark makes it so that the crew
member cannot enter cosmic carpet fields. The victim will also recieve a
cosmic carpet trail for at least 3 minutes.
- Ash-Cosmic: Eldritch Coin: Allows you to transmute a sheet of plasma,
a diamond and eyes to create an Eldritch Coin. The coin will heals when
landing on heads and damages when landing on tails. The coin will heal
for more, but only for heretics.

Extra ability information:
- Star Mark: This is a status effect that prevents people from walking
into cosmic fields.
- Cosmig Fields: Only block entities marked with a star mark,
projectiles or throwing items will still work. Lasts only 30 seconds and
5 seconds for the Cosmig Trail trait.

Some things I wanted to mention:
- Why the Star Gazer is balanced: It has 3000 health and can kill people
pretty fast, but at the same time, anyone can space the Star Gazer and
lead it away from the heretic if they do not pay attention.
- The Cosmic Heretics balancing has been carefully considered. It is
relatively weak in group situations but strong in one to one combat.
- Balance changes can also be made after the PR gets merged need be, or
it can be test merged first.
## Why It's Good For The Game
New heretic path means more choice and a different play style.
## Changelog
🆑
add: Adds new Cosmic Heretic.
soundadd: Adds Cosmic Heretic sounds.
imageadd: Adds Cosmic Heretic sprites.
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-04-08 14:44:14 +01:00
MrMelbert 6085e3b5ee Reagent soup / Soup rework / Stoves - A kitchen expansion (#74205)
## About The Pull Request


![image](https://user-images.githubusercontent.com/51863163/227391708-8de28b68-149f-4e02-a2d3-22f6e3067784.png)

**This PR:** 

- Reworks most* existing soup into reagents. 

- Adds Stoves and Ranges. Ranges replace most* existing ovens. 

- Adds soup pots, to cook soup

**How does it work?** 

In the kitchen you will find a stove now.

Stoves act as a "reagent container heater", essentially a chem heater.
You can set a pot onto the stove.

To make soup, visit the cooking recipe book for a guide. Most recipes
are the same as before, just tweaked slightly - Add water to the pot (50
units for 1 batch generally), then add all the corresponding ingredients
to the pot. Set the pot out on the stove and right click it to turn it
on. If the recipe's correct, shortly it will start to mix and give you
soup!

One soup recipe will give you roughly 3 servings of soup. You can pour
our the soup into a bowl using a ladle or just by pouring it manually.

Of note: **All of the reagent contents of the ingredient are transferred
into the soup.** Better, more nutrient rich ingredients produces more
soup, and poisoned produce will pass it on.

If you place the soup into a chem master, you will notice it's roughly
half "soup reagent" and half a variety of reagents, including nutriments
/ proteins. This is your soup! It is recommended you serve your soup
with the reagents included, as they make up more nutrition for the
customer, however you can separate it out if you're picky.

**Todo:** 

- [x] Fill out the PR body a bit more 
- [x] Mapping (wait for big merge conflict pr to go past)
- [x] Soup colors
- [x] Balance pass over for soup recipes
- [x] TODOs
- [ ] Unit tests
- [x] Cullen Skink's recipe is invalid
- [x] Try to see if there's an easy way to prevent soup from fattening
you up too easy.

## Why it's good for the game

Adds some more depth to the kitchen and moves chef away from the
click-button-get-food style that exists.

Allows for inherently custom soups by the way of making it reagents, so
no need to support custom soup food items.

## Changelog

🆑 Melbert, stove and pot sprites by Kryson, ladle sprite by Kinneb
add: Kitchens are now stocked with Ranges. 
add: You can now print (and create) Stoves. 
add: The dinnerware vendor now dispenses ladles. 
add: Spoons can now actually spoon... things.
add: Soup has been reworked entirely. Soups are now reagents, cooked via
a soup pot on a Stove or Range. Simply add water and your required
items, then apply heat. Be careful not to boil over!
add: Stoves, Ranges, and Griddles will now heat up their surroundings -
don't turn them on around plasma!
fix: Fixes being able to cook in an Oven while the room is depowered
qol: Hitting a customer bot with an incorrect recipe no longer counts as
a hostile attack leading to your demise shortly after
refactor: Customer bots that request a reagent now use custom orders
code: Cut down a lot of code in the crafting menu code, and removes some
ugly ispaths
del: Soup is no longer food items, so can't appear in random food pools
(at least not yet).
balance: Virus Food recipe now requires you cool it to 200k.
/🆑
2023-04-07 19:42:49 -06:00
Tim 4397d63a55 Split weapons_and_items.dmi icons into their own categories (#74363)
## About The Pull Request
This sprite file had been a dumping ground for miscellaneous sprites for
the past decade. It's bloated and full of random kinds of icons and even
has a few unused ones. It's time to reorganize them into their own
separate dmi's based on theme.

## Why It's Good For The Game
Better organization and easier access when looking for stuff.

## Changelog
🆑
imageadd: Split all icons in weapons_and_items.dmi to their own
categories
imagedel: Removed some unused icons
/🆑
2023-04-06 08:30:57 +12:00
EOBGames 21ef45fa6d OOC-ifies the Bluespace Tag (#74203)
## About The Pull Request
De-ICs the bluespace tag, instead presenting the same information in an
OOC format.

![image](https://user-images.githubusercontent.com/58124831/227378515-ccb9bfb3-bd30-4ceb-8c6c-fdc50132fb4b.png)
This does not alter the actual information shown (besides a slight
change to wording for the armor-piercing/block values, though the
thresholds are the same).

P.S. I don't know if this is tagged correctly- it doesn't seem to neatly
fit any category. (When are we getting the Tweak tag back?)
## Why It's Good For The Game
The bluespace tag has sorta been an oddity since it was introduced.
While the rationale behind its addition was sound- we want players to
have information without code-diving, but not necessarily anything too
concrete- the actual stuff surrounding that information has always felt
off. Why exactly are we finding items that have lain undisturbed on
lavaland for centuries that have a bluespace tag? What magical source of
information are they drawing from? Basically, in its attempt to make OOC
information IC-relevant, it creates more plot holes than it solves, and
ultimately it does so to no real benefit. Hence, I feel it's best that
we just stop trying to present this in an IC format.
## Changelog
🆑
qol: Bluespace tags are gone. The information contained within is still
available in the same way, just in a more out-of-character format.
/🆑
2023-04-01 20:16:47 +00:00
Jacquerel 966b8e5fd8 March into Mapness: Meateor (#74070) 2023-03-31 19:40:29 -07:00
Helg2 52736afe8f Makes eyestabbing and neck slicing a little easier to use. Also add's screams to kneecapping. (#74307)
## About The Pull Request
Neck slicing warning is completely useless and annoying, so i deleted
it. Everytime i sliced someone's neck i needed to turn off combat mode
just to continue killing them which is annoying as hell.

Eye stabs warnings are too completely useless and annoying. If you're in
the fight you definitely don't want to read warnings about them being
alien or their eyes being covered.
Also made it's code a little bit prettier?

Made the victim's of kneecapping scream on act. Everything for the
sadistic pleasurement!
## Why It's Good For The Game
Easier to fight with those things. More fun.
## Changelog
🆑
add: the victims of kneecapping will now scream.
qol: you will no longer gain useless message, when you're harming
someone in agro-grab in the head with their neck already slicen, instead
of continuing killing them.
qol: you will no longer gain irritating messages, when trying to stab
someone in the eye, instead of just stabbing them with screwdriver.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-03-31 16:45:55 +01:00
san7890 ccef887efe Lints Against Unmanaged Local Defines (#74333)
# MAINTAINER - USE THE BUTTON THAT SAYS "MERGE MASTER" THEN SET THE PR
TO AUTO-MERGE! IT'S MUCH EASIER FOR ME TO FIX THINGS BEFORE THEY SKEW
RATHER THAN AFTER THE FACT.

## About The Pull Request

Hey there,

This took a while to do, but here's the gist:

Python file now regexes every file in `/code` except for those that have
some valid reason to be tacking on more global defines. Some of those
reasons are simply just that I don't have the time right now (doing what
you see in this PR took a few hours) to refactor and parse what should
belong and what should be thrown out. For the time being though, this PR
will at least _halt_ people making the mistake of not `#undef`ing any
files they `#define` "locally", or within the scope of a file.

Most people forget to do this and this leads to a lot of mess later on
due to how many variables can be unmanaged on the global level. I've
made this mistake, you've made this mistake, it's a common thing. Let's
automatically check for it so it can be fixed no-stress.

Scenarios this PR corrects:

* Forgetting to undef a define but undeffing others.
* Not undeffing any defines in your file.
* Earmarking a define as a "file local" define, but not defining it.
* Having a define be a "file local" define, but having it be used
elsewhere.
* Having a "local" define not even be in the file that it only shows up
in.
* Having a completely unused define*

(* I kept some of these because they seemed important... Others were
junked.)
## Why It's Good For The Game

If you wanna use it across multiple files, no reason to not make it a
global define (maybe there's a few reasons but let's assume that this is
the 95% case).

Let me know if you don't like how I re-arranged some of the defines and
how you'd rather see it be implemented, and I'd be happy to do that.
This was mostly just "eh does it need it or not" sorta stuff.

I used a pretty cool way to detect if we should use the standardized
GitHub "error" output, you can see the results of that here
https://github.com/san7890/bruhstation/actions/runs/4549766579/jobs/8022186846#step:7:792
## Changelog
Nothing that really concerns players.

(I fixed up all this stuff using vscode, no regexes beyond what you see
in the python script. sorry downstreams)
2023-03-29 10:17:03 -07:00
LemonInTheDark 6ee43f9fb1 Minor Gravity Fixes (#74285)
## About The Pull Request

Fixes forced gravity not updating a mob (trait was added too early,
before hook signals are registered)
Fixes spawning a mob in space not causing floats (default grav was 0, so
== null was wrong)
Runs shake_everyone() (Our gravity gen reaction hook) AFTER gravity
changes, ensuring mobs hook into it

## Why It's Good For The Game

Closes #74271 
Closes #74272 (Caused by being in nograv but not floating)
Closes #74274 
## Changelog
🆑
fix: Fixes a bunch of minor gravity bugs, report em if you see more
yeah?
/🆑
2023-03-27 16:06:40 -06:00