Commit Graph

527 Commits

Author SHA1 Message Date
MrMelbert 8c1e35e1c0 Refactors mind language holders into non-existent, fixes new languages being deleted on species swap + tests (#76612)
## About The Pull Request

This PR refactors mind language holders into non-existence

As a result, `update_atom_languages` is no longer necessary

Mind-bound languages are transferred via `/mind/proc/transfer_to`

Species changing no longer deletes and re-creates the mob's language
holder, allowing them to keep any languages they have.

Species languages are sourced from `LANGUAGE_SPECIES` now, meaning they
are removed when they change species. If the mob is not a human with a
species datum, these are effectively just atom level languages.

Makes a bunch of unit tests to ensure language transfer over certain
events works as intended

## Why It's Good For The Game

Mobs with minds having two independent language holders results in a
good few bugs, and simply doesn't make sense when we have sources
(`LANGUAGE_MIND`).

Instead of tracking two language holders, we can simply use sources
better and only track one.

This means that the language holder you start with is your language
holder, period. It doesn't get deleted or re-instantiated or whatever.

## Changelog

🆑 Melbert
refactor: Refactored language holders, making species changes not delete
all of your known languages
/🆑
2023-07-10 18:34:57 +00:00
carlarctg 721fd30837 Heavily reworks and resprites first aid analyzers. (#76533)
## About The Pull Request

Heavily reworks and resprites first aid analyzers. They now display if
they're happy, sad, angry, or warning you! Also a 'pricking' animation.

First aid analyzers are now found in all basic and specialized medkits.
Toxin medkits get a new* disease analyzer. Miners get a miner-colored
one in their box.

Scanning yourself with a first aid analyzer will 'create a holo-image
with treatment instructions next to your wounds', doubling the speed of
treatment of scanned wounds!

Health analyzers now have a scanning sound, courtesy of CM.

Refactored some wound code to make treatment duration changes and
changes in the description of wounds easier.

Fixed a dummy parent feature of the health analyzer (Verbose mode)
showing up, uselessly, on the disease and first aid subtypes.

Surgical processors and slime scanners have recieved a similar resprite.
## Why It's Good For The Game

> Heavily reworks and resprites first aid analyzers. They now display if
they're happy, sad, angry, or warning you! Also a 'pricking' animation.

These things have long, long needed some sprite love. Displaying emotion
will make them have a lot more 'weight' to them, same with the prick.
The old, shitty spectrometer sprites have gone directly into the
dumpster.

> First aid analyzers are now found in all basic and specialized
medkits. Toxin medkits get a new* disease analyzer. Miners get a
miner-colored one in their box.

They have also needed some gameplay love! Placing them in these kits is
not going to be a massive game-changer when they were already easily
found around the station in emergency medkits, but it will fill up that
awkward empty slot.

> Scanning yourself with a first aid analyzer will 'create a holo-image
with treatment instructions next to your wounds', doubling the speed of
treatment of scanned wounds!

The biggest gameplay-impacting change in this PR, I *sincerely* believe
this is the perfect solution to first aid analyzers being completely
redundant with eyesight. This lets you/someone else scan your wounds to
speed up treatment, with a neat in-character reason for it -
'holo-images' appearing on your body, like penlights.

This will speed up wound treatment, but I believe that is for the best,
as currently treating wounds is so slow that half the time it's not
worth it (or more accurately, it doesn't feel worth it in comparison to
the effort you're putting in) and you're better off shrugging off minor
wounds. It will do so in a way that requires a modicum of effort, so
it's not just a flat buff across the land.

> Health analyzers and gene scanners now have a scanning sound, courtesy
of CM.

It's a neat sound that will make medbay feel more alive. First aid
analyzers get a beeboop instead.

> Surgical processors and slime scanners have recieved a similar
resprite.

IT'S SPRITE MANIA IN HERE
## Changelog
🆑
Carlarc, Weird Orb
image: Heavily reworks and resprites first aid analyzers. They now
display if they're happy, sad, angry, or warning you! Also a 'pricking'
animation.
add: First aid analyzers are now found in all basic and specialized
medkits. Toxin medkits get a new* disease analyzer. Miners get a
miner-colored one in their box.
balance: Scanning yourself with a first aid analyzer will 'create a
holo-image with treatment instructions next to your wounds', doubling
the speed of treatment of scanned wounds!
sound: Health analyzers and gene scanners now have a scanning sound,
courtesy of CM.
refactor: Refactored some wound code to make treatment duration changes
and changes in the description of wounds easier.
fix: Fixed a dummy parent feature of the health analyzer (Verbose mode)
showing up, uselessly, on the disease and first aid subtypes.
image: Surgical processors and slime scanners have recieved a similar
resprite.
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-07-07 23:19:55 +01:00
Archie 83d4bede0e Adds more job relevant items to drobes (#75973)
Adds coloured large scarfs and winter coats to ClothesMate
Adds latex gloves to SciDrobe, ChemDrobe, ViroDrobe and GeneDrobe
Adds nitrile gloves to MediDrobe
Adds science headsets to GeneDrobe and RoboDrobe
Adds medical headsets to ViroDrobe and ChemDrobe
Adds black shoes to ChefDrobe
Adds black wizard robes and black wizard hat to MagiVend
Adds grey backpack, grey satchel, leather satchel and grey duffel bag to
CargoDrobe
## Why It's Good For The Game
It makes it so that some job relevant items such as gloves are in drobes
which makes them harder to steal, this will make it less likely that a
latejoin medical doctor will be unable to find and nitrile gloves. The
gloves are added in departments which already have access to them so it
won't result in more people having access to the gloves.
2023-07-04 13:47:11 +00:00
necromanceranne 2600f23ebb Coroner Update: Pickle-Eating Morbid Weirdo Obsessed with Death and Perfectionism (#76318)
This PR introduces a whole bunch of Coroner and Morbid related content.

Firstly, Morbid is now a mind trait, and specifically, coroners start
with it.

Coroners also have a liver trait that allows them to heal toxins (very
slowly) from eating pickles and drinking pickle juice. They also
can...drink formaldehyde. I guess. Dissections is thirsty work.

Coroners gain a whole set of special tools specifically for use in any
surgeries marked as interests of the Morbid. This is determined by the
``surgery_flag`` called ``SURGERY_MORBID_CURIOSITY``. Currently, these
surgeries are included;

dissections, autospies, revival surgery, plastic surgery, organ/feature
manipulations, amputations

To fit the theme, TRAIT_MORBID also applies the reduction to eye
snatchers.

While using their special tools, and the surgery is a morbid curiosity,
the coroner/anyone who is morbid gains a 30% speed boost! This stacks
with the dissection speed boost. Otherwise, the tools are just regular
tools with a special name (though the scalpel is better at killing
undead, because, you know, you're watching over the dead).

The coroner's special medkit, which is the only one you can get in a
round, can fit their autopsy scanners and tools. Anything that comes
standard with their kit can go back into it.

Anyone who is morbid can safely retrieve the secrets of the elephant
graveyard. The serrated shovel, notably, is a much better tool and
notably better at killing organics, but not inorganics (like the dead).

(Gives roboticists secure morgue access during skeleton crew pop totals)
2023-06-30 12:55:14 +00:00
Iamgoofball a159b52e85 TTS Improvements: Improved Audio Quality, Pitch Adjustment, Preference Silicon Voices, Per-Character Voice Disable Toggle, Tongue Voice Filters, Reworked Silicon and Vending Machine Filters (#76129)
## About The Pull Request


https://github.com/tgstation/tgstation/assets/4081722/5ca8e015-21f9-4159-9953-bc370152d01f

Improves the audio quality and speaker fidelity by implementing
Retrieval Voice Conversion as an intermediary layer, utilizing the
repository at https://github.com/ddPn08/rvc-webui.
Leverages RVC to allow players to set a pitch for their voice.


https://github.com/tgstation/tgstation/assets/4081722/0eb76ed7-ad67-4da2-9ceb-02605eea2c83

Makes silicons utilize a player's chosen voice preference on their
character slot, and adds a preview button to hear the voice as a silicon
on character creation.
Adds a toggle on character creation to disable having a voice on a
specific character slot.
Adds support for per-tongue voice filters.
Reworks the silicon voice effect to be a special effect done on the TTS
server level instead of via normal filters.
Reworks the vending machine effect to use the new robotic voicebox
effect.

## Why It's Good For The Game

Vastly improves the audio quality and speaker fidelity of our TTS
system.
Allows players to further customize their voice per character, naturally
pitching the voice up or down with cutting edge machine learning based
pitch adjustment.
Allows silicon players to have a consistent voice that's also audible
and understandable regardless of the voice or pitch of the speaker.
Improves vending machine audio quality.
Enhances the immersion of snail tongues and robotic voiceboxes.
Adjusts how Poly's pitch adjustment works based on if RVC is available
or not.
Allows players who feel that a voice doesn't fit their character to
disable having TTS on their specific character.
Provides server operators a way to disable specific voices in situations
with a shared voice server.

## Changelog

🆑 Iamgoofball, Nadare, ddPn08, Mangio621, the rest of the RVC dev
team
add: Improves the audio quality and speaker fidelity by implementing
Retrieval Voice Conversion as an intermediary layer, utilizing the
repository at https://github.com/ddPn08/rvc-webui.
add: Leverages RVC to allow players to set a pitch for their voice.
add: Makes silicons utilize a player's chosen voice preference on their
character slot, and adds a preview button to hear the voice as a silicon
on character creation.
add: Adds a toggle on character creation to disable having a voice on a
specific character slot.
add: Adds support for per-tongue voice filters.
add: Reworks the silicon voice effect to be a special effect done on the
TTS server level instead of via normal filters.
add: Reworks the vending machine effect to use the new robotic voicebox
effect.
/🆑

---------

Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
2023-06-28 20:43:13 +00:00
Tom 09ad8fc2d3 Changes brand intelligence to check onstation var instead of station z level. Well, kind of both. (#76266)
## About The Pull Request

Checks the `.onstation` var on `/obj/machinery/vending` instead of
checking the z-level directly.

The z-level check is already run in init to set this var in the first
place, but this way it allows the var to be set manually to secure
vendors that are on the station z-level but are not wanted as candidates
for brand intelligence.
This scenario doesn't currently exist here, but it affects things like
https://github.com/Skyrat-SS13/Skyrat-tg/issues/21918 and
future-proofing is always nice.

I did consider doing this as another var, but that felt a bit excessive.
Can change if wanted.

(also removes some duplicate comments because I was there)

## Why It's Good For The Game

Wasted events uhh bad

## Changelog
🆑
fix: Brand intelligence can no longer affect off-station vendors in some
specific circumstances.
/🆑
2023-06-27 21:00:21 -06:00
Youtubeboy139 16ac04b486 Yar Har Fiddle Di Dee! (#76311)
## About The Pull Request

The space pirates have long since needed some love for their old,
weathered sprites so I took it upon myself to give them some proper
drip. I also fluffed the cutlass so it's not a banana with a hilt and
gave the sailor uniform some love as well since it was similar in design
to the pirate uniform just blue with brown pants.

Note the `hgpirate` sprites haven't been touched yet, I'm still trying
to get information on them.

EDIT: Blue bandana alt was removed do to `Init` errors

EDIT: `hgpirate` got a quick pass over with some minor sprite changes
and a new item for the `hgpiratecap`

## Proof of Testing

<details>
<summary>Screenshots</summary>
  
Bandanas in a Test Session
![Screenshot 2023-06-24
224722](https://github.com/tgstation/tgstation/assets/609886/d033e87e-306d-439a-8fd3-b46af8aefb9c)

Full Pirate Drip in a Test Session
![Screenshot 2023-06-24
224731](https://github.com/tgstation/tgstation/assets/609886/67af2bf6-a2ea-4031-8c6f-5e64ec7527ab)

Energy Cutlass in a Test Session
![Screenshot 2023-06-24
224830](https://github.com/tgstation/tgstation/assets/609886/0cbef500-79c0-4e73-a61f-057940ab4183)

Normal Cutlass in a Test Session
![Screenshot 2023-06-24
224933](https://github.com/tgstation/tgstation/assets/609886/f525ed23-5139-42a8-b2ae-6a6900690b26)

Pirate EVA suit in a Test Session
![Screenshot 2023-06-24
225121](https://github.com/tgstation/tgstation/assets/609886/6b687c26-ccb0-493b-8875-28174105bd0e)

Pirate EVA drip 1
![Screenshot 2023-06-24
012314](https://github.com/tgstation/tgstation/assets/609886/eb1de642-1af4-4056-9aa3-fbd9462fa216)

Pirate EVA drip 2
![Screenshot 2023-06-24
181951](https://github.com/tgstation/tgstation/assets/609886/3bd7e3d7-b2b8-43be-bb6a-87898f7dfa4f)

</details>

## Why It's Good For The Game

The sprites that the pirates use are old - these sprites are better than
what the pirates currently have.

https://www.youtube.com/watch?v=i8ju_10NkGY
## Changelog
🆑
add: Added new Pirate Boots
image: Added new Pirate Bandana sprites
image: Added new Pirate Hat sprites
image: Added new Pirate Uniform sprites
image: Added new Sailor Uniform sprites
image: Added new Pirate Coat sprites
image: Added new Pirate EVA gear sprites
image: Added new Cutlass sprites
image: Added new Energy Cutlass sprites
image: Added new `hgpirate` suit and hat sprites
/🆑
2023-06-26 21:14:11 -07:00
GuillaumePrata 867c217c57 New Wizard spell "branch": Vendormancy (#75679)
## About The Pull Request
New item for wizards, ~~the Staff~~ Scepter of Runic Vendormancy.

With it, you can summon Runic Vending machines to block your enemies,
push them 2 tiles back around the summoning tile, throw the vendors 4
tiles away to squash them or simple detonate the vendors for direct
damage against enemies within a 2 tile range.

The scepter has 3 charges that can be recharged after a "long" channel
so while powerful, it is a tactical weapon and wizards can't directly
steamroll the crew with endless vendors. (Unless they buy multiple
scepters, but that is just funny.)

Also, there is a bug with the throw... I copied how baseball bats deal
with knockback, but they consistently don't push the vendors back, just
spin them on the same tile... I appreciate if anyone has any idea on how
to fix or change that to a better system.

## New changes I made
The vendor has a random set of REAL wizard robes and hat, sandals and a
foam vendor scepter as products to sell now.
This gives the crew some real armor, and if it is considered too much, I
can swap it for the fake versions.
IMO the real clothes work as the perfect bait for the crew to approach
the vendors and get exploded in the process, and while a random
assistant might get real wizard armor to go valid hunt the wizard, the
crew might just mistake them for the real wizard and beat them to death,
which is too funny.
## Why It's Good For The Game

![vendormancerPR](https://github.com/tgstation/tgstation/assets/55374212/f9d98f3e-5916-4a17-987e-249f4cdb7185)

About a year ago I played Stoneshard, and it has such an amazing
Geomancy Wizard that I wanted to port some of its gameplay to SS13 as
our wizards, while funny and destructive, are kinda simple to play...

Summoning and blowing up rocks was nice, but I randomly had the idea of
summoning Vendors while at work and vendors squashing people has become
such an iconic SS13 thing to me that I had to stop being lazy and start
working on this.

Something, something, enviromental combat wizard.
## Changelog
Gonna polish the changelog later too...
🆑 Guillaume Prata
add: New Wizard spell branch: Vendormacy! Summon runic vending machines
with your Vending Scepter, force push them on your enemies to squish
them or blow them up while they are busy buying from the machines.
/🆑

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
2023-06-23 08:56:18 +00:00
MrMelbert e4e325cce1 Categorizes chef equipment vendor (#76122)
## About The Pull Request

Slots the chef equipment vendor into categories, since it was pretty
cluttered with a variety of things.


![image](https://github.com/tgstation/tgstation/assets/51863163/722dd68e-a608-4761-ada8-ee1fc4cdf04d)

## Why It's Good For The Game

Main page had a combination of clothing, tools, utensils, condiments,
skill chips, and books. What a mess

## Changelog

🆑 Melbert
qol: Categorizes chef vendor
/🆑
2023-06-19 16:17:02 -07:00
LemonInTheDark 830d2e50b4 Fixes some stupid airlock sleeps (#75961)
## About The Pull Request

[A common problem with explosions is an overabundance of
sleeping](https://github.com/tgstation/tgstation/commit/6499077a09469ff401c224c0510bc184c663b118)

In an attempt to solve this issue, let's not continue to sleep and do
work in door closing if the door is already deleted

(This is caused by firelocks activating due to other adjacent objects
deleting, triggering an atmos update, and closing the firelocks before
they get bombed. I don't have a elegant way of resolving that core
problem, so let's just minimize the impact)

[Nukes a stupid sleep loop in airlock
code](https://github.com/tgstation/tgstation/commit/5b16360520526d6f5aa3b511049456b74f33f430)

When an airlock was depowered, it would enter a sleep loop, decrementing
its delay by 1 second every well, one second, so long as it had the
right wires flipped
This is very stupid

Instead, let's use signals off wire changes and a combo of timer and
remaining time var to do this with JUST a timer

Most of the changes here are just swapping over wires to a setter to
make signal registration work\

## Why It's Good For The Game

Less sleeping around explosions means less dropped ticks after a bomb
goes off. Good just in general
Also this excises dumb boomer code and adds some hooks for other devs to
use (we should use wires more man)
2023-06-19 02:18:48 +00:00
OrionTheFox 271fa9e862 GAGS-ifies the Hawaiian Shirt, adds it to the ClothesMate (#75866)
## About The Pull Request
Technically a port of
https://github.com/Skyrat-SS13/Skyrat-tg/pull/17085
On the tin, it was mentioned that they could use it, I had these
on-hand. Probably should have been up here in the first place anyways.

![dreamseeker_ktdTANkHU9](https://github.com/tgstation/tgstation/assets/76465278/1c067db1-7e5a-4a8e-b912-9df0182a39ea)

![dreamseeker_0jPbNpXygu](https://github.com/tgstation/tgstation/assets/76465278/d9d27197-5971-44d2-bcff-24eeb23e4a9a)

![dreamseeker_AVZClDGGRt](https://github.com/tgstation/tgstation/assets/76465278/6736429b-3ef2-499f-b147-342254f44b1d)

Also makes them available in the ClothesMate so that crew can enjoy this
beautiful... just... beautiful item.

Worth noting, this item may be reworked in the future to an accessory.
This is just the greyscale half, the hard part. Changing the type to an
accessory in the future is easy now.
## Why It's Good For The Game
GAGS is good for items like this that just deserve lots of color. And
making them available for crew to actually use is cool.
## Changelog
🆑
add: The Hawaiian Overshirt is now GAGS, and available to crew in the
ClothesMate. Mahalo a aloha!
/🆑
2023-06-06 15:54:04 -04:00
Helg2 6378ef5687 Changes the base amount of bone gel. (#75851)
## About The Pull Request
Changed the amount from 1 to 5 for original `bone_gel` so it's easier
for mappers to add the right bone gel.
Deleted subtype `/four` and added subtype `/one` specifically for bone
gel creating.
Increased from 4 to 5 because surgical tape has 5.
## Why It's Good For The Game
Having 1 bone gel near 5 surgical tapes always seemed off.
## Changelog
🆑
balance: Bone gel standart amount has been increased to 5.
/🆑
2023-06-05 21:13:06 -04:00
KingkumaArt b7fb33ab00 Adds Ethereal Drinks (#75487)
## About The Pull Request
Adds 3 new electric-themed drinks for ethereals. They count as food for
etherials, (not much, one glass is about equivelant to a plasma burger),
but humans can drink them as well, among other effects.
## Why It's Good For The Game
As an ethereal player, I do feel while our food is convenient, that we
miss out on the RP other species get from going to the bar. This allows
for etherials to order drinks from the bartender. All effects work on
all races, with the hunger satiation as the exception.
## Changelog
🆑
add: Voltaic Yellow Wine - New "base" drink, found in booze-o-mat. No
special effects besides acting as a weak ethereal food. Not very potent
in terms of alcohol.

add: Telepole - New mixed drink themed after thunderstorms, gives the
same shock-resist grey bull does. Made from 1 part Voltaic Wine, 1 Part
Sake, and 2 parts Dark & Stormy. Moderately potent.

add: Pod Tesla - New mixed drink, themed after the old removed tesla
engine (the singulo gets a cocktail, it should too!) Grants a brave -
bull phobia resist, and a stronger grey bull shock resist allowing you
to (temporarily) resist tesla arcs from reactive armor and the SM's
tesla coils. Gives a pleasant thought to whoever drank it, because this
thing is a pain to make. Made from 5 parts admiralty, 5 parts telepole,
and 3 parts brave bull. Highly potent.

qol: Unsure if this counts as QOL or balance, but the fact sol dry is in
3 different cocktails but the bartender has to buy 30u cans of it made
me feel it deserved being added to the soda dispenser.

image: Added graphics for the above drinks, shown below, from left to
right: Pod tesla, Voltaic Yellow wine, Telepole, Voltaic Wine (bottle)
<img width="171" alt="image"
src="https://github.com/tgstation/tgstation/assets/69398298/901b2f64-1723-44b6-8f78-ef21bd477d96">


/🆑

---------

Co-authored-by: Aki Ito <11748095+ExcessiveUseOfCobblestone@users.noreply.github.com>
2023-05-27 19:00:55 -04:00
Charlotte 97665d4e54 Adds Hereditary Manifold Sickness, a Chronic Illness Quirk (#75035)
## About The Pull Request

Adds a new quirk called Chronic Illness. It provides a -12 score as it's
a pretty life-altering quirk, but could give way to interesting RP.

- Hereditary Manifold Sickness (HMS) can not be cured, it can only be
delayed and treated using a new unmakable vaccine called
"Sansufentanyl". You spawn with 6 pills and are able to order crates
containing 12 more from cargo as it's proprietary to Interdyne.

- HMS has 5 stages total.
Stage 1 does nothing
Stage 2 gives minor effects 
Stage 3 becomes debilitating
Stage 4 is a danger zone.

Upon reaching Stage 5, there are 4 possibilities, 1 is a recovery back
to stage 1, and the other 3 are deaths which I won't explain here to
avoid ruining it. (read the code I guess.)

This also adds a new traitor objective to infect someone with HMS.

- [x] Correcting the chronic aspect.

- [x] Add traitor objective.

- [x] Tweaking for fairness.

## Why It's Good For The Game

HMS is a new quirk that gives a much more hardcore junky or tumor
playstyle. Neglecting HMS can mean the end of your shift. it's not
something you want to mess with.

It puts a reliance on cargo rather than medical for a quirk and gives a
use case for money. (price may be tweaked still). I think it'd be
interesting to see if people will start mugging or robbing the vault
more to get their life-saving medication.

## Changelog
🆑
add: Interdyne has released a new medication to treat those who are in
the wrong timeline!
add: Interdyne has also realized this is VERY profitable! They've begun
arming their operatives with an autoinjector.
/🆑

---------

Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
2023-05-24 09:03:15 +12:00
carlarctg 111cb8eabe Fixes ducky shoes having clown shoe slowdown and being a clown shoe subtype (#75421)
## About The Pull Request


![image](https://user-images.githubusercontent.com/53100513/235573548-0326fea9-348a-4b04-ac04-f18f9d748bda.png)

![image](https://user-images.githubusercontent.com/53100513/235573577-37cc5b80-d011-4f49-9805-40ffffae9c0c.png)

This is unintended and so it's a fix!

Remade because i pushed to the wrong branch like a DUMBASS

## Why It's Good For The Game

More incentive to quack quack quack quack. Clown shoes have slowdown for
the clown, not for ducks. The subtype just inherited it.
## Changelog
🆑
fix: Fixes ducky shoes having clown shoe slowdown
/🆑
2023-05-22 18:58:37 -06:00
Watermelon914 a98706ff8b Adds TTS to the game. Players can select their own voices in preferences. (#74775)
Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2023-05-15 16:21:54 -07:00
Andrew 52b66901b4 Saltpetre in NutriMax contraband pool (#75222) 2023-05-10 13:52:25 -05:00
Lamb 77a4306df7 Coroner Tweaks (#75250)
I played some as coroner, and realized there were a few things that were
either errors in the original PR, left out, or that could be added to
improve the feel of the job a little more. It ended up covering a fair
bit of ground, with a number of changes, but i'll go over the biggest
parts here:

First up! jumpsuits and jumpskirts! the medical doctor job, despite
starting with scrubs, still has a jumpsuit and skirt available in the
medidrobe. So, i added a pair for coroners to the mortidrobe, enjoy!
(and thanks to the kind morgue skeleton for modeling these with me!)
also, you may notice some black pixels on my head - that's because i
added a black scrubcap to the mortidrobe as well! the sprites were done
for this already, so when i noticed it was absent i opted to include it
here, for consistency with the other scrub types in the game.
next up, we have the other addition of this PR, the coroner's medkit
this is mainly for storing and consolidating coroner job items, in a
flavorful and interesting way. the coroner spawns with the larger
variant, that has more storage, but can still only hold up to small
items. it also includes a few more flavor items, that the compact
version lacks. the smaller version can be obtained in the autopsy kit
from cargo, and one more is available in the mortidrobe.
smaller changes:
i fixed some weird transparent pixels on the autopsy scanner itself, and
cleaned up some incorrect shading on the obj icon for the black scrubs.
before and after here:
i also gave the coroner their own type of pda, since they were
previously inheriting the medical one. this one matches their color
palette! in addition to this, i swapped the botkeeper app they
previously had for plexagon crew manifest.
2023-05-08 19:15:24 +00:00
Thunder12345 154c9ebe82 Stock Part Resprite (#75149)
## About The Pull Request

Resprites stock parts to bring them up to date, changes manipulators to
servo motors as I couldn't make manipulators work well at this scale.


![image](https://user-images.githubusercontent.com/5479091/236561493-b34da588-dee1-405a-8557-d11741ae3f21.png)
(Power cells sold separately)

## Why It's Good For The Game

The old stock parts are dated, in some cased quite ugly, and in the case
of manipulators a ball of assorted pixels. Incidentally removed a couple
of single letter var names.

## Changelog
🆑
image: Stock parts have been resprited.
code: Manipulators have been renamed to servo motors, all related types
have been repathed to match.
/🆑
2023-05-07 23:52:03 -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
ArcaneMusic f2fd69a49a Minerals have been refactored so costs and minerals in items are now in terms of mineral defines. (#75052)
Ladies, Gentlemen, Gamers. You're probably wondering why I've called you
all here (through the automatic reviewer request system). So, mineral
balance! Mineral balance is less a balance and more of a nervous white
dude juggling spinning plates on a high-wire on his first day. The fact
it hasn't failed after going on this long is a miracle in and of itself.

This PR does not change mineral balance. What this does is moves over
every individual cost, both in crafting recipes attached to an object
over to a define based system. We have 3 defines:

`sheet_material_amount=2000` . Stock standard mineral sheet. This being
our central mineral unit, this is used for all costs 2000+.
`half_sheet_material_amount=1000` . Same as above, but using iron rods
as our inbetween for costs of 1000-1999.
`small_material_amount=100` . This hits 1-999. This covers... a
startlingly large amount of the codebase. It's feast or famine out here
in terms of mineral costs as a result, items are either sheets upon
sheets, or some fraction of small mats.

Shout out to riot darts for being the worst material cost in the game. I
will not elaborate.

Regardless, this has no functional change, but it sets the groundwork
for making future changes to material costs much, MUCH easier, and moves
over to a single, standardized set of units to help enforce coding
standards on new items, and will bring up lots of uncomfortable balance
questions down the line.

For now though, this serves as some rough boundaries on how items costs
are related, and will make adjusting these values easier going forward.

Except for foam darts.

I did round up foam darts.

Adjusting mineral balance on the macro scale will be as simple as
changing the aforementioned mineral defines, where the alternative is a
rats nest of magic number defines. ~~No seriously, 11.25 iron for a foam
dart are you kidding me what is the POINT WHY NOT JUST MAKE IT 11~~

Items individual numbers have not been adjusted yet, but we can
standardize how the conversation can be held and actually GET SOMEWHERE
on material balance as opposed to throwing our hands up or ignoring it
for another 10 years.
2023-05-03 14:44:51 +00:00
tralezab 90c8d91742 Gives more berets to the station (#74820)
## About The Pull Request

Adds more berets to the vendors.

## Why It's Good For The Game


![image](https://user-images.githubusercontent.com/40974010/232664125-70890d3e-4a33-46ea-ba7b-4730cd6e6fca.png)

Well if sinful declares there's a beret drought we gotta do something
about it

## Changelog
🆑
add: Added new berets to the vendor
/🆑
2023-04-20 15:43:11 -04: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
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
tralezab c3b78761d2 Adds Chuunibyou Spell + Granter (#74404)
## About The Pull Request

My April fools this year, though not going to call it one because some
people think it should just be actually merged.

### Chuunibyou Powers 🌟

Wizard gets a new spell for 2 points that gives him the powers of
chuuni. This makes them have ridiculous shouted invocations for all
their spells, their spells are colored pink, and they heal slightly when
casting one.

While mostly a meme spell, I could see a tailored loadout like lichdom
and splattercasting that takes advantage of the unique spellcasting
changes, like a very low cooldown spammable loadout to heal quickly.

There is also a granter book in the library, which teaches a version of
chunni that doesn't heal.

#### Medical eyepatch

I added it, chuuni wizards get a NODROP version.

## Why It's Good For The Game

This PR bestows upon the game the glorious gift of chuuni powers, the
ultimate manifestation of my hidden potential and the secret truth of
this world, which only I and a few chosen ones can comprehend and
unleash! Why wouldn't you want it?!

In all seriousness, it is a unique wizard playstyle and it will make for
some funny memes. Beyond wizard, the chaplain, heretics, or mime can
read it in the library for a very silly round. I like it!

## Changelog
🆑
add: Chuunibyou wizards, and chunni granters in the library
add: Medical eyepatches
/🆑
2023-04-03 17:11:00 +02: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
Helg2 94b482a999 Adds wire brush to janivend and janiborg. Also adds ability to put it in janibelt. (#74139)
## About The Pull Request
Adds wirebrush to janitor vendor, ability to put it in janitor belt and
adds it for janitor borg.
Just though that if it's in-game then why is it just in autolathe.
It won't be used so rarely and it'll be obtainable not just by
autolathe.
2023-03-21 18:36:38 +00:00
Ray 75b28fc607 Adds service radio to jani/curator/chaplain/lawyer vendor (#74086)
## About The Pull Request
**Adds service radio to jani/curator/chaplain/lawyer vendor**
## Why It's Good For The Game
Janitor/curator/chaplain/lawyer belong to service department; yet
janitor/curator/chaplain/lawyer have no source of getting service radio
if transferred/lost. They don't have it in their vendor or closet.
## Changelog
🆑
qol: adds service radio to jani/curator/chaplain/lawyer vendor
/🆑
2023-03-19 18:24:44 -06:00
LemonInTheDark 60e85fa947 Polishes some side sources of light and color (#73936)
## About The Pull Request

[Circuit Floor
Polish](https://github.com/tgstation/tgstation/commit/6b0ee9813271f693ceb44ad42277c36ef2e71268)

Circuit floors glow! but it looks like crap cause it's dim and the
colors are washed out.
I'd like to make them look nicer. Let's make them more intense and
longer range, and change the colors over to more vivid replacements.

While I'm here, these should really use power and turn on and off based
off that.
Simple enough to do, just need to hook into a signal (and add a setter
for turf area, which cleans up other code too).

[Desklamp
Upgrade](https://github.com/tgstation/tgstation/commit/8506b13b9c97bf740c3e97db04450555387dd126)

Desklamps look bad. They're fullwhite, have a way too large
range.Crummy.
Let's lower their lightrange from 5 to 3.5, and make the ornate ones
warmer, and the more utilitarian ones cooler. The clown one can be
yellow because it's funny

I'm renaming a color define here so I'm touching more files then you'd
expect

[Brightens
Niknacks](https://github.com/tgstation/tgstation/pull/73936/commits/835bae28e9eb9946be53c9f5dac0a0a39f15ef21)

Increases the light range of request consoles, status displays,
newscasters, and air alarms (keycard machines too, when they're awaiting
input at least)
Increases the brightness of air alarms, I think they should be on par
with apcs, should be able to tell when they're good/bad.
Increases the brightness of vending machines (I want them to light up
the tiles around them very lightly, I think it's a vibe)

Fixes a bug with ai status displays where they'd display an emissive
even if they didn't have anything on their screen, looking stupid.
This was decently easy but required a define. Looked really bad tho

## Why It's Good For The Game

Pretty

<details>
<summary>
Circuit Floors
</summary>

Old

![image](https://user-images.githubusercontent.com/58055496/224534470-c6eac5f5-5de6-40e9-897d-3212b8796d81.png)

![image](https://user-images.githubusercontent.com/58055496/224534477-ad412ad9-f7c4-44ae-ad75-a1a2c9bd17be.png)

New

![image](https://user-images.githubusercontent.com/58055496/224534486-b7b408a3-546c-4f90-aa9f-0e58bf8128ad.png)

![image](https://user-images.githubusercontent.com/58055496/224534496-626458f7-ab63-429c-a5db-eae9c784d06a.png)
</details>

<details>
<summary>
Desk Lights
</summary>

Old

![image](https://user-images.githubusercontent.com/58055496/224534513-9868b0b8-bc73-4b45-b986-8445078a8653.png)

![image](https://user-images.githubusercontent.com/58055496/224534518-bbbc8c6d-b59e-4f28-a31c-6c6a7e2c2885.png)

New

![image](https://user-images.githubusercontent.com/58055496/224534529-7988f440-03be-42ef-894c-b9e77f577ae5.png)

![image](https://user-images.githubusercontent.com/58055496/224534532-c3f2c6bf-c925-4a59-a8f9-10bb955a9942.png)
</details>

The niknack changes are more minor so I'm not gonna grab photos for
them. I can if you'd like but I don't think it's necessary. Mostly a
vibes in dark spaces sorta thing
 
## Changelog

🆑
add: I made circuit floors brighter and more vivid.
add: Made air alarms, vending machines, newscasters, request consoles,
status displays and keycard machines slightly "brighter" (larger light
range, tho I did make air alarms a bit brighter too)
add: Tweaked desklamps. Lower range, and each type gets its own coloring
instead of just fullwhite.
fix: AI displays are no longer always emissive, they'll stop doing it if
they aren't displaying anything. Hopefully this'll look nicer
/🆑
2023-03-14 16:34:52 -06:00
Rem/Dess a01d0263e7 Adds a martial artist gi to the AutoDrobe. (#73794)
## About The Pull Request
On a dark and stormy night, @Cheshify asked in OOC if anyone would be
down to make a martial arts gi of no known origin for an event idea they
had.

Naturally, I decided to put my talent (CITATION NEEDED) to use, and I
have both sprited and coded in (the latter with the help of Cheshify
ofc) the aforementioned gi of no known origin.
<details>
<summary>Picture</summary>


![gokuss13](https://user-images.githubusercontent.com/117083785/222961961-a94c88fb-adae-4d2a-96c9-0f347e17c40b.png)

</details>

## Why It's Good For The Game


![image](https://user-images.githubusercontent.com/117083785/222961938-0f5c7508-0197-45f4-82e0-2d1ea2b2ee65.png)

## Changelog

🆑 dessysalta, Cheshify
add: Nanotrasen has added a martial artist gi to the AutoDrobe for those
who want to go even further byond.
imageadd: Aforementioned gi sprites.
/🆑
2023-03-06 14:11:10 +00:00
Thedragmeme 88d6fae7c5 Tape Wizard, the distant cousin of the Paper Wizard (#73739)
## About The Pull Request

Adds a new wizard costume and non magical variant, made exclusively from
tape.


![qTwAAAAASUVORK5CYII](https://user-images.githubusercontent.com/81540056/222332110-96af21bc-d568-40fc-a813-1464577521ff.png)


## Why It's Good For The Game

New unique nice looking thing = good 
Opens the door for more uses of an already niche mechanic

![ducktape](https://user-images.githubusercontent.com/81540056/222332139-83f01340-299a-48e0-b68a-3c5e57e20547.png)
Roleplay.

## Changelog
🆑
add: Adds the tape wizard costume, both a real and fake variant
add: Adds the costume behind the autodrobe contraband wire, and the real
variant in the wiz den
🆑
2023-03-03 19:39:12 -08:00
ShizCalev d7ae9c580c Fixes the cops not being called when minors try to purchase cigarettes from vending machines. (#73008)
radios in nullspace are bad.
```
[2023-01-08 15:10:45.804] runtime error: Cannot read null.z
 - proc name: New (/datum/signal/subspace/vocal/New)
 -   source file: broadcasting.dm,122
 -   usr: Ilya Volyova (/mob/living/carbon/human)
 -   src: /datum/signal/subspace/vocal (/datum/signal/subspace/vocal)
 -   usr.loc: the floor (131,87,2) (/turf/open/floor/iron)
 -   call stack:
 - /datum/signal/subspace/vocal (/datum/signal/subspace/vocal): New(the station bounced radio (/obj/item/radio), 1359, The ShadyCigs Deluxe (/atom/movable/virtualspeaker), /datum/language/common (/datum/language/common), "SECURITY ALERT: Underaged crew...", /list (/list), null)
 - the station bounced radio (/obj/item/radio): talk into impl(the ShadyCigs Deluxe (/obj/machinery/vending/cigarette), "SECURITY ALERT: Underaged crew...", null, /list (/list), /datum/language/common (/datum/language/common), null)
 - world: ImmediateInvokeAsync(the station bounced radio (/obj/item/radio), /obj/item/radio/proc/talk_into... (/obj/item/radio/proc/talk_into_impl), the ShadyCigs Deluxe (/obj/machinery/vending/cigarette), "SECURITY ALERT: Underaged crew...", 1359, /list (/list), /datum/language/common (/datum/language/common), null)
 - the station bounced radio (/obj/item/radio): talk into(the ShadyCigs Deluxe (/obj/machinery/vending/cigarette), "SECURITY ALERT: Underaged crew...", 1359, /list (/list), /datum/language/common (/datum/language/common), null)
 - the ShadyCigs Deluxe (/obj/machinery/vending/cigarette): vend(/list (/list), null)
 - the ShadyCigs Deluxe (/obj/machinery/vending/cigarette): ui act("vend", /list (/list), /datum/tgui (/datum/tgui), /datum/ui_state/default (/datum/ui_state/default))
 - /datum/tgui (/datum/tgui): on act message("vend", /list (/list), /datum/ui_state/default (/datum/ui_state/default))
 - /datum/callback/verb_callback (/datum/callback/verb_callback): InvokeAsync()
 - /datum/tgui (/datum/tgui): on message("act/vend", /list (/list), /list (/list))
 - /datum/tgui_window (/datum/tgui_window): on message("act/vend", /list (/list), /list (/list))
 - tgui Topic(/list (/list))
 - Ilya Volyova (/client): Topic("type=act%2Fvend&payload=%7B%22...", /list (/list), null)
```
🆑 ShizCalev
fix: Fixed the cops not being called when minors try to purchase
cigarettes from vending machines.
/🆑
2023-01-29 11:42:44 +01:00
Rhials b7bf3db955 Vendors now tip in the opposite direction when struck from inside of a wall (#72898)
When someone standing on a closed turf strikes a vendor, the vendor will
now instantly tip over, in the _opposite_ direction. This will provide
no chance for goodies, meaning you cannot build walls on top of yourself
and abuse this for free stuff.
2023-01-28 22:22:12 +00:00
Fikou f62c491ca2 adds atmospheric gloves, small resprite of firefighter gear, repaths stupid glove paths (#72736)
## About The Pull Request
repaths a lot of gloves off /color because they were incredibly stupid
firefighter gear has gotten an update (it doesnt cover hands anymore
though, you need something else)
firefighter helmets no longer hide your mask or glasses

![image](https://user-images.githubusercontent.com/23585223/212542599-c004d0e4-c141-40b4-a1bb-c838f9893c4b.png)
fixed engine goggles starting with darkness vision
to the atmos lockers adds atmospheric gloves, a pair of thick (chunky
fingers) gloves that are fireproof and fire protective, slightly shock
resistant and let you fireman carry people faster.
atmospheric firefighter helmets now are a subtype of welding hardhats,
you can enable a welding visor.
welding hardhats change mode with right click instead of altclick

## Why It's Good For The Game
im not a good spriter but i think this resprite makes them fit nicer
with other engi equipment
lets me firefighter rp

## Changelog
🆑
add: Atmospheric Gloves, thick gloves that are fully fireproof and fire
protective and let you fireman carry people faster.
fix: fixes engine goggles starting with darkness vision
qol: firefighter helmets can now enable a welding visor
qol: welding hardhats change mode with right click instead of altclick
balance: firesuits no longer protect your hands
/🆑
2023-01-17 09:55:41 -08:00
Slurge00 8aee0dd261 Adds the eyepatch to the Autodrobe (#72742)
Adds the eyepatch to the Autodrobe costume vendor.
2023-01-16 18:59:18 +00:00
tralezab 979b26d52e Unironically removes the atmos and black beret (#72722)
## About The Pull Request

Removes atmos berets

## Why It's Good For The Game
Berets shouldn't be thrown into every job, it's milsim circlejerking
dressup shit that creeps out of our milsim containment jobs (security)
and into other innocent jobs. There is absolutely no reason for this job
to have a beret just straight up. Can we add unique hats to the game,
not the same one recolored every way to Sunday? That's my problem. We
don't have unique clothes, we have a billion types of beret when the
BASE BERET TYPE has `IS_PLAYER_COLORABLE_1` so ANYONE can color it. So
again, why do we have the atmos beret? To clog the wardrobe, a vending
machine added specifically because we couldn't stop clogging the
original locker atmos techs spawned in?

The black beret has the same problem: recolored item when you can get
the item of any color

## Changelog
🆑
del: Atmospherics beret and black beret
/🆑
2023-01-16 10:58:28 +13:00
NamelessFairy f2942acfb3 Hologram Projectors for TGC! (#72226)
## About The Pull Request

Adds a new holodeck layout that features a TGC card fighting arena,
complete with holographic representations of your cards. Cards act the
same as physical cards when displayed except you can see the stats of
the cards without needing to inspect and the cards stats can be modified
on the fly for keeping track of equipment.
Example:

![image](https://user-images.githubusercontent.com/40036527/209706941-b6def501-12f3-4ba6-8700-3b4b8ffd7c8f.png)
## Why It's Good For The Game

TGC is a significantly more complicated game then the other ones we have
like UNO and CAS and is extremely messy to play on a table ingame, this
provides a much clearer way of visualizing the game by having all active
creature stats on full display at all times without having to rely on
inspecting cards to check.
## Changelog
🆑
add: Introducing a new holodeck map, the TGC Arena, featuring hologram
projectors for your trading cards.
fix: Janitor and Intern TGC cards are now considered creatures rather
than just humans.
balance: The price of card packs has been reduced from double a paycheck
to 3 quarters of one.
balance: The number of cards available in the good clean fun vendor has
been doubled.
/🆑
2023-01-07 09:53:59 -08:00
NamelessFairy 02315a9c0d Minor detectives spawn with a candy cigarette and apple juice filled flask (#72422)
If a detective joins who is 20 or younger their cigarette is changed for
a candy one and their flask is filled with apple juice. Also adds candy
cigarettes' to the detective vendor.

Minor crew members are unable to use cigarette vendors or acquire
alcohol in game without effectively committing a crime, it doesn't make
sense for minor detectives to spawn with them. I also think that minor
characters trying to obtain narcotics can be a pretty entertaining RP
starter as a overall harmless crime and something that requires
interaction with other members of the crew.
2023-01-07 10:47:02 +00:00
MrMelbert acb96fee1d Refactors memories to be less painful to add and apply, moves memory detail / text to memory subtypes. Adds some new memories to demonstrate. (#72110)
## About The Pull Request

So, a huge issue with memories and - what I personally believe is the
reason why not many have been added since their inception is - they're
very annoying to add!

Normally, adding subtypes of stuff like traumas or hallucinations are as
easy as doing just that, adding a subtype.

But memories used this factory argument passing method combined with
holding all their strings in a JSON file which made it just frustrating
to add, debug, or just mess with.

It also made it much harder to organize new memories keep it clean for
stuff like downstreams.

So I refactored it. Memories are now handled on a subtype by subtype
basis, instead of all memories being a `/datum/memory`.

Any variety of arguments can be passed into memories like addcomponent
(KWARGS) so each subtype can have their own `new` parameters.

This makes it much much easier to add a new memory. All you need to do
is make your subtype and add it somewhere. Don't need to mess with jsons
or defines or anything.

To demonstrate this, I added a few memories. Some existing memories had
their story values tweak to compensate.

## Why It's Good For The Game

Makes it way simpler to add new memories. Maybe we'll get some more fun
ones now?

## Changelog

🆑 Melbert
add: Roundstart captains will now memorize the code to the spare ID
safe.
add: Traitors will now memorize the location and code to their uplink.
add: Heads of staff winning a revolution will now get a memory of their
success.
add: Heads of staff and head revolutionaries who lose their respective
sides of the revolution also get a memory of their failure.
add: Completing a ritual of knowledge as a heretic grants you a quality
memory.
add: Successfully defusing a bomb now grants you a cool memory. Failing
it will also grant you a memory, though you will likely not be alive to
see it.
add: Planting bombs now increase their memory quality depending on how
cool the bomb is.
refactor: Memories have been refactored to be much easier to add.
/🆑
2023-01-03 11:23:31 -08:00
san7890 4efacff9fa Completely Culls req_access_txt/req_one_access_txt (#72281)
Hey there,

Now that every instance of `req_access` and `req_one_access` is a list
of strings, there is absolutely no reason for
req_access_txt/req_access_one_txt to exist. In fact, any instance where
they were still used in the codebase was very convoluted and was very
broken! Don't worry, I fixed it all out, and life is good.

I also dmdoc the surviving access variables, because those were missing.
I went on the side of caution and made a more verbose documentation with
an example just to have people really grasp this (it took me a while to
actually get it)

I believe that we changed _everything_ over to the
req_access/req_one_access system earlier this year in VV, but the
problem is that _new mappers don't understand the difference between the
two systems_. In fact, the "txt" system is completely redundant since
all it does is transition stuff to the "base" system. So, let's just
completely cull the one that's all but deprecated and ensure this
confusion no longer arises. The whole purpose of "txt" seemed to be to
convert the access, but it's all pointless now that we can just read the
list directly.

I'm also 99% certain that the "access check" on vending machines broke
(and didn't seem to have correct logic in the first place? I
legitimately couldn't find a case where it could fail in testing, so I
changed that up), and that's fixed up now. Let me know if I was clueless
there. I know it's short-circuiting now as opposed to "all must be
true", but it just didn't work.
2023-01-01 13:52:02 +00:00
jughu 84182bc05c Fixes a oversight with cummerbund. closes #72357 (#72373)
Turns cummerbund from a full 7 slot belt for any item into a fannypack
subtype(which holds 3 items)
2023-01-01 13:23:30 +00:00
Zephyr 6a0c884410 [no gbp] removes all duplicate armor datums (#72354)
## About The Pull Request
closes #72348 
Title
## Why It's Good For The Game

My bad
## Changelog
Heres the script I used this time if you want to
```cs
var baseDir = Environment.CurrentDirectory;

var allFiles = Directory.EnumerateFiles($@"{baseDir}\code", "*.dm", SearchOption.AllDirectories).ToList();
var known = new Dictionary<string, List<KeyValuePair<string, int>>>();

foreach (var file in allFiles)
{
	var fileLines = File.ReadAllLines(file);
	for (var i = 0; i < fileLines.Length; i++)
	{
		var line = fileLines[i];
		if (line.StartsWith("/datum/armor/"))
		{
			var armorName = line.Replace("/datum/armor/", "").Trim();
			if (!known.ContainsKey(armorName))
				known[armorName] = new List<KeyValuePair<string, int>>();
			var knownList = known[armorName];
			knownList.Add(new KeyValuePair<string, int>(file, i));
		}
	}
}

Console.WriteLine($"There are {known.Sum(d => d.Value.Count)} duplicate armor datums.");

var duplicates = new Dictionary<string, List<int>>();
foreach (var (_, entries) in known)
{
	var actuals = entries.Skip(1).ToList();
	foreach (var actual in actuals)
	{
		if (!duplicates.ContainsKey(actual.Key))
			duplicates[actual.Key] = new List<int>();
		duplicates[actual.Key].Add(actual.Value);
	}
}

Console.WriteLine($"There are {duplicates.Count} files to update.");

foreach (var (file, idxes) in duplicates)
{
	var fileContents = File.ReadAllLines(file).ToList();
	foreach (var idx in idxes.OrderByDescending(i => i))
	{
		string line;
		do
		{
			line = fileContents[idx];
			fileContents.RemoveAt(idx);
		}
		while (!String.IsNullOrWhiteSpace(line));
	}
	File.WriteAllLines(file, fileContents);
}
```
2022-12-30 03:43:36 -05:00
Zephyr 72add64520 Refactors armor into dedicated subtypes (#71986)
## About The Pull Request

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

Code is cleaner, and more readable/intuitive
Technically closes
https://github.com/tgstation/dev-cycles-initiative/issues/8
## Changelog
🆑
refactor: armor, from the ground up basically
/🆑

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2022-12-23 16:21:22 -08:00
jughu 76f413dbce Adds some costumes to autodrobe (#72103)
Adds a various amount of costumes that were added in the game before in
https://github.com/tgstation/tgstation/pull/30303

More costumes is always nice especially ones in the code that aren't
used and pretty much only were available for chamkits
2022-12-22 12:59:51 -06:00
Tim f6caf9a008 Add language variety to machines that speak (#71643)
## About The Pull Request
This builds on #70278 by giving other machines (vendors, newscasters,
computers, etc.) the ability to speak different languages. If the
station "Bot language malfunction" trait is rolled, then these machines
will select a random race starting language. If a machine is EMP'd then
it has a chance to change the language. There is also a language wire
that can be pulsed to change the language for vending machines.

Default language for machines is galactic common, but there are rare
exceptions:

- Beach vendors will now speak beachbum
- Syndicate vendors will now speak codespeak
- Changeling vendors will now speak a random language after each slogan 

## Why It's Good For The Game
More depth to the language feature.

## Changelog
🆑
add: Add language variety to machines that speak. You can also pulse the
vendor language wire to make it switch languages or EMP a machine to get
the same effect.
add: Shambling cola vendors will now speak a different language each
time they talk. Syndicate vendors will now speak codespeak. Beach
vendors will now speak beachbum.
/🆑
2022-12-21 14:18:52 -08:00
EvilDragonfiend 392204b697 Fixes vendor showing weird glass icons (#71929)
## About The Pull Request
Fixes vendor showing weird glass icons
## Why It's Good For The Game
bug fix good
## Changelog
🆑
fix: vendor no longer shows glass icons in a specific condition
/🆑
2022-12-20 00:54:03 -08:00
LemonInTheDark cf02f62298 useless update_appearance reduction, emissive_blocker micro optimization (saves a second of init) (#71658)
## About The Pull Request

[Saves 0.2 seconds of init time. 50% of emissive
blockers](https://github.com/tgstation/tgstation/commit/8318b648f6d32844aacbfb4c309152cd45801f5c)

Emissive blockers are a decent expense during init, even these, which
are the ones that update outside of initialize.
I've inlined them, removed some redundant vars and checks, reduced the
arg count, and shifted some things around. This ends up saving 200ms, or
50% of its total cost.

I also shifted mutable_appearance about a bit. it's not a massive
saving, but it is technically faster

[Prevents a few redundant appearance_updates, saves 0.8 seconds of
init](https://github.com/tgstation/tgstation/commit/5475cd778b66b22b1e2c8d86b2c6d59fb84f219a)

Prequisit info: update_appearance is decently expensive
It's good then to only do it if we have a reason to, right?

Me and moth were shooting the shit about just general init time, and we
came up with the idea of tracking which update_appearances actually
"worked" and which didn't.

That bit comes later, let's enjoy the fruits of that work first

First, holograms were calling update_appearance on process, for almost
no reason.
I patched the one event they don't already "react" to, and then locked
it behind a change decection if.
good for live, doesn't impact init.

Next, decals. If you add a decal to something before it inits, it'll
react to the after successful init signal.
The trouble is the same atom could have its appearance updated from this
MORE then once, since decals can be stacked on tiles, and signal
unregisters don't work once the signal is sent.
So we add a flag to track if we've had this happen to us or not, so it
only happens once.
saves 80 ms

Power! lots of things call power_change on init, often more then once.
We'll update appearance for each of those calls, even if only one is an
actual change.
That's silly, better to track what sort of power we're using for our
appearance and go off that changing

This was taking about 300ms. Really stupid

Icon smoothing. After emissive blockers were added, any change to
something's icon smoothing would lead to an update_appearance call.
Nasty shit, specially cause of walls, which don't even use emissive
blockers.
Ok then, so we'll always update appearance for movables, and will allow
turfs that are interested to hook it manually.
Not many of those anyhow
This is slightly a dev ux thing, but it saves 600ms so I think it's
worth it. Rare case anyway

Telecomms:
telecomm machines were updating appearance on process. This is to cover
for them turning on/off on process.
Better then to just check if on actually changed.
This cost adds up midgame, doesn't impact init tho

Materials:
There's this update_appearance call in material on_apply. it doesn't do
anything.
The logs will lie to you and say it does, but it's just like reapplying
emissives. It doesn't need to exist
Saves like 50ms

Canisters:
Live thing, lots of time wasted updating appearance for no reason, lets
see if we change anything first yes?

[Uses defines to wrap update_appearance for
tracking](https://github.com/tgstation/tgstation/commit/4fa82e1c9d93577aadb3c743f17196331f62e67c)

[Undoes _update_appearance changes, instead reccomends 2 regexes to
use](https://github.com/tgstation/tgstation/commit/a8c8fec57a4e43d1fa636b5ac68459903faa9fc5)

I need file and line number for my tracking, so I need to override
update_appearance calls, and also preferably not require every override
of update_appearance to handle dummy file + line args.

So instead, I created a wrapper proc that checks to see if appearanaces
match (they're unique remember, the two of the same visual appearance
will be equivalent)
The trouble is I can't intercept JUST proc calls, or JUST function
definitions with defines. it needs to be both.

So I renamed the /update_appearance proc to /_update_appearance

this way I can capture old uses, and don't need to worry about merge/dev
brain skew

~~It does mean that all update_appearance proc definitions now look
weird tho.
My profiling is leaking into dev ux. I wish I had better templating.~~

**The above is no longer being pr'd**, it's instead just recommended via
a few regexes adjacent to the define.
Smelled wrong anyhow

[Adds a setter for panel_open, so I can update_appearance on
it](https://github.com/tgstation/tgstation/pull/71658/commits/cf1df8a69fc1a816391d085ee7419b14f9fe9167)

## Why It's Good For The Game

Speed
2022-12-20 00:51:52 -08:00
Jolly 27be942c54 Gives the MegaSeed vendor some love; Gives the seeds categories and organizes them (#71799)
## About The Pull Request
Title.

## Why It's Good For The Game
Sorts the seeds out from one major category to the best of my ability.

They're now split up amongst Fruits, Vegetables, Flowers and
Miscellaneous.


![image](https://user-images.githubusercontent.com/70232195/207647509-5ff371ff-8cc4-4e8d-999a-9890f7387f81.png)

And yes, the contraband section still works.

## Changelog

🆑 Jolly
qol: MegaSeed vendors had their seeds distributed through 4 categories;
Fruits, Vegetables, Flower and Miscellaneous.
/🆑
2022-12-14 19:15:04 -08:00
tattle e928449067 3/4ths-ify some wall mount sprites (by Kryson and Viro) (#71788)
posters are now 24px tall, new sprites for nanomeds, emergency safes, and ticket machines
(by Kryson)
2022-12-09 18:02:16 -03:00
Rimi Nosha c60b5575b4 TGUI Latejoin Menu! (#71531)
## About The Pull Request

Converts the latejoin menu to TGUI, and makes it give reasons for why a
job is unavailable instead of hiding it!

<details>
<summary>Cool Images!</summary>

<image
src=https://user-images.githubusercontent.com/106692773/205135570-c8b788f1-1ff0-4e6d-b53d-e2119317c37b.png>
<image
src=https://user-images.githubusercontent.com/106692773/205135598-2ac9e138-37dc-4baf-ae33-deb0990616cd.png>
<image
src=https://user-images.githubusercontent.com/106692773/205135609-ae6b840b-40b5-4248-bd30-5fdadd6582f2.png>
<image
src=https://user-images.githubusercontent.com/106692773/205135615-d8997834-f433-48ee-8763-274e306b521b.png>



</details>

## Why It's Good For The Game

TGUI menu good, yes?
## Changelog
🆑 RimiNosha
qol: The latejoin menu is now TGUI!
qol: You'll also be able to see why you can't join a job, instead of it
being invisible!
code: Department UI colors have changed slightly. This will only affect
the latejoin and nations UIs.
/🆑

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: Aleksej Komarov <stylemistake@gmail.com>
2022-12-09 16:34:34 +02:00