Commit Graph

605 Commits

Author SHA1 Message Date
aaaa1023
e7e998dfc0 Removes a single crayon from the mortidrobe (#83808)
## About The Pull Request
Removes one (1) white crayon from the coroner vendor.

## Why It's Good For The Game
Fixes crayon economy.
There's 2 entries of a white crayon in the Mortidrobe and the lower one
seems to overwrite the higher one in the list .

## Changelog
🆑
fix: there is now one more crayon in the Mortidrobe.
/🆑
2024-06-11 13:51:50 +01:00
Higgin
8c64a298b1 buffs other cat2 chems to make them more appealing (+vendor calomel) (#83258)
## About The Pull Request

_[even better than I was the last time, baby, ooh, ooh, ooh - I'm
good](https://www.youtube.com/watch?v=ftSUchAdVTE)_

#83192 was a nerf to aiuri, libital, and seiver with a whole bunch of
nasty side-effects including weaponization and accidental kills.

Instead, what if we just made the other cat2 chems not suck as much?

That's what this PR proposes to do. 

Helbital: always heals a minimum of 3 brute. Scales much more heavily
with high damage when the person is in soft-crit or crit. You get to
play rock-paper-scissors with the reaper ~~very rarely if you use it
while conscious/not near death's door~~ *edit: in softcrit now too -
which is fun - but should still be rare.
*edit because I'm dumb and forgor: ~~also increased the O2 damage a
touch. 3 regularly, 2 in softcrit, so it's got a limit on its mischief
you can offset with other drugs. keep in mind if you're immediately
thinking "budget lexorin" - it doesn't inflict losebreath, so you're
constantly healing O2 damage on every breath as well.~~ undid this
*edit: helbital now gives you 1-3 omen incidents after it ends
metabolizing if you go through 10u or more in your system.


Probital: also now heals 3 brute stock. Tradeoff is stamina damage but
you can couple it with food for even better brute+burn heals.

Lenturi: now heals up to 5 burn per tick pure and 3.75 stock. Stomach
damage is negligible.

Hercuri: 3 burn/tick on people with more than 50 burn damage, up to 4
pure, otherwise 2.25. Better than aiuri for significant burns.

Syriniver: can now trigger its direct tox removal effect when injected
on doses above .4u instead of .6. Lets you do a .5u drip which feels
better on the eyes than .6. Removes up to 6 toxin damage per tick this
way - nice augmentation if you don't mind the liver damage. Also heals 2
tox per tick instead of 1 on its own while metabolizing and making
musiver. Still has its low OD.

Musiver: the slow and safe byproduct of syriniver removes 1.5 tox per
tick instead of 1.

Calomel, the toxic chem-purger, is now available in two bottles in the
chem vendor. It isn't really good for killing anyone outside of slimes
(15u does about 65 damage ingested,) but it is a backup (with a
downside) in the absence of pent that you can get a little bit of
without having to bother/tide chem.

*tirimol now does a base of 4.5 oxy healing, 6 pure. the tradeoff is it
makes you randomly eepy, lose stamina, and knocks you out cold after it
leaves if you take too much. don't take too much!

**tirimol now also uses 1u oxygen as a catalyst, requires below 25%
impurity to make Super Melatonin, and has a narrower pH range which
starts at 5 pH for purity.

## Why It's Good For The Game

one of the problems I wanted to address in the last PR was to do with
the way chem stands in balance with other healing methods - finite
sutures/meshes, surgery, etc. - and lessen the ability to go for miles
off of the base chems with few-to-no drawbacks or necessary windows to
use those other methods. the base chems I focused on are the main ones
in public vendors and medikits: aiuri and libital; the third was one
that just dominates in the tox healing world, seiver.

doing this, and doing this through organ damage in particular, has a lot
of problems. it slows gameplay and demands more interdependence. it
penalizes people who cannot access that interdependence unduly (antags,
miners, but really just anyone.) it makes the chems dangerous to use
whether you intend to or not.

so rather than deal with that problem, but recognizing that people
generally don't give a shit to use the other cat2 chems for a reason
(why would you?) I decided to instead try to make them more appealing -
since they each have drawbacks already - to make the choice between them
less about the damage #s and more about the desired mix of drawbacks -
all of which you might have to account for in making a god-chem mix that
you did not have to when libital/salicylic acid and aiuri/oxandrolone
previously existed.

hopefully now these other chems are good enough to be worth considering
against those.

~~oxy meds basically never get used as-is so i left them alone.~~ edit:
i buffed tirimol. convermol + helbital works great though.

should give chemists and anyone interacting with our chem options more
interesting choices while not penalizing people using what they do now.

## Changelog

🆑
balance: buffed healing values of helbital, probital, lenturi, hercuri,
syriniver, musiver, and tirimol for their respective damage types.
balance: Tirimol now uses oxygen as a catalyst rather than consuming it
over time making it easier to make without babysitting. Tirimol now
requires much more careful management of impurity in order to make Super
Melatonin.
add: medical chem vendors now sell bottles of calomel, a potent
full-range chemical purger.
/🆑
2024-06-08 21:37:16 -04:00
carlarctg
445ed08ce1 Adds Crutches to Medbay & Crafting (#83242)
## About The Pull Request

Added crutches! Wooden ones can be made with wood. Medical ones can be
bought from the medvendor.

Crutches will reduce slowdown from missing a leg by 60%, and they will
remove the limping from fractured bones. They're also a fairly decent
bludgeon. However, they do nothing if both legs are cut off. Canes now
also remove broken bone limping as well

Changed the 'white cane' name to 'probing cane' to better reflect its
function.

Shuffled some wound and mob code around, added signals for limbless
slowdown and limping.

Crutches make you waddle.

SPRITES BY XHORIAN!!!!!!!!!!!!!


![image](https://github.com/tgstation/tgstation/assets/53100513/fe7e5ac8-0e6e-4291-ae64-c96632997607)

![image](https://github.com/tgstation/tgstation/assets/53100513/bde7fd7a-38d4-4036-82f2-01bdb8a6f00b)

![image](https://github.com/tgstation/tgstation/assets/53100513/9d94bc8d-5a80-4199-a044-7c5cf1944f99)

![image](https://github.com/tgstation/tgstation/assets/53100513/b26ecf53-177a-400d-aa5a-f2c0d5560942)



## Why It's Good For The Game

> Added crutches! Wooden ones can be made with wood. Medical ones can be
bought from the medvendor.

> Crutches will reduce slowdown from missing a leg by 60%, and they will
remove the limping from broken bones. They're also a fairly decent
bludgeon. However, they do nothing if both legs are cut off.

Currently there's no way to abate slowdown from a missing leg except
getting on a vehicle, which I think is pretty lame. What if all the
doctors are busy, missing, or dead? What if medbay is a hole? A crutch
helps make up for the loss at the cost of a hand slot.

> Changed the 'white cane' name to 'probing cane' to better reflect its
function.

'White cane' was undescriptive.

> Shuffled some wound and mob code around, added signals for limbless
slowdown and limping.

I dont know where to put the friggin signals

## Changelog

🆑
Carlarc, Xhorian
add: Added crutches! Wooden ones can be made with wood. Medical ones can
be bought from the medvendor.
add: Crutches will reduce slowdown from missing a leg by 60%, and they
will remove the limping from fractured bones. (canes do that now too)
They're also a fairly decent bludgeon. However, they do nothing if both
legs are cut off.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2024-06-01 20:02:00 +00:00
John Willard
20ad30cbff Gives the Lawyer a pet goldfish (#83461)
## About The Pull Request

The law office now has a pet, a goldfish named McGill.

## Why It's Good For The Game

I've wanted to integrate aquariums and fishes in general into more
roundstart, since it currently either requires being built and/or
ordered, and thought giving it as a pet to the Law Office would be
pretty cool since the law office doesn't have one and deserves one, and
also just a silly reference.

## Changelog

🆑
add: The Law office now has a pet goldfish.
/🆑
2024-05-31 14:57:28 -07:00
_0Steven
e9386c4b81 Fixes vendors displaying a broken character when dropping cigarette boxes onto the floor. (#83379)
## About The Pull Request

Vendors dispensing cigarette boxes onto the floor would cause a broken
character to appear at the beginning of the line.
Looking into it, this seemed to be due to an attempt at capitalizing the
item names, which interacts with the `\improper` text macro to cause
this issue.
Calling `format_text(...)` beforehand resolves this issue.

Look in the linked issue for more details.
## Why It's Good For The Game

Fixes #82618.
## Changelog
🆑
spellcheck: When a vendor tells you something dropped onto the floor,
the line no longer starts with a broken character in the case of
cigarette boxes.
/🆑
2024-05-24 16:11:18 +01:00
kawoppi
53814a4be3 fixes Booze-O-Mat and ShadyCigs Deluxe selling to minors (#83332)
## About The Pull Request
now they block the purchase and alert security like they used to

![image](https://github.com/tgstation/tgstation/assets/94711066/f1370e73-9acc-44eb-94dc-87273fe42b4f)
## Why It's Good For The Game
fixes #82653
## Changelog
🆑
fix: underage drinkers beware: the Booze-O-Mat and ShadyCigs Deluxe
check your age again
/🆑
2024-05-20 10:08:15 -06:00
Profakos
29cd9ee03b Machinery Destroy() side effect clean up (#82659)
## About The Pull Request

I have combed over implementations of `Destroy()` for `obj/machinery`,
and noticed quite a few was spawning items or playing sounds.

**Slot machines**:
Moved payout to on_deconstruction()

**Windoors**:
Break sound moved to on_deconstruction().
I have also slightly cleaned up Destroy(), the windoor calls
air_update_turf directly, as that proc already retrieves the turf it is
on.
 
**Atmospheric pipe**:
Releases air and deconstructs meter objects on_deconstruction().

**Portable atmospheric devices**:
Drop hyper noblium crystal on on_destruction().

**Pump, Scrubbers**:
Releases air on_deconstruction().

**PACMAN power generator**:
Spawns dropped fuel on_deconstruction().

**Runic vendor**:
Moved vanishing effects to on_deconstruction().

I did not change Destroy side effects in the following instances:

- side effects are critical for the round (e.g. doomsday device, nuke,
blackbox recorder dropping the tape, gulag item reclaimer [less critical
but still])
- might spawn messages and noises, but moving them to on_deconstruct
would put linked items into an unusable state if deleted directly (e.g.
express order console, cyborg lockdown console, tram paired sensors)
- would potentially delete mobs we don't want deleted (e.g. disposals,
slime camera console)

Out of 220 Destroy defines, I found only 8 side effects that could not
be moved to other procs, so `machinery\Destroy()` has almost always been
used properly! I really hope `structure` will be as well made.

Other changes:

- Stasis beds had a completely empty destroy, removed
- Mass drivers had two destroy procs, merged

## Why It's Good For The Game

The Destroy() proc should only contain reference clean ups, barring edge
cases that would harm playability.

## Changelog

Nothing player facing.
2024-04-16 00:27:48 -07:00
_0Steven
35aa29397a Fix a few vendor restocking bugs (#82603)
## About The Pull Request

So while working on fixing standard RPEDs working at all, I noticed they
weren't displaying parts when used on a vendor.
Looking into it, it seemed to be because the vendors just called
`display_parts(user)` on its own:

1780fcef62/code/modules/vending/_vending.dm (L1151)
While other machinery would wrap it in a `to_chat(...)` call.

1780fcef62/code/game/machinery/_machinery.dm (L971)
So, we do that too!

But then, during further testing, I noticed it wasn't actually
restocking. Ever. Even though it's calling the `restock(...)` proc with
the same inputs as you would do manually- oh. _oh._

1780fcef62/code/modules/vending/_vending.dm (L1152-L1154)
It's checking the replacer for whether it's a refill canister, and not
the contents of it. Has been doing this for about 8 months, apparently.
No wonder it wasn't working.

Great! This should work, right? One more round of testing!
Aaaaand it doesn't actually pay out any credits when restocking this
way.
That's because it's *specifically* coded on `attackby(...)`.

1780fcef62/code/modules/vending/_vending.dm (L707-L715)
Alright, well, we move this to a new `post_restock(...)` proc, and call
this whenever we're done doing restocks.
```dm
/obj/machinery/vending/proc/post_restock(mob/living/user, restocked)
	if(!restocked)
		to_chat(user, span_warning("There's nothing to restock!"))
		return

	to_chat(user, span_notice("You loaded [restocked] items in [src][credits_contained > 0 ? ", and are rewarded [credits_contained] credits." : "."]"))
	var/datum/bank_account/cargo_account = SSeconomy.get_dep_account(ACCOUNT_CAR)
	cargo_account.adjust_money(round(credits_contained * 0.5), "Vending: Restock")
	var/obj/item/holochip/payday = new(src, credits_contained)
	try_put_in_hand(payday, user)
```
This is separate from the `restock(...)`, so we can call it when we're
_done_ restocking and need a message, rather than sending one for each
canister in our RPED. We can't just break the loop on the first fitting
canister, because the items we need might be spread over multiple
partially full canisters.

Third round of testing anyone? Oh hey infinite money glitch.
It seems like we never actually reset the `credits_contained` var after
paying out with it.
Soooo we just append this to our `post_restock(...)` proc, and be done
with it.
```dm
/obj/machinery/vending/proc/post_restock(mob/living/user, restocked)
	(...)
	try_put_in_hand(payday, user)
	credits_contained = 0
```

At this point, I felt it better we also reorganized the vendor
`exchange_parts(...)` to only have one `display_parts(...)` call and an
early return if we can't exchange parts.

Any further issues I could find I felt were outside of the scope, and
better off atomized into a separate pr.
## Why It's Good For The Game

Fixes RPEDs not working with vendors at all.
Fixes RPEDs not displaying vendor parts.
Fixes restocking vendors with an RPED not giving credits.
Fixes vendors not resetting their contained credits when restocked.
## Changelog
🆑
fix: RPEDs can be used on vendors again. Note that only bluespace RPEDs
can carry vendor refills as of writing.
fix: RPEDs can display vendor parts again.
fix: Restocking vendors gives credits whether done manually or by RPEDs.
fix: Vendors reset their contained credits when restocked.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2024-04-15 19:48:41 -06:00
_0Steven
eb1deb5346 Fixes standard RPEDs not working on machines (#82528)
## About The Pull Request

Previously, `exchange_parts(...)` would cancel if both the
`NO_DECONSTRUCTION` flag was set and you couldn't use your part replacer
from a distance.

1583cf0cc9/code/game/machinery/_machinery.dm (L958-L959)
Our recent removal of `NO_DECONSTRUCTION`, however, has left this to
_only_ be the latter.

f0ed4ba4ce/code/game/machinery/_machinery.dm (L956-L957)
Buuuuut this makes it unconditionally cancel for normal RPEDs, instead
of only blocking them if `NO_DECONSTRUCTION` was set.

As `NO_DECONSTRUCTION` is very much no longer relevant for this purpose,
we simply remove the ranged RPED check altogether.
This fixes our issue.
## Why It's Good For The Game

Fixes #82525.
## Changelog
🆑
fix: Standard RPEDs work on machines again.
/🆑
2024-04-10 20:35:28 -07:00
Jeremiah
1443ef79d3 Replaces a number of deciseconds into SECONDS (#82436)
## About The Pull Request
Using these search regexes:

Number ending in 0:
`do_after\((\w+), (\d+)0,`
Replace:
`do_after($1, $2 SECONDS,`

Single digit number:
`do_after\((\w+), [1-9],`
replace:
`do_after($1, 0.$2 SECONDS,`

Double:
`do_after\((\w+), (\d)([1-9]),`
Replace:
`do_after($1, $2.$3 SECONDS,`

## Why It's Good For The Game
Code readability
2024-04-04 18:56:08 -06:00
SyncIt21
6dc40ca522 Standardizes object deconstruction throughout the codebase. (#82280)
## About The Pull Request
When it comes to deconstructing an object we have `proc/deconstruct()` &
`NO_DECONSTRUCT`

Lets talk about the flag first. 

**Problems with `NO_DECONSTRUCTION`**
I know what the comment says on what it should do

b5593bc693/code/__DEFINES/obj_flags.dm (L18)

But everywhere people have decided to give their own meaning/definition
to this flag. Here are some examples on how this flag is used

**1. Make the object just disappear(not drop anything) when
deconstructed**
This is by far the largest use case everywhere. If an object is
deconstructed(either via tools or smashed apart) then if it has this
flag it should not drop any of its contents but just disappear. You have
seen this code pattern used everywhere

b5593bc693/code/game/machinery/constructable_frame.dm (L26-L31)

This behaviour is then leveraged by 2 important components.

When an object is frozen, if it is deconstructed it should just
disappear without leaving any traces behind

b5593bc693/code/datums/elements/frozen.dm (L66-L67)

By hologram objects. Obviously if you destroy an hologram nothing real
should drop out

b5593bc693/code/modules/holodeck/computer.dm (L301-L304)

And there are other use cases as well but we won't go into them as they
aren't as significant as these.

**2. To stop an object from being wrenched ??**
Yeah this one is weird. Like why? I understand in some instances (chair,
table, rack etc) a wrench can be used to deconstruct a object so using
the flag there to stop it from happening makes sense but why can't we
even anchor an object just because of this flag?

b5593bc693/code/game/objects/objs.dm (L368-L369)
This is one of those instances where somebody just decided this
behaviour for their own convenience just like the above example with no
explanation as to why

**3. To stop using tools to deconstruct the object** 
This was the original intent of the flag but it is enforced in few
places far & between. One example is when deconstructing the a machine
via crowbar.

b5593bc693/code/game/machinery/_machinery.dm (L811)

But machines are a special dual use case for this flag. Because if you
look at its deconstruct proc the flag also prevents the machine from
spawning a frame.

b5593bc693/code/game/machinery/_machinery.dm (L820-L822)

How can 1 flag serve 2 purposes within the same type?

**4. Simply forget to check for this flag altogether**
Yup if you find this flag not doing its job for some objects don't be
surprised. People & sometimes even maintainers just forget that it even
exists

b5593bc693/code/game/objects/items/piggy_bank.dm (L66-L67)

**Solution**
These are the main examples i found. As you can see the same flag can
perform 2 different functions within the same type and do something else
in a different object & in some instances don't even work cause people
just forget, etc.

In order to bring consistency to this flag we need to move it to the
atom level where it means the same thing everywhere. Where in the atom
you may ask? .Well, I'll just post what MrMelbert said in
https://github.com/tgstation/tgstation/pull/81656#discussion_r1503086862

> ...Ideally the .deconstruct call would handle NO_DECONSTRUCTION
handling as it wants,

Yup that's the ideal case now. This flag is checked directly in
`deconstruct()`. Now like i said we want to give a universal definition
to this flag and as you have seen from my examples it is used in 3 cases
1) Make an object disappear(doesn't dropping anything) when
deconstructed
2) Stop it from being wrenched
3) Stop it from being deconstructed via tools

We can't enforce points 2 & 3 inside `deconstruct()` which leaves us
with only case 1) i.e. make the object disappear. And that's what i have
done. Therefore after more than a decade or since this flag got
introduced `NO_DECONSTRUCT` now has a new definition as of 2024

_"Make an object disappear(don't dropping anything) when deconstructed
either via tools or forcefully smashed apart"_

Now i very well understand this will open up bugs in places where cases
2 & 3 are required but its worth it. In fact they could even be qol
changes for all we know so who knows it might even benefit us but for
now we need to give a universal definition to this flag to bring some
consistency & that's what this PR does.

**Problem with deconstruct()**
This proc actually sends out a signal which is currently used by the
material container but could be used by other objects later on.

3e84c3e6da/code/game/objects/obj_defense.dm (L160)

So objects that override this proc should call its parent. Sadly that
isn't the case in many instances like such

3e84c3e6da/code/game/machinery/deployable.dm (L20-L23)

Instead of `return ..()` which would delete the object & send the signal
it deletes the object directly thus the signal never gets sent.

**Solution**
Make this proc non overridable. For objects to add their own custom
deconstruction behaviour a new proc has been introduced
`atom_deconstruct()` Subtypes should now override this proc to handle
object deconstruction.

If objects have certain important stuff inside them (like mobs in
machines for example) they want to drop by handling `NO_DECONSTRUCT`
flag in a more carefully customized way they can do this by overriding
`handle_deconstruct()` which by default delegates to
`atom_deconstruct()` if the `NO_DECONSTRUCT` flag is absent. This proc
will allow you to handle the flag in a more customized way if you ever
need to.

## Why It's Good For The Game
1) I'm goanna post the full comment from MrMelbert
https://github.com/tgstation/tgstation/pull/81656#discussion_r1503086862

> ...Ideally the .deconstruct call would handle NO_DECONSTRUCTION
handling as it wants, but there's a shocking lack of consistency around
NO_DECONSTRUCTION, where some objects treat it as "allow deconstruction,
but make it drop no parts" and others simply "disallow deconstruction at
all"

This PR now makes `NO_DECONSTRUCTION` handled by `deconstruct()` & gives
this flag the consistency it deserves. Not to mention as shown in case 4
there are objects that simply forgot to check for this flag. Now it
applies for those missing instances as well.

2) No more copying pasting the most overused code pattern in this code
base history `if(obj_flags & NO_DECONSTRUCTION)`. Just makes code
cleaner everywhere

3) All objects now send the `COMSIG_OBJ_DECONSTRUCT` signal on object
deconstruction which is now available for use should you need it

## Changelog
🆑
refactor: refactors how objects are deconstructed in relation to the
`NO_DECONSTRUCTION` flag. Certain objects & machinery may display
different tool interactions & behaviours when destroyed/deconstructed.
Report these changes if you feel like they are bugs
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2024-04-04 18:55:51 -06:00
Pickle-Coding
c1f11f26ce Converts arbitrary energy units to the joule. Fixes conservation of energy issues relating to charging cells. (#81579)
## About The Pull Request
Removes all arbitrary energy and power units in the codebase. Everything
is replaced with the joule and watt, with 1 = 1 joule, or 1 watt if you
are going to multiply by time. This is a visible change, where all
arbitrary energy units you see in the game will get proper prefixed
units of energy.

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

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

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

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

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

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

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

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

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

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

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-03-23 16:58:56 +01:00
SyncIt21
52b13e742d Vending machines double check for ID (#82126)
## About The Pull Request
- Fixes #82097

By double check i mean
- First check in the UI(Front End) if the ID suddenly became
unavailable, if so, update its status
- Check again in the back end & if payment failed reset `vend_ready =
TRUE` so we can try again. This is what caused the machine to
permanently get bricked

## Changelog
🆑
fix: Vending machines will update its UI if ID is lost at any point
fix: Vending machines won't brick if the payment fails (like due to lose
of ID) for any reason
/🆑
2024-03-21 22:27:48 +01:00
ArcaneMusic
014ffc818b [No GBP] Vending examine message now properly shows the name of the vending refill required. (#82101)
## About The Pull Request

Vending refills were piping in the typepath of the refill as opposed to
the name since their examine was referencing a type path. This instead
pulls the `machine_name` and `name` to form the correct string on
examine to confirm that the value is accurate.

![image](https://github.com/tgstation/tgstation/assets/41715314/88db4bb7-a529-4dee-bd9e-e83ff4b66b9a)

## Why It's Good For The Game
Fixes #82095. That should probably not be shown in-game as is and now
actually showcases the correct message on examine.

## Changelog
🆑
fix: Vending machines now show the correct vending refill name when
examine and not full.
/🆑
2024-03-20 10:58:52 +01:00
xXPawnStarrXx
b686f99723 Request GaGsification - Gis (#82040)
## About The Pull Request
This GAGsification is a request from Fitz Sholl, using their wonderful
sprites to breathe some new life into a mostly forgotten outfit.
EDIT: I increased the available amount from 1 to 4. Meaning that a
robust Sensei can have a class of three

![image](https://github.com/tgstation/tgstation/assets/53197594/f52f4021-49a9-4ac6-880f-860735766afe)

~~there's also a second version which is a rendition of the prexisting
one which I couldn't bring myself to delete completely, DBZ was a
massive part of my childhood and will never leave me.~~


![image](https://github.com/tgstation/tgstation/assets/53197594/111c88ff-280e-4e9f-8aa5-114cb9d73bf1)
## Why It's Good For The Game
As Bruce Lee was reported saying, "Be like water, water can flow, or
water can crash" What does that mean? I don't know exactly, but it's
cool as hell, look like water while handing out an absolute savage
beating? You can now.
## Changelog
🆑
image: modified gi sprites, making them more customisable.
/🆑
2024-03-17 21:46:27 +01:00
ArcaneMusic
1d2c8a83f6 Adds new vending machine tooltips. (#81918)
## About The Pull Request

This PR adds tooltips to vending machines.
Specifically, the tooltips cover tool interactions (unwrench, toggle
panel open/closed, deconstruct), as well as righting a knocked over
vending machine with an open hand, and returning items to a vending
machine as applicable.

![image](https://github.com/tgstation/tgstation/assets/41715314/2af1eb6a-b357-423b-acd4-f9b6dd913b64)

![image](https://github.com/tgstation/tgstation/assets/41715314/816eb602-4831-41ea-a4b6-ece54cea4665)

![image](https://github.com/tgstation/tgstation/assets/41715314/f4ec55eb-b403-4444-9ae5-ea1978f7f578)

![image](https://github.com/tgstation/tgstation/assets/41715314/371c21b3-a884-4ec0-afa7-531f109c93b1)

![image](https://github.com/tgstation/tgstation/assets/41715314/fac5881e-89f0-482e-b19b-db0440684147)
This also provides a context for restock modules, which shows specific
text when the vending machine has credit to be claimed when restocked.

Tweaks a little bit of speech handling to prevent issues with
custom_vendor for determining if an item can be returned to re-use for
the tooltip proc.

## Why It's Good For The Game

Improves clarity on a high impact economy related piece of content, plus
we kinda *like* vending machines, based on how much code we have
dedicated to them. 🐛 💥

## Changelog

🆑
qol: Vending machines now have contextual tooltips for interactions with
tools/objects/restocking/returns.
qol: Vending machines can now be examined to see what type of restock
module they need to be refilled.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
2024-03-15 16:32:15 -06:00
xXPawnStarrXx
409527e3e3 New GaGs clothing: Part 1 - 'Dress'ing up! (#81785)
## About The Pull Request
I'm going to keep this simple, I have added four GaGs configs and the
sprites for some outfits, I intend to expand on the recolouring
abilities, so you will be able to use more than just spraycans.
The outfits are as follows; The Cardigan skirt (formerly named black
skirt), the Evening gown (It's no longer the 'RED' gown, since it can be
any colour), the striped dress and the sailor dress.


![image](https://github.com/tgstation/tgstation/assets/53197594/04c2e2ee-1d26-484e-9dde-b90cb7c33175)

![image](https://github.com/tgstation/tgstation/assets/53197594/e2ca4171-7b28-4fb2-9cc0-e6916367995e)

![image](https://github.com/tgstation/tgstation/assets/53197594/2c5a0985-b4fc-4fc3-8da1-13923f2742fb)

![image](https://github.com/tgstation/tgstation/assets/53197594/537006c0-1e67-4278-89d6-b4e294c335e8)
## Why It's Good For The Game
Customisation is always good, allowing players to express their
character how they want isn't a bad thing!
## Changelog
🆑
image: added gags sprites for; Sailor dress, Evening gown, Cardigan
skirts and striped dresses.
/🆑
2024-03-15 17:23:47 -04:00
Da Cool Boss
338eb64d4b Adds evidence bag boxes to the Lawyer's wardrobe (#81965)
## About The Pull Request
Adds 2 boxes of evidence baggies to list of available items from the
LawDrobe.
## Why It's Good For The Game
Lawyers have a few uses for these bags. They help when handling evidence
because they prevent contamination of forensics, and they aid in
courtroom roleplay - the lawyer presenting a plastic baggie labelled
EXHIBIT A containing a bloodstained knife is a staple of courtroom
dramas. However, on most maps they have no legitimate access to evidence
bags (sec vendor, sec lathe, sec office and holding cells are
inaccessible to lawyers).
## Changelog
🆑
qol: The LawDrobe now stocks two (2) boxes of evidence bags.
/🆑
2024-03-15 13:48:43 -06:00
John Willard
9ac81e1a64 New station trait job: Human AI (#81681)
## About The Pull Request

This PR does many things, I'll try to explain the basic/background stuff
to the main thing first:

1. Adds a new remote that allows a human to function like an AI. It
controls a fly that will fly around the station slowly, and when it
reaches a machine then the person can interact with it as if they were
an AI. This required changing a lot of silicon/AI checks with one that
also checks for this remote, and some messing with shared ui state.
2. Moves req_access from the obj and bot to ``/atom/movable`` which lets
it be shared between the two, no more copy-paste and one side lacking
features/checks/signals the other has.
3. Adds a check for AI config for AI-related station traits, which was
lacking prior

Now for the good part...
Adds a new station trait that replaces the AI with a Human.
This person is equipped with an AI headset (including Binary), an
advanced camera console, an omni door wand, the machine controller, and
their laws.
They are immune to the SAT's turrets (even if set to target borgs) and
are slow outside of the SAT, mimicing the actions of the AI.

They interact with the world through their advanced camera console,
which allows them to do most AI stuff needed, and the holopad they can
connect to without having to ring first (like Command can).

They are given a paper with the laws they must follow, but since they
are human they are able to bend it. Cyborgs that run the default lawset
are "slaved" to them via an unremovable law 0, so the Human AI can bend
the laws if they really need to (for their own survival n such), and
make the cyborgs obey their commands above laws, but in general this
shouldn't be a frequent occurrence. This does take into account the
unique AI trait, so it's not guaranteed Asimov.

When this station trait rolls, all Intellicards, AI uploads, and AI core
boards are destroyed and are unresearchable. They can be spawned by
admins in-game if necessary. Maybe in the future we can also exclude
Oldstation from this but I haven't really decided.

Extra perks:

Human AI spawns with a Robotic voicebox (unless they are a body purist)
and teleport blocking implant, so they can't use teleporters to bypass
their on-station slowdown.
They also have an infinite laser pointer that can be used to blind
through their camera console. This is unfortunately nerfed from the
recent borg balance PR that removed its stun. This was meant to be the
alternative to no longer being able to permanently lock borgs down like
AIs can (or more than one, for that matter).
They aren't affected by Roburgers, Acid, and Fuel's toxicity.
Bots salute them like they do Beepsky (which is now a trait)
They spawn with SyndEye to replace the AI's tracking ability
They do not have a bank account

### The machine remote

The machine remote has a little fly in it that flies to the machines it
is pointed to, working as the arms and legs of the Human AI. It scans
the machine and punches in the action the AI does, and is how the AI
accesses basically anything. This fly slowly moves from one machine to
the next, and can be recalled with Alt Click.
It works on machines and bots.

### Video (Low quality to fit Github)


https://github.com/tgstation/tgstation/assets/53777086/e16509f8-8bed-42b5-9fbf-7e37165a11e8

## Why It's Good For The Game

I've seen a funny screenshot one day of a person replacing the AI by
using a bunch of door remotes, camera console, crew monitoring console,
and a few other things. I've been thinking about that for a few years
and really wanted to make it official if not easier to make possible,
because it is an incredibly funny interaction.
This makes it a reality, and while they aren't as powerful as regular
AIs, I think it makes for better and funnier in-game moments. With the
same weight as Cargorilla (1), I hope this wouldn't be rolling too often
and ruin rounds, but instead show off the different capabilities that
Humans and AIs can do, to do the job of an AI. You win some you lose
some.

## Changelog

🆑 JohnFulpWillard, Tattax
add: Adds a new station trait job: The Human AI.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2024-03-09 23:48:39 +01:00
MrMelbert
47dc38fee2 Let's you talk through action figures, plushies, and toy mechs with .l and .r. Also a big clean up of say because its support for non-mobs was lackluster. (#81848) 2024-03-07 09:21:12 -07:00
ArcaneMusic
d7cf8309c5 Arcargo: Vendor Cargo and Vending Machine Update (#81582)
Another one.

## About The Pull Request
This pull request originally had a design doc that @Fikou and I worked
on, but that was never really polished up for publishing quality so I'll
forgo it for now and be as descript as possible here.

### Core changes
- This pull request adds a new NTOS app to the game, the restock
tracker. The restock tracker shows a comprehensive list of vending
machines across the station, as long as there is a need for that vending
machine to get restocked.
- This has also been pre-installed into the cargo data disks.
(`/obj/item/computer_disk/quartermaster`)
- Vending machines now store a total of 20% of the cost of any purchase
made within themselves into a small pool of cash. This only applies to
premium and normal purchases, not to contraband, as they're technically
not sanctioned by the company.
- The restock tracker app will also track which vending machines have
the most credits stored internally inside them.
- By refilling a vending machine, the stored credits within are paid out
to any crewmember who goes and restocks the station, while also paying
out *half that amount to the cargo budget*, serving as a basic but
otherwise easy tertiary money making method on the same level of
complexity as doing bounties, with the added benefit of actually helping
to assist the station for jobs like... assistant.


![image](https://github.com/tgstation/tgstation/assets/41715314/59cee2d9-7e60-4733-8a76-d88fe5b8c3f2)

### Break Stuff
- Anyway, when you try and smash a vending machine open with a melee
weapon of choice, it can now pay out 50 credits at a time as a way to
make money at zero risk to yourself.
- ~~Except for the horrible risk to yourself.~~

![image](https://github.com/tgstation/tgstation/assets/41715314/23208bf0-8484-40b9-b753-0ffdb57d770f)

### Cargo Specific Changes
- Restock units may now be sold for a small profit as well, to
incentivize cargo to keep the station stocked further.
- The `STATION_TRAIT_VENDING_SHORTAGE` trait will now add a small amount
of existing credits into the vending machines on station, to incentivize
cargo to fix the issue during the round and not just push for an early
shuttle call. Or, more accurately, provide the crew with a money making
scheme to engage better with the station trait as it stands.

### This also refactors behavior on vending machines
- This pull request also finally changes it so that vending machines now
use the payment component, which as a consequence allows for the
following improvements:
* Vending machines may now pull from physical credits on your person,
not just requiring you to have money on your ID card.
* Vending machines may also use credits being pulled by the player
interacting with the vending machine, allowing for handless mobs to be
able to purchase items from a vending machine.
* Finally makes the "use-for-everything buying things component" used by
the most utilized component of the in-game economy, to reduce the
quantity of unique implementations of purchasing things in the code.
- Existing vending specific checks are retained on before handing off
behavior to the payment component, for behavior such as purchasing
cigarettes/alcohol under the age of 18/21.

Notes:
- Vending machines will lose their internal credits stored when
deconstructed, as a security measure.
- Vending machines will now show the total amount of credits that a mob
has on their person, combining physical credits as well as credits held
in their ID card to accurately portray their total wealth across the mob
in question.

## Why It's Good For The Game

First off, this is largely an excuse to move vending machine behavior
over to the payment component for the purposes to less code copy-paste,
and to try and make the implementation more wide-spread.

Second, this implements a new tertiary economy method to the game, in
the same design space as bounties, which serve as common methods of
making money without necessarily being specific to their job in
question, with the primary goal of providing small amounts of work to
the crew and a basic interaction with the economy system.

Additionally, it gives cargo more things they can do to assist the
station, and a way to know which parts of the station need support as a
result.
It improves the interaction between the vending shortage station trait
as well, making it a challenge with depth as opposed to a more
oppressive round change that players would rather reroll the game over.

Additionally, this makes a few price tweaks to vending restock modules
as well to help incentivize buying some of the more minor restock kits,
and a few select bumps on restocks that cover wide enough territory to
necessitate fewer restocks.
2024-03-06 18:15:49 -06:00
Ghom
88bdabe53b Adds a small cafeteria behind the right wing shutters of the museum. (#81465)
## About The Pull Request
I was thinking to contribute something to the new away mission map to
make it better. Mapping and all takes too much time for me, so I could
do little. Though it comes with its own unique gimmicks.

To reach the cafeteria, one has to complete a couple puzzles.
The first set is opened by inputing the correct PIN on the password
panel beside it. There're several clues to help you guess this fairly
easy puzzle, in the form of several number graffitis, a scrapped piece
of paper full of numbers, and a board filled with colored dots also
found just beside the panel.
The second one is opened by a keycard, and is generally lazier. To find
it, you'll need to do a bit of (toilet) searching.

As for the unique things this PR adds:
- A fire extinguisher... that actually contains welding fuel
- A (dirt-cheap) hotdog vending machine*
- A completely ornamental maneki-neko (that's the name of the
luck-bringing, paw-waving cat figurine)
- A piggy bank that carries money between rounds. It has a cap of 10k
credits worth of holochips, cash and coins, which is pretty high, but
I'm confident people will just destroy it for its contents the moment
they find it. His name is Pigston Swinelord VI.
- More, totally legit and not actually fake bombable walls :^)

*By the by, you can also find it during the national hotdog day.

Screenshots of the new location:
![museum
cafe](https://github.com/tgstation/tgstation/assets/42542238/1c0d93b7-90d5-4459-a48d-81430f0d3613)
![museum
restrooms](https://github.com/tgstation/tgstation/assets/42542238/5a9e049d-6acc-464b-998d-901e43154bae)


## Why It's Good For The Game
You know how most away missions are not that special at all? Yeah,
@mc-oofert set an example of a pretty decent one actually, if not a tad
small. I thought it could use a touch of another mind actually
contributing to it too, because it deserves it.

Also, this sets the basis for other persistent piggy banks. I don't
think they should all have that 10k cap like this one, perhaps 1k is
enough. Beside, the code that mothblocks did for json database datum is
pretty good, so there is not a whole lot of shitcode here.

## Changelog

🆑
add: Added a cafeteria to the museum away mission, with a few special
things to it. To reach it, you'll have to complete a couple puzzles
however.
map: The museum away mission now has a couple restrooms.
add: Hotdog vending machines may spawn during the National Hot Dog Day.
/🆑
2024-03-05 18:19:39 -07:00
ValuedEmployee
00305c6d6d New clown shoes: Moffers (#81796)
## About The Pull Request

Adds a new set of clown shoes to the autodrobe under the contraband list
that are moth themed. The shoes look like little moth heads on the ends
and make moth screaming noises when you take a step. It came to me in a
dream and I made this PR in an hour so please be nice to me.


## Why It's Good For The Game

Buying meown shoes has been a staple for certain fun loving players and
clowns alike on TG. Adding an extra pair of basically the moth version
of them can add extra gimmick shenanigans for clowns to baffle onlookers
and elicit a giggle from local assistants. Since autodrobes must be
hacked to gain these moffer slippers, with an inventory amount of 1
maximum per autodrobe, they should be somewhat of a rarity that adds a
little spice to a round.



https://github.com/tgstation/tgstation/assets/105574010/5099d088-d760-4b2a-823a-03bf9b342da9

![Screenshot 2024-03-02
160533](https://github.com/tgstation/tgstation/assets/105574010/5bff7747-72d3-45dc-8994-64a001320d8b)
![Screenshot 2024-03-02
170927](https://github.com/tgstation/tgstation/assets/105574010/d691af0c-9d19-4a78-993a-213ee6bb37dd)

Most importantly: Moth

## Changelog

🆑
add: Added new clown shoes "moffers"
add: Added moffers to the contraband list of the autodrobe
/🆑
2024-03-04 13:35:13 +01:00
KingkumaArt
42a657169d Makes vending machines no longer crush chairs - fixed (#81653)
THIS IS A FIXED VERSION OF PR #79775

Does what it says, vending machines no longer damage chairs or
conveyors.
Likely an unintended side effect of vendor crushes being updated to do
integrity damage.

## Why It's Good For The Game


![cbt](https://github.com/tgstation/tgstation/assets/69398298/c4695266-4bf5-4cfb-a51c-0c63e4e71d50)

Jokes aside the fact I have this gif below permanently saved to my pc
means it's memorable enough to add back in.
Not really a thing that's possible to powergame with either, because
there are far easier ways of RRing someone, this is just funny enough to
be worth it.

## Changelog

🆑
add: a list of items called vendor_nocrush that vendors dont deal
integrity damage to upon hitting them.
fix: Makes vending machines no longer crush chairs and conveyors.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2024-02-27 15:01:24 +01:00
Ghom
f0bde01957 Fixes product_categories not working for non-constructable vending machines. (#81467)
## About The Pull Request
This is something I've discovered while working on the previous PR.

## Why It's Good For The Game
Prevents future issues with non-constructable vending machines that use
categories, since we don't have any such thing rn.

## Changelog
N/A
2024-02-16 23:19:43 -07:00
NeonNik2245
6eb041c6b6 New masks (#81217)
## About The Pull Request
Adds 3 new masks:
* Kitsune mask
* Facescarf
* Rebellion mask
All masks (and facescarf) are recolorable. And also thanks to Kovac for
the scarf sprites
## Why It's Good For The Game
Cool masks for make character style more unique. All are recolourable.

![2024-01-28_12-20-48](https://github.com/tgstation/tgstation/assets/106491639/49b532f7-ccfe-4556-a54f-a4884a9fda77)

## Changelog
🆑
add: 3 new masks for your characters (thanks to Kovac for the scarf
sprites)
/🆑

---------

Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
2024-02-12 00:53:40 +01:00
SyncIt21
4495ea2e4d Refactors how machines are deconstructed (#81291)
## About The Pull Request
This refactors how machines are deconstructed in the following ways

- You can no longer override `obj/machinery/deconstruct()`. If you want
customized behaviour then override `on_deconstruction()` instead.

This comes with the added benifit of no longer needing to check for the
`NO_DECONSTRUCTION` flag because the machine base proc does that for us
& if it finds that flag it won't proceed to call `on_deconstruction()`
meaning no machine will have a chance to spawn anything which is the
current behaviour.

This is required to make #81290 work for all machines at least so that
machine can send the `COMSIG_OBJ_DECONSTRUCT` signal without subtypes
overriding & forgetting to call the parent proc

- `dump_contents()` only gets called when the machine is deconstructed
not destroyed thus not leaving behind any of its contents inside. Fixes
https://github.com/tgstation/tgstation/pull/81290#issuecomment-1925752583

## Changelog
🆑
fix: machines that should not drop contents when deleted no longer do.
refactor: refactors how machines are deconstructed. report bugs on
github.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2024-02-11 14:52:19 +01:00
John Willard
fa9a2a701a Implant pad TGUI (#80978)
## About The Pull Request

I was messing a little bit with TGUI stuff and ended up turning the
implant pad TGUI, so why not.
On top of the new UI, I replaced the messages to chat with nice and
consistent balloon alerts which will hopefully make it not seem like an
ancient piece of shit.

Video demonstration


https://github.com/tgstation/tgstation/assets/53777086/a1ebe0d4-005b-4e29-a623-2c1b352cd017

I also removed ``INTERACT_MACHINE_SET_MACHINE`` from the prisoner
console, because it was accidentally left in when the console was moved
to TGUI

## Why It's Good For The Game

I'm still going down the list of things that need to be TGUI, and I
ended up doing this cause I just felt like it while messing with some
other stuff.
Rest of the list is visible here:
https://hackmd.io/@sClqlHM0T4yZfn-qa5KnAg/S152Tl2hh

## Changelog

🆑
refactor: Implant pads now use TGUI
/🆑
2024-01-17 04:37:03 -05:00
John Willard
02fb87e23b PDA vendor now sells regular PDAs (#80836)
## About The Pull Request

I don't know when this happened or why but this makes the PTech vending
machine sell regular PDAs now instead of Command ones.

## Why It's Good For The Game

PDA replacement should not be giving you all of Command's tablet apps.

## Changelog

🆑
fix: The HoP's cartridge vending machine now sells regular PDAs instead
of base command ones.
/🆑
2024-01-09 14:12:54 -05:00
uaioy
5ff987a410 Fixes perma sustenance vendor not selling to people (#80666)
## About The Pull Request

Fixes #80568 
Makes the whole asking for labour points only apply to the labour camp
sustenance vendor instead of all sustenance vendors

Changes the text you get for trying to buy from the sustenance vendor
without prisoner ID to clarify it only sells to prisoners

## Why It's Good For The Game

Billions of prisoners must eat moldy tofu

## Changelog
🆑
fix: The sustenance vendor in perma actually serves food now
/🆑
2023-12-31 20:41:29 +01:00
GoldenAlpharex
1788242e5c Fixes vendors displaying wrong amounts and wrong options for color customization availability (#80663) 2023-12-30 15:14:42 -08:00
ReinaCoder
befa8e2429 Adds a brown variant of the Detective's Noir Suit (#80451) 2023-12-25 18:11:52 -05:00
Bloop
b876efd54b Fixes duplicating space beer (#80500)
## About The Pull Request

Fixes https://github.com/Skyrat-SS13/Skyrat-tg/issues/25760
Fixes https://github.com/tgstation/tgstation/issues/80271

I don't know if it was a result of the react port or not (likely it
was), but unexpected behavior occurs when multiple objects are mapped to
the same key.

In this case, there were two items named 'Space Beer', so in order to
have unique keys I've changed it so that they're keyed to the path
instead of the name.

Shown below, the two types of beer:


![b2SS6BiIf4](https://github.com/tgstation/tgstation/assets/13398309/914748a2-552d-4bcb-a3cc-3fd27e0ef4ba)

<details><summary>Beer duplicating when switching tabs</summary>


![Kvm7Y0cEM8](https://github.com/tgstation/tgstation/assets/13398309/0f8ffd49-b954-411c-acd3-17b7e34f024c)
</details>

<details><summary>No more of that</summary>


![8HRol9ywN9](https://github.com/tgstation/tgstation/assets/13398309/94111610-8f5c-482d-9f95-404ffe5ee565)

</details>

edit: also fixes a bug where buying an item with the same name as
another would decrement the stock of both items.

<details><summary>Fixed (see space beer)</summary>


![Ukkrr7ekNv](https://github.com/tgstation/tgstation/assets/13398309/d2ffa348-5696-4e73-8584-c4399608c635)

</details>

## Why It's Good For The Game

Fixes a bug

## Changelog

🆑
fix: the boozeomat ui will stop duplicating space beer bottles
refactor: refactored vending machine backend to have unique keys for
their data structures. should fix bugs related to items that happen to
have the same name.
/🆑
2023-12-23 10:59:07 +01:00
RedBaronFlyer
7a3a5db3b8 Adds hazard vests, orange hard hats, and pocket protectors to the Cargodrobe (#80404)
## About The Pull Request
Adds orange hardhats, hazard vests, and pocket protectors to the cargo
drobe. It follows the current cargo supply vendor's stock (which means
there are three hard hats, three hazard vests, and three pocket
protectors)

## Why It's Good For The Game
I always thought it'd make sense for cargo to have these things as
pseudo-dockworkers and mailmen. Plus, it allows for a bit of uniform
customization that doesn't stray from the overall 'theme' of the
department, similar to how medical has several outfit combinations and
accessory options in their clothes vendor that still fit the medical
department theme.

Hazard vests: I thought it'd make sense for cargo workers to be able to
wear high visibility vests since you have freight moving around and
cargo shuttles docking and undocking throughout the shift.

(Orange) Hard Hats: additional safety that goes nicely with the hazard
vests.

Pocket Protectors: Cargo has a lot of pens and papers, as well as paper
cutters, in its delivery office.

## Photo examples:

Cargo Tech (Default uniform)

![vest6](https://github.com/tgstation/tgstation/assets/45489195/1077d3c5-e04a-44e0-91e4-51caade99418)

Cargo Tech (Shorts)

![vest5](https://github.com/tgstation/tgstation/assets/45489195/8cd0d8f9-2af0-4ad4-b4dc-152739694ca6)

## Changelog

Adds orange hardhats, hazard (high-vis) vests, and pocket protectors to
the cargo drobe

🆑
add: Added orange hardhats, hazard vests, and pocket protectors to the
cargo drobe
/🆑
2023-12-18 16:48:44 +01:00
DrTuxedo
7ec5e2df55 Adds Security Jacket (#80297)
## About The Pull Request
Adds a new Security clothing piece: Security High-Vis Jacket (taken from
my #80278). The high-vis lines are emissive in darkness like the hazard
vest.
![Security Jacket
(light)](https://github.com/tgstation/tgstation/assets/42353186/e94cfb46-a26a-4e9f-9577-db75f3069690)
![Security Jacket
side](https://github.com/tgstation/tgstation/assets/42353186/2fa4c1d5-5b11-4e40-a0c0-c14fcff3c409)

You can buy it at the Security wardrobe vendor. It offers worse
protection than body armour in exchange for covering arms.
## Why It's Good For The Game
More Security drip. Those are supposed to resemble real high-vis jackets
that Police Officers wear irl.
## Changelog
🆑
image: New Security clothing: Security High-Vis jacket!
/🆑
2023-12-17 10:50:20 +01:00
LemonInTheDark
f03084c1ca FOV is Dead (Long Live FOV) (#80062)
## About The Pull Request

FOV as it is currently implemented is incompatible* with wallening.
I'm doin wallening, so we gotta redo things here.

The issue is the masking of mobs. Wallening relies on sidemap (layering
based off physical position), which only works on things on the same
plane (because planes are basically sheets we render down onto)
So rather then masking mobs, let's reuse the masking idea from old fov,
and use it to cut out a bit of the game render plane, and
blur/over-saturate the bit that's masked out.

My hope is this makes things visible in light, but not as much in
darkness, alongside making more vivid shit more easily seen (just like
real life)

Here's some videos, what follows after is the commits I care about
(since I had to rip a bunch of planes to nothing, so the files changed
tab might be a bit of a mess)

Oh also I had to remove the darkness pref since the darkness is doing a
lot of the heavy lifting now. I'm sorry.

Edit:
NEW FOV SPRITES! Thanks dongle your aviator glasses will guide us to a
better future.


https://github.com/tgstation/tgstation/assets/58055496/afa9eeb8-8b7b-4364-b0c0-7ac8070b5609


https://github.com/tgstation/tgstation/assets/58055496/0eff040c-8bf1-47e4-a4f3-dac56fb2ccc8

## Commits I Care About

[Implements something like fov, but without the planes as layers
hell](a604c7b1c8)

Rather then masking out mobs standing behind us, we use a combo color
matrix and blur filter to make the stuff covered by fov harder to see.

We achive this by splitting the game plane into two, masking both by fov
(one normally and one inversely), and then applying effects to one of
the two.

I want to make the fov fullscreens more gradient, but as an effect this
is a good start

[Removes WALL_PLANE_UPPER by adding a WALL_PLANE overlay to material
walls (init cost comes
here)](2548933739)

@Mothblocks see this. comment in commit explains further but uh, we need
to draw material walls to the light mask plane so things actually can be
seen on them, but we can't do that and also have them be big, so they
get an overlay. Sorry, slight init time bump, about 0.5 seconds. I can
kill it with wallening.

[Moves SEETHROUGH_PLANE above
ABOVE_GAME_PLANE](beec4c00e0)

I don't think it actually wants to draw here
@Time-Green I think this was you so pinging for opinion

[Resprites FOV masks to be clean (and more
consistent)](f02ad13696)

[f02ad13](f02ad13696)

This is 100% donglesplonge's work, he's spent a week or so going back
and forth with me sharpening these to a mirror shine, real chill

## Why It's Good For The Game

Walls are closing in

## Changelog
🆑 LemonInTheDark, Donglesplonge
image: Redoes fov "mask" sprites. They're clean, have a very pleasant
dithering effect, and look real fuckin good!
del: Changed FOV, it no longer hides mobs, instead it blurs the hidden
area, and makes it a bit darker/oversaturated
/🆑

###### * It's technically possible if we start using render targets to
create 2 sets of sources but that's insane and we aren't doing it
2023-12-13 15:52:24 +01:00
MrMelbert
1e76fd70b4 Attack chain refactoring: Broadening tool_act into item_interact, moving some item interactions to... atom/item_interact / item/interact_with_atom (#79968)
## About The Pull Request

Implements half of this (with some minor changes): 


![image](https://github.com/tgstation/tgstation/assets/51863163/bf5cc4bb-5a1f-42e3-921d-9a57bc6096cc)

The ultimate goal of this is to split our attack chain in two: 
- One for non-combat item interactions
  - Health analyzer scanning
  - using tools on stuff
  - surgery
  - Niche other interactions
- One for combat attacking
  - Item hit thing, item deal damage. 
  - Special effects on attack would go here.  

This PR begins this by broadining tool act into item interact. 

Item interact is a catch-all proc ran at the beginning of attack chain,
before `pre_attack` and such, that handles the first part of the chain.

This allows us to easily catch item interaction and cancel the attack
part of the chain by using deliberate bitflag return values, rather than
`TRUE` / `FALSE`*.

*Because right now, `TRUE` = `cancel attack`, no matter what, which is
unclear to people.

Instead of moving as much as possible to the new proc in this PR, I
started by doing some easy, obvious things. More things can be moved in
the future, or technically they don't even need to move in a lot of
cases.

## Changelog

🆑 Melbert
refactor: Refactored some methods of items interacting with other
objects or mobs, such as surgery and health analzyers. Report if
anything seems wrong
/🆑
2023-12-08 23:50:19 -07:00
san7890
5ce9d5806d Scopes NODECONSTRUCT_1 from flags_1 to obj_flags (#80104)
This flag only worked on the `/obj/structure` and `/obj/machinery`
level, so let's rescope it from `flags_1` and put it where it belongs -
`obj_flags`.
Bitflag operators should be scoped to their subtype specific bitfield,
not really useful to have this take up a spot on the `/atom` level if
absolutely nothing other than `/obj`s use it.
2023-12-08 08:49:14 +00:00
ATH1909
5f305ca5f7 Removes an exploit that can farm Russian revolver moodlets, adds Russian revolvers to the contraband section of games vendors (#80159)
## About The Pull Request

Fixes https://github.com/tgstation/tgstation/issues/80158 by making
curses block you from playing Russian roulette regardless of whether or
not there's a live bullet in your Russian revolver's chamber.

A Russian revolver has been added to the contraband section of each Good
Clean Fun vendor.

## Why It's Good For The Game

The bug is incredibly funny, but ~~I want GBP~~ probably should be
fixed.

There's no actual way to get (more) Russian revolvers outside of the
mapstart ones, and that can be a bit stifling to gimmicks that involve
them. And Russian roulette IS a game.

Like the roundstart ones, you could unload these vendor revolvers for
.357 bullets, but you can already just print .357 bullets from a hacked
autolathe directly, so I don't think that's an issue.

## Changelog

🆑 ATHATH
fix: Spacemen can no longer use curses to cheat at Russian roulette by
selectively blocking attempts to shoot themselves.
add: A Russian revolver has been added to the contraband section of each
Good Clean Fun vendor.
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-12-07 21:46:34 -08:00
die_amond
119c9abeed adds a propeller hat, rainbow bowtie, and a swirl lollipop (#80034)
## About The Pull Request
Says it on the tin, adds a propeller hat and large rainbow bowtie which
can both be bought from the costume vendor. It also adds a comically
large swirl lollipop which can be bought from the premium section of the
snack vendors.

Propeller hats makes you happy by giving you a small positive moodlet
because they fill you with whimsical joy.

spinning propeller hat and bowtie showcase


https://github.com/tgstation/tgstation/assets/58376695/5617026e-6e43-4505-9911-b9ca1325e0f1


![image](https://github.com/tgstation/tgstation/assets/58376695/17030730-01ad-4b4e-894a-051d43a70f29)

comically large lollipop

![image](https://github.com/tgstation/tgstation/assets/58376695/6d235971-5323-47b2-8cf8-0015fbc8509b)
## Why It's Good For The Game
All of these things are iconic, funny, and I don't know why we don't
already have them.

![striders](https://github.com/tgstation/tgstation/assets/58376695/185ad63b-8221-4050-9897-9df8cde5d1fd)
## Changelog
🆑
add: adds propeller hats, rainbow bowties, and swirl lollipops
/🆑

---------

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2023-12-05 11:58:42 -07:00
Hatterhat
01d7880ac3 gives sectech restockers a name (#80098)
## About The Pull Request
uh. title? gives sectech restock units a `machine_name` so they actually
tell you what they restock

## Why It's Good For The Game
sectech restockers are no longer just named "generic restocking units"

## Changelog

🆑
fix: SecTech restocking units are now actually named SecTech restocking
units, and not Generic restocking units.
/🆑

---------

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
2023-12-03 15:45:26 -07:00
Jacquerel
ab5b06fadc Adds INTJ skillchip (#79902)
## About The Pull Request

Adds a new skillchip, it lets you taste food by examining it.

![image](https://github.com/tgstation/tgstation/assets/7483112/666ab42e-2918-43e5-835c-99c71a552325)
This has all of the effects of tasting food (various moodlets based on
quality and food type) and can also trigger food allergies if you have
them, however it does not consume the food nor give you any nutritional
benefit.
You can buy it from a vendor or sometimes it spawns in maintenance.

## Why It's Good For The Game

The players are constantly clamouring for more additions to our most
loved and useful feature, skill chips.
<details>


![intj](https://github.com/tgstation/tgstation/assets/7483112/58de56aa-b4bc-48fc-8c22-fa9c7a74314b)

</details>

## Changelog

🆑
add: A new skill chip can be found in maintenance or purchased from the
vendor, allowing you to experience food in new and exciting ways.
add: Abductors also have access to this incredible power, simply using
their genius level brains.
/🆑
2023-11-24 10:44:08 +13:00
necromanceranne
ef52047274 [READY] The Tackleling: Unarmed bonuses and features contribute to tackle success and failure, significant outcome overhaul, among other things (#79721)
## About The Pull Request

### Tackling Outcomes

Tackling now determines success based on outcome categories. These are
derived from the typical attacker/defender roll that would have
previously determined the outcome on its own. A negative roll results in
a negative outcome, a positive roll a positive outcome, and a result of
exactly 0 resulting in a neutral outcome.

The result of your roll are then passed along to the relevant proc to
determine severity. The derived roll is multiplied by 10 (or -10 for the
negative roll to get a positive value to roll with). Then we see if our
final roll fits a severity bracket. Negative outcomes will roll to
determine their outcome, and potentially could roll a less severe
outcome than what our first roll would suggest.

For positive outcomes, the defender's melee armor reduces the severity
of the outcome.
For negative outcomes, the attacker's melee armor improves the potential
outcome and at least prevents more severe backlash. It'll still be
negative, you can't move from a negative outcome to a positive outcome
just from good armor.

Most of the outcomes are fairly similar to the current outcomes, but
with the inclusion of staggering one or both parties to make the
subsequent potential grabs _stickier_, if that makes sense.

Neutral is now a mutual stagger, but also the tackler being left
upright. It's effectively net zero.

### Blocking

Blocking is checked on impact, and results in a neutral outcome if the
defender successfully blocks. This means our tackler isn't too severely
impacted from an unsuccessful tackle

### Additional Changes

Your arms ``unarmed_effectiveness`` now contributes to the attack mod
and defense mod of tackles. For humans tackling humans, this often
results in a net neutral result. But if you have a better arm, or the
tackle target has worse arms, this can alter the outcome significantly.

Any tackler with the trait TRAIT_NOGUNS (like bezerkers, Sleeping Carp
users or the very unlikely chance ninjas are tackling while wearing
their armor) gains a bonus to their tackles.

Any suit that prevents shove knockdowns grants an attack bonus, and not
just riot armor. This now includes Mk.1 Swat suits, the ones from the
SWAT crate in cargo.

Settlers are vulnerable to tackles, much like their dwarf cousins.
They're also just as bad at tackles.

Security lockers come with gripper gloves, and the sec vendor has 5 sets
of gripper gloves as standard items. They also have a +1 skill bonus.
This should encourage people to use tackling a bit more without having
to always seek out the best gear to accomplish the task. (particularly
since security is inherently pretty good at tackling with the outcome
changes).

The HoS gets a pair of gorilla gloves in his garment bag. If he wants
them.

The shove slowdown is now a new status effect, Staggered. This is just
better functionality overall. Any instance of adding the shove slowdown
now makes our target staggered.

## Why It's Good For The Game

Tackling is a bit outdated, to say the least. Not much content has been
added for a while that isn't strictly meme content. With these changes,
tackling should be slightly more nuanced, considering elements such as
unarmed effectiveness, the presence of martial arts, and actually
properly checking block rather than notionally checking block. There is
also more opportunity to protect yourself from tackle outcomes, both
positive and negative.

It also should be a little fairer to be on the receiving end of tackles
if you have taken the time to layer up defenses against it. Attackers
often overwhelmed defenders due to numbers favoring attackers more than
defenders.

Closes some really outdated design that was resulting in some really
bizarre behaviour with regards to layered defenses against attack not
having the same meaning against tackles, if only because it was looking
for the wrong things and not even the correct parts of what it was
looking for. Namely, blocking and shielding.

The inclusion of more gripper gloves and a good outcome from using them
will hopefully incentivize people to consider tacking as a useful tool,
if a bit risky still due to the splat mechanics.

## Changelog
🆑
balance: Judo Joe, archnemesis of Maint Khan, has begun re-airing his
midnight infomercials shilling his extremely expensive Tackle Supreme
Judo Karate Training video tapes. Unable to pass up a 'bargain',
Nanotrasen has purchased these tapes en masse. Tackling techniques have
started to improve, as well as Nanotrasen's tackling instructional
algorithms within tackle gloves.
balance: The outcomes for tackling are more equalized. It isn't as feast
or famine, and should be somewhat more controllable without becoming too
severe.
add: Blocking successfully against a tackle will force the tackle to be
a neutral outcome.
add: Unarmed effectiveness from arms now contributes to attacking with
and defending from tackles.
add: Those who refuse to use firearms (like Sleeping Carp users and
insane unholy berzerkers) are better at tackling others.
add: Riot specialized armor, and not just riot armor, now contributes
meaningfully to tackling effectiveness.
balance: MK.1 Swat Suits, the ones that come in SWAT crates, now
functions similarly to riot armor.
add: Settlers from the outer rims have noticed they aren't very good at
protecting themselves against Judo Joe's clearly discriminatory tackling
techniques.
add: Security lockers come with gripper gloves, security vendors now
sell them as standard items, and the HoS' garment bag now has a pair of
gorilla gloves. Gripper gloves have a positive skill bonus to tackling.
add: Being insane also makes you INSANELY good at tackling but also
INSANELY likely to eat shit on a whiff. DO OR DIE, BITCH.
refactor: Shoving slowdown and all its implementations now use a status
effect, Staggered.
/🆑
2023-11-22 17:36:04 +00:00
Toastgoats
97ae770893 New botany plant - Lanternfruit (#79204)
## About The Pull Request

So I noticed the code references an Ethereal plant called
"Lanternfruit," a sour pear-like fruit used as flavoring for a few foods
and drinks. However, this plant doesn't actually appear in the game,
this pr hopes to remedy this while also bringing some new hybrid
potential to the table for botany.

In essence, the plant contains sugar, liquid electricity, and sulfur;
making it the easiest way to obtain the latter two chems, allowing
botanists to experiment more with potential chemical recipes, and in
theme with the plant itself, make flash powder. The justification for
containing sulfur being that grapefruit gets its signature smell from a
sulfur compound.

The plant can also be fermented into voltaic wine, which has some
gimmick potential for particularly snobby Ethereals.
2023-10-30 13:38:11 -05:00
GPeckman
5f923b097f Light-Eaten objects can no longer emit light after being turned off and then back on (#79240)
## About The Pull Request

#67676 described a bug where PDAs can apparently emit a small amount of
light after being affected by the light eater. As it turns out, the bug
is even worse than that. It doesn't work for just PDAs, it works for
basically any light source that can be turned off and on. Even
flashlights. In the following pictures, a flashlight has been
light-eaten and then turned off and on again:


![fine](https://github.com/tgstation/tgstation/assets/21979502/e880c3a8-4ae9-4b6c-8ee9-27dacdbb23ab)

Observe how the nightmare jaunt is available, as it should be. However,
one step closer to the flashlight:

![not
fine](https://github.com/tgstation/tgstation/assets/21979502/b35014d4-71e8-49cf-b0f6-479cdf2ba3fc)

The nightmare jaunt can no longer be used, because the flashlight is
still emitting light.

This PR just fixes that behavior. Light-eaten objects will now be
totally dark again, even after being power cycled. Closes #67676.
## Why It's Good For The Game

Bugs bad.
## Changelog
🆑
fix: Light-Eaten objects can no longer emit light after being turned off
and then back on.
code: Flashlights now use light_on instead of defining their own
variable. Please report buggy behavior.
/🆑
2023-10-28 23:49:13 -04:00
Jacquerel
2d39c1289f Adds tongs (#78698)
## About The Pull Request


![dreamseeker_6nkq7xbypa](https://github.com/tgstation/tgstation/assets/7483112/60f86b9d-a5aa-4630-8ab4-8956b2e44665).

Adds tongs, as requested on the [Official TGStation13
Forums](https://tgstation13.org/phpBB/viewtopic.php?f=9&t=33026)
Tongs can be used to pick up food from two tiles away, and feed it to
people who are two tiles away.
You can also use them while in your hand to snap them together like a
crab, or use them to harmlessly pinch people who are up to two tiles
away.

Tongs are available from the kitchen's dinnerware vendor, the autolathe,
and the service lathe.

## Why It's Good For The Game

You can feed people from across a counter, without touching the food and
spreading your germs to them.

## Changelog

🆑 Coded by Jacquerel, Sprited by Dalmationer
add: Added tongs to the kitchen, which you can use to manipulate food
from further away
/🆑
2023-10-03 14:27:26 -06:00
Lamb
0b8f4dc9ce adds boxes of bandages, and bandages to go in them (#78406)
## About The Pull Request
have you ever walked into medbay, picked up a suture, and asked yourself
"how do i know how to stitch myself up?"
do you long for the simplicity of a bandage that can be popped on, no
thought required?
well, look no further! now introducing, the DeForest First Aid Bandage!

![image](https://github.com/tgstation/tgstation/assets/110322848/bb737393-0e2b-4773-a673-ab784a409bed)
each box of bandages holds five each, which are all one time use items.
using one heals up to 25 brute damage from a single part of the body.
boxes of bandages will drain much faster than sutures, and are much less
precise for healing specific increments of damage, but heal more in
exchange. they are also worse at stopping blood loss, but not completely
useless for it.

they can be found in a handful of places:
(some) high value medkits
in paramedic's pockets
some medbay lobbies
some cargo holds
all sec infirmaries
in goodies on the cargo console
maint loot
and nanomeds!

i considered making these replace brute kits, but those are used in a
lot of old references, so it felt a bit passe. so i made a new item that
is a bit more balanced, so they can be mapped in and added to vendors
without much worry.
## Why It's Good For The Game
cute item, heals the people who wouldn't really be going into medbay
anyways, and is fairly flavorful. if it's a bit too strong as is i can
tweak the number, but the goal is to not be powerful enough to outshine
sutures, while still offering somewhat effective healing for rough
housing assistants and antags
## Changelog
🆑
add: adds boxes of bandages, a quick healing item
/🆑
2023-10-01 23:54:46 -06:00
Ghom
db8eca7bf3 The fishing portal generator expansion (plus skill-chip) (#78203)
## About The Pull Request
This is a PR I worked on last month, but had to put on hold while
dealing with some pressing issues with fishing feature, minigame and
other stuff, and because I had to atomize out some of the stuff
previously present here.

I've expanded on the fishing portal generator to do something other than
dispense guppies and goldfishes. It now has multiple settings,
unlockable by performing scanning experiments for fish types, available
from the get go, which also reward a meager amount of techweb points
upon completion. The generator can now be built too. No longer it has to
be ordered from cargo.
It can also be emagged for the syndicate setting, tho right now it only
dispenses donkfish and emulsijack, both otherwise impossible to get
outside of... exodrone adventures.

The advanced fishing rod now comes with an experiment handler component,
specific to the fish scanning experiment, that automatically scans
fished content. The node to get it now requires 2000 points and the
first fish scanning exp to be unock.

A new skillchip has been added, which adds a trait that changes the icon
of the fish shown in the minigame UI, giving some clues on what the
reward will be. The same trait is also gained by reaching the master
(penultimate) level of the fishing skill.

A new fish type has been added, with its own quirks. One of these quirks
included temporarily switching movement direction of the bait.
Currently, it can only be fished in the hyperspace and randomizer
setting of the fishing portal.

Screenshots:
![fuck
yea](https://github.com/tgstation/tgstation/assets/42542238/b4c75951-fa07-44ae-99ee-f602adf8a5a4)

![radial](https://github.com/tgstation/tgstation/assets/42542238/68ff21d8-69fd-4ba5-aa58-9976b6e3282f)

## Why It's Good For The Game
The fishing portal generator is but a stale and underdeveloped prototype
of the fishing feature right now, so much I was thinking of removing it
at first. However, we also have a lot of fishes which are pretty much
unfishable, so I came up with the idea of adding new portal settings
that allow people to actually get them.

As for the skillchip and trait, it's but an extra to both the vending
machine in the library and the fishing skill itself, which has an
overall humble impact on the minigame.

## Changelog

🆑
add: Expanded the fishing portal generator. It now comes with several
portal options that can be unlocked by performing fish scanning
experiments, which also award a modest amount of techweb points.
balance: The fishing portal generator is now buildable and no longer
orderable. The board can be printed from cargo, service and science
lathes.
balance: Advanced fishing tech is no longer a BEPIS design. It now
requires the base fish scanning experiment and 2000 points to be
unlocked.
add: The advanced fishing rod now comes with an incorporated
experiscanner specific for fish scanning.
add: Added a new skillchip that may change the icon of the "fish" shown
in the minigame UI to less generic ones. Reaching master level in
fishing also does that.
qol: The experiment handler UI no longer shows unselectable experiments.
/🆑
2023-10-01 04:11:55 +01:00
NPC1314
cdef5147a6 No Nunsense (#78616)
## About The Pull Request

(EDITED: Added the suit to chaplain vendor and edited the suit sprite
slightly, naming it religious habit instead of nun robe.
On the nun modesty scale of 1 being a streetwalker in a veil and 10
being mother superior Inviolata the battleship, the old nun suit was a
10, the new outfit pre-edit a 5, and post edit a 7, plus gender neutral
so opening up for more characters. Overall a worthy tradeoff.)

Adds new Chaplain outfit to Autodrobe & Chaplain vendor

## Why It's Good For The Game

Alternative drip for chaplains (nuns) that looks better on some
character due to
* Slimmer
* More black
* Blacks blue shaded not red so better compliment color for some
accessories / skin colors

Why not replace old nun suit? I like the old one too, but its chonky and
lots of white areas so don't always fit.
Why autodrobe? Bit more options for religious costumes in there doesn't
hurt.


![Nunsense](https://github.com/tgstation/tgstation/assets/110836368/6f0f3846-527d-4f08-bf42-2268db351c16)

![habit](https://github.com/tgstation/tgstation/assets/110836368/e35b03d0-260e-40ea-9e0a-461e2761dcac)
(the lower image is post-edit)

## Changelog
🆑
image: new chaplain outfit
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-09-30 22:11:07 +02:00
DrTuxedo
ebf76d7195 Holster upgrade, badassery for everyone (#78642)
## About The Pull Request
Holsters now can be attached to _almost_ any clothing in the suit slot
(jackets, hazard vests, etc.)

Holsters now can hold Captain Antique gun and HoS gun (they are designed
to look like handguns, are normal-sized and can be fitted in the
backpack which is more convenient than a holster)

SecTech now has 4 energy holsters (which can only house medium-sized
energy/laser weaponry) in the premium section.
## Why It's Good For The Game
Holsters being possible to attach to the suits makes them more
convenient to use for those who have their belt slot occupied and don't
have armour while still wanting to have a badass holster. It won't be a
storage abuse as it is still more convenient and stealthy to keep guns
in the backpack (holsters can only hold normal-sized guns).

Captain Antique gun and HoS gun were the only normal-sized guns which
were left over from the holsters. Now Captains and HoSs can spin their
cool guns in their hands.

SecTech having holsters (can only house 1 gun) let Security more easier
access to more badass gear if they really want to. It won't change a lot
as they would've kept their gun on the armour anyway (which holster can
be clipped on).
## Changelog
🆑 DrDiasyl aka DrTuxedo
balance: Holsters can now be clipped to any suit, and house Captain
antique gun and HoS gun. You now can buy holsters from the SecTech
premium section.
/🆑
2023-09-29 17:13:21 -04:00