Commit Graph

16961 Commits

Author SHA1 Message Date
ArcaneMusic
2035132f3f Tweaks railings to stand and look taller (#78598)
## About The Pull Request


![image](https://github.com/tgstation/tgstation/assets/41715314/e905463f-6b83-4ff2-b265-7029d542301a)

This Pull request updates the sprites used by railings, including both
directional, corner, outer corner, and rail ending sprites.
Additionally, I've placed railings on the GAME_PLANE_UPPER plane, so
that visually it looks like railings in front of a player can physically
stand in front of the player.

## Why It's Good For The Game

This ports the railing sprites I did for The Wallening (tm) onto live,
providing a 3/4ths perspective sprite, in addition to the fact that
it'll help sell the height of objects by layering in a more satisfying
way.

Not to mention, I just think they're way better than current railings,
where are both ancient and super flat sprites.

## Changelog

🆑
image: Railings have had a visual update.
/🆑
2023-10-02 12:31:31 -04: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
ArcaneMusic
9073290d8a ArCargo: Adds the Galactic Materials Stock Market V1.2 (Free Market Edition) (#78500)
## About The Pull Request

**This PR is a rerelease of #78164, with some bells and whistles.** As
such, most of the core functionality is the same, but with some tweaks
to balance the gameplay and prevent bike levels of profit. I've tried to
bold the new additions to make it easier to read for those coming back
for the second pass.


![image](https://github.com/tgstation/tgstation/assets/41715314/ff9bf038-524d-44fc-81bb-c6ff97fef6dd)
This PR adds a new machine that can be bought called the **Galactic
Mineral Market** (GMM). The Galactic Mineral Market (GMM) allows you to
buy and sell minerals wholesale from the market machine. It goes
something like this:

### 1. Getting the Machine:
The GMM can be bought as an un-assembled machine for 600 credits from
cargo. It's a low cost, but its not mapped in standard, so if you're
confident in your miners, you shouldn't necessarily need one for the
department. Otherwise, it's available for other crewmembers to buy for
cost.

The cargo pack comes will all supplies necessary to finish the machine.
Tools not included.

### 2. Buying Low
Using the machine's UI, you can see all traded minerals and their
associated prices. Buy prices are played straight, and can be bought for
material price, times the quantity. The order is then instantly placed
on the cargo shuttle, and will be deducted from the buyer's account on
shuttle send. **A single order can only have 10 different stacks of
materials in it. So, that can be 100 sheets of iron and 1 of everything
else, or 500 sheets of iron. After that you're blocked from buying more
sheets until you've sent the order.**

Cargo staff with standard cargo access may toggle the machine to order
directly from the cargo budget. Otherwise, materials are only purchased
from private accounts.

All purchases are treated as private and must be opened by the recipient
like private orders.

### 3. Selling High

It's stocks time. To sell minerals on the market, simply insert any
relevant metal stock into the machine. This produces a totally original
and not-a-bounty-cube stock block, which can be sold on the cargo
shuttle for cargo funds. Stock blocks can also be price-tagged as well
following their standard process.

**Stock blocks start out a bright pink and are worth the value of that
material at that time, but over time their color will degrade. After a
full 5 minutes, stock blocks will switch over to a purple hue, and their
value will once again become liquid, subject to the current market
value. This encourages players to be a bit more fast on their feet than
before instead of just waiting forever for all of their investments to
arrive at the perfect value, before the inevitable "rest of the game"
tries to upend your investing.**

Sold cargo stocks are subject at a 20% processing fee as part of the
galactic mineral market.
### 4. Outside Factors

**In-game events like the Crab-17 or the Market crash event will cause
stocks to bottom out completely, and for the market to become
unavailable until the market stabilizes. Thankfully, once the market has
crashed, typically stocks will recovery and gain back some value,
allowing for fast acting market movers to capitalize on rough markets.**

**Additionally, low value materials like iron and glass have an extra
stipulation, as their value goes all the way down to 0 credits. In that
case, you are unable to buy them at that value as a market protection.
Be careful that you don't see a reset or crash when you're planning on
selling your horde of iron and glass stocks!**

Additionally, market events can occur during the round that can more
sharply adjust a single stock's price and completely rebound it's
trajectory. These events are always mentioned in the station
announcement's economics report.

### Other notes:
The market does not cover all minerals, partially for consistency
purposes as well as for balance reasons. Plasma, being a unique material
that only Nanotrasen has their hands on, is the sole exporter of plasma
in the system, so it stands to reason that it's not on the market, and
remains a solo export. Bananium, as it has a rare and expensive
conversion rate, works the opposite way, and as such isn't listed on the
market either, with the sole source being single cargo sales. All others
just don't make much sense to include into the market at this second, so
I left them out for now.

**Alright now below I'm going to cover the math and shit so if that's
not what you care about then please scroll past.**
<details>
  <summary>Warning: Arcane is about to talk about the math</summary>
Alright.
So this adds a new stock_market subsystem, which fires once every 20
seconds. I'm still fairly new to subsystem design so I'm probably going
to need some feedback on cleaning this up to make it look nicer and run
smoother.

So we have 4 associated lists, each attached to the relevant traded
datum; this tracks prices, market trends, how long that trend is going
to last in SS fires, and market quantity.

Prices fluctuate between 0.5x and 3x the material's single sheet value.
This could be tweaked even farther in the future, but for now I'm
keeping it at this nice clean margin. Prices fluctuate based on a
gaussian normal distribution that is centered on different points based
on their **trend**. Upward trending materials are centered in such a way
that they'll almost certainly go upwards, but being that it's based on a
random chance, not always. Vis versa, downward trends should tend to
lose value at about the same rate. We also change our rounding based on
this trend data, in order to prevent low price values like iron and
glass from getting stuck in the same value or freefall drop over time
just because of rounding down. Similarly, neutral trending materials
will not change nearly as much, and will generally stay at around the
same amount.

When buying or selling a material, the quantity of that material will
change on the market. The magnitude of that change depends on how much
of that material currently exists on the market. Buying a low quantity
material like diamond for example will tangibly increase that material's
cost, while buying stacks and stacks of iron and glass won't do much
damage to the price of iron as there's usually around 500 full stacks on
the market to start with. It's applied at a relative percentage of
(qty_changed / new_total_on_market) * price of goods bought/sold at.

In addition to that, there are random "market events" that can occur
randomly, which you might miss if you don't follow the newscaster
economy news. These three events are fairly barebones now, but in
general they have a 1% chance of happening per material, and can more
dramatically increase, decrease, or fully reset the value of a material
on the market back to it's standard value. This opens up for doing more
with it in the future, but that's a later problem.
</details>


## Why It's Good For The Game

This independently resolves some issues related to #78040, that being
that lowpop stations, or shifts with few miners would have a new way to
be able to still get some access to minerals in a given round. This also
provides a unique minigame and alternative way to acquire money in a
given shift, using minerals.

**"But Arcane,** I hear you ask. **"Isn't this just the same thing you
tried doing way back when and then reverted in #50537?**
Well, fuck man, how you doing I haven't see you around in forever also
no you're completely wrong and here's why

**This PR is no longer contingent on the rest of ArcMining in it's
current iteration.** I have introduced some extra factors into the
gameplay as well to try and curb the creation of bikes within gameplay.
This also provides a massive benefit to round progression and gives the
QM and the cargo members the ability to prevent round progress from
stalling by buying round-critical resources.

Not to mention, as the GMM is not cargo required, more cargo integrated,
it also functions as economy content for the rest of the crew.

## Changelog
🆑
add: A new export has arrived in the imports section, the Galactic
Materials Market! You can use this to buy and sell minerals for profit
or cost, as well as stock your station when you don't have any miners.
add: Insert sheets of minerals into the Galactic Materials Market to
convert them into a stock block, allowing you to lock in your price for
5 minutes. Wait too long and it'll be subject to market value again!
add: Minerals can be bought on the market either using the station's
cargo budget by cargo crew, or privately by everyone else.
del: Any material stacks that can be bought and sold on the market
before have been removed from the cargo catalog.
/🆑

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
2023-09-30 08:58:56 -04:00
Emmett Gaines
e8d12b29fe Removes all spawn locations of the awakened plush except the bus ruin (#78559)
It's supposed to be a coderbus easter egg, stop putting it elsewhere. I
want it to stay rare enough that it confuses people when it makes it to
the station.

The secure closet had it on the loot table and due to how that's coded
it has to have something replace the slot (or rework the loot spawning
code there) so I put a live bomb in the slot instead.

🆑 ninjanomnom
del: An easter egg plushie that was spawning where it shouldn't has been
brought back home.
add: The secure closet can now spawn live gibtonite, enjoy your free
bomb.
/🆑
2023-09-30 04:31:50 +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
nikothedude
2bdadebbad Moves gauze removal signals to gauze destroy, removing weird seep_gauze usages + misc improvements (#78570)
## About The Pull Request

Title. 
## Why It's Good For The Game
Gauze removal was handled by using seep_gauze(9999) instead of just
deleting it, which was really fucking weird??
 
This makes behavior more sensical and modular (you can remove gauze
without using seep_gauze now).
## Changelog
🆑
code: Gauze removal is now handled by the gauze's destroy instead of
seep_gauze
/🆑
2023-09-29 16:45:43 -04:00
Rhials
27f242f900 Freedom Implant Feedback and Facelift (#78486)
## About The Pull Request

This aims to make the freedom implant a bit less clunky, and a bit more
responsive. No fundamental changes or buffs or anything, just some more
feedback and player-facing clarity on what this thing actually does.

Changes include:
- Freedom implants can no longer be implanted into non-carbon
(uncuffable) mobs.
- The freedom implant will no longer expend charges when used without
active restraints.
- The to_chat has been replaced with a balloon alert (displayed to the
user only, of course).
- The implant throws a balloon alert shortly after it runs out of
charges, notifying the user that it has degraded and is gone.
- The implant pad readout has been changed to provide a bit more useful
information, and provide a bit less incorrect information.
- No, seriously, what did _"Analyzes certain shadow signals in the
nervous system"_ even mean? Shadowlings??
- The uplink listing now lists the number of uses, and explains that the
implant is useful for more than just handcuffs.
## Why It's Good For The Game

I used this thing once on a nukie round and thought "oh god this needs a
facelift immediately".

Players should be able to know the basic functions of their toys without
having to consult the wiki.
## Changelog
🆑 Rhials
qol: The freedom implant has received minor feedback and other minor
usage improvements.
/🆑
2023-09-28 18:14:04 +00:00
Jacquerel
16910e15b6 Nuke Op AI card is single use as described (#78527)
## About The Pull Request

This item was supposed to allow the purchaser to put an AI into their
mod suit, however as written nothing except available ghost count
stopped you from using it over and over again so that every op on the
team had an AI suit.
Now we just destroy the item if you successfully transfer the AI into
anything so you can't reuse it.

Also I moved it to its own file rather than having the definition of
this item be above every other proc definition in the file, including
some it was using.

## Changelog

🆑
fix: The Nuke Op MODsuit AI downloader only works once per purchase, as
intended.
/🆑
2023-09-27 22:19:54 -04:00
LemonInTheDark
99950517aa Quick Harddel Fixeees (#78253) 2023-09-27 21:05:55 -04:00
Ghilker
cf635800bb gas connector component (#78273) 2023-09-27 21:02:05 -04:00
Tim
0432e6b98c Fix water puddle runtime when washing items (#78627)
## About The Pull Request
Runtime log:

```
[2023-09-26 03:06:01.741] RUNTIME: runtime error: Cannot read null.total_volume
 - proc name: attackby (/obj/structure/water_source/attackby)
 -   source file: code/game/objects/structures/watercloset.dm,697
 -   usr: Seed-Xil (/mob/living/carbon/human)
 -   src: the puddle (/obj/structure/water_source/puddle)
 -   usr.loc: the volcanic floor (143,199,3) (/turf/open/misc/asteroid/basalt/lava_land_surface)
 -   src.loc: the volcanic floor (144,199,3) (/turf/open/misc/asteroid/basalt/lava_land_surface)
 -   call stack:
 - the puddle (/obj/structure/water_source/puddle): attackby(the hairless hide (/obj/item/stack/sheet/hairlesshide), Seed-Xil (/mob/living/carbon/human), "icon-x=18;icon-y=12;left=1;but...")
 - the puddle (/obj/structure/water_source/puddle): attackby(the hairless hide (/obj/item/stack/sheet/hairlesshide), Seed-Xil (/mob/living/carbon/human), "icon-x=18;icon-y=12;left=1;but...")
 - the hairless hide (/obj/item/stack/sheet/hairlesshide): melee attack chain(Seed-Xil (/mob/living/carbon/human), the puddle (/obj/structure/water_source/puddle), "icon-x=18;icon-y=12;left=1;but...")
 - Seed-Xil (/mob/living/carbon/human): ClickOn(the puddle (/obj/structure/water_source/puddle), "icon-x=18;icon-y=12;left=1;but...")
 - the puddle (/obj/structure/water_source/puddle): Click(the volcanic floor (144,199,3) (/turf/open/misc/asteroid/basalt/lava_land_surface), "mapwindow.map", "icon-x=18;icon-y=12;left=1;but...")
 ```

The water puddle would runtime due to not having initialized the water reagents and volume.  The error would popup whenever someone attempted to wash an item in the puddle.  

## Why It's Good For The Game
One less runtime for the codebase to worry about.

## Changelog
🆑
fix: Fix water puddle runtime when washing items
/🆑
2023-09-27 20:51:19 -04:00
Dani Glore
bec9ff5bb4 Fix: Make death sandwich safe to examine (#78630)
## About The Pull Request

The death sandwich currently has a humorous bug which causes the "death
sandwich poisoning" disease to be applied upon examining the item. The
bug is caused by the usage of the `check_liked` callback, which is part
of the edible component, and is called when a player examines the food.
Flavor text such as "You find this meal edible" is expected, but side
effects are applied instead.

To fix the bug, I swapped over to the `after_eat` callback which is
called for each bite of food taken.

In addition to fixing the bug, I also added a new override for the death
sandwich `examine` proc which causes the examiner to become
disgusted/nauseated if they "look at it wrong".

## Why It's Good For The Game

I had the pleasure of watching this bug happen live on Skyrat, it was
hilarious! Someone dumped a pile of death sandwiches on the evac shuttle
for everyone to look at.

Testing the fix in-game was successful and I was able to examine the
sandwich without getting the disease. I was able to eat it "wrong" and
get the message/disease as expected. I also tested eating it "right"
with the gelled back hair and cooking jorts.

## Changelog

🆑 A.C.M.O.
fix: Fixes the death sandwich, making it safe to examine.
/🆑
2023-09-27 20:46:59 -04:00
Jacquerel
f861532d24 Basic Legion & Hivelord (#78624) 2023-09-27 18:41:07 -04:00
lizardqueenlexi
e1ab49ca76 Fixes a runtime when left-clicking an empty surgery tray. (#78615)
## About The Pull Request

As per the title. Drawing a random tool from an empty tray would attempt
to pick from an empty list, which runtimes. Now it displays a balloon
alert for you instead if you try to do that.
## Why It's Good For The Game

Errors bad. Also, clearer feedback if you try to randomly draw from an
empty tray (maybe you didn't notice it was empty, or maybe you thought
you would pick it up?).
## Changelog
🆑
fix: Left-clicking an empty surgery tray will now tell you exactly why
it does nothing.
/🆑
2023-09-27 15:50:11 -06:00
carlarctg
d86550773b Valentines and ERTs will no longer get mood boosts from traitor moodener items (#78597)
## About The Pull Request

Valentines and ERTs will no longer get mood boosts from traitor moodener
items

Closes #73432

## Why It's Good For The Game

bugge

## Changelog

🆑
fix: Valentines and ERTs will no longer get mood boosts from traitor
moodener items
/🆑
2023-09-27 17:02:11 +01:00
MidoriWroth
2aaa180aac [NO GBP] Adds complexity to foods missing it (#78546)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

My foods in my last food update were missing the new complexity factor
for some reason. This is just adding that.

## Why It's Good For The Game

More consistency with foods!

## Changelog

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

🆑
fix: Added complexity factors to foods that were missing them.
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
2023-09-27 15:57:45 +01:00
carlarctg
8d57758420 Converts slapcrafting into a component (#78450)
## About The Pull Request

Converts slapcrafting into a component!

The component is added on to an ingredient (presumably the main
ingredient) with a list of recipes attached. If you interact an
ingredient (if no ignredients, a tool) with it, you will start crafting
the recipe. If there's multiple, pick between them with a radial menu.

Opening on draft as there's just a liiiiil bit left to do. The actual
wired rod was left for last.

## Why It's Good For The Game

Slapcrafting is simply better and more accessible and less laggy than
menu crafting. By making it a component we can attach it to things in
which it'd make sense to while stopping unintended weirdness that might
arise from this being global.

Additionally the way examine lets you see crafting recipes opens up
visibility for those, which allows new players to learn about them in a
intuitive manner.

## Changelog

🆑
refactor: Turned slapcrafting into a component! You can examine
compatible items to see what recipes they can be used in, and what the
ingredients for them are. For example, spears and the head-on-spear
crafting recipe.
/🆑
2023-09-27 12:38:10 +01:00
carlarctg
90e67293c4 Fixes full advanced surgery trays spawning with 'nothing' (#78591)
## About The Pull Request

Fixes full advanced surgery trays spawning with 'nothing'

They were spawning into null space

## Why It's Good For The Game

I dont know

## Changelog

Zepyhyr, Carlarc, Not Jacquerel
🆑
fix: Fixes full advanced surgery trays spawning with 'nothing'
/🆑
2023-09-27 06:54:15 +02:00
Lamb
af0e29f3bb adds a surgery tray to surgery supplies medical order, removes surgery duffelbags entirely (#78514)
## About The Pull Request
the surgery supplies order from the medical order console still included
a surgical duffel, so i axed it, and replaced it with a surgery tray.
also axes the surgical duffel from the code, as it's no longer necessary
to have. as well as it's prefilled morgue variant
syndicate surgery duffelbags still work and are untouched. for flavor
reasons
## Why It's Good For The Game
the original switch to surgery trays was done via update paths, so there
really should not be any more of these duffels laying around in code,
primed to confuse mappers. this brings a bit more consistency to medical
orders, and removes that source of potential confusion.
## Changelog
🆑

del: removes surgical duffelbags
fix: the surgery supply order now comes with a surgery tray
/🆑
2023-09-26 23:55:41 +00:00
Jacquerel
517d33e6f0 Basic blob mobs (#78520)
## About The Pull Request

I remembered today that blob code is ass, especially blob spores.
There's still a lot to improve but I cleaned up _some_ of it by
converting these mobs.
Now they use a newer framework and more signal handling as compared to
circular references.

I _expect_ the behaviour here to largely be the same as it was or
similar. I haven't added anything fancy or new.

This is a reasonably big PR but at least all of the files are small?
Everything here touched every other thing enough that it didnt make
sense to split up sorry.

Other things I did in code:
- Experimented with replacing the `mob/blob` subtype with a component.
Don't know if this is genius or stupid.
- AI subtree which just walks somewhere. We've used this behaviour a lot
but never given it its own subtree.
- Blob Spores and Zombies are two different mobs now instead of being
one mob which just changes every single one of its properties.
- Made a few living defence procs call super, because the only thing
super does was send a signal and we weren't doing that for no reason.
Also added a couple extra signals for intercepts we did not have.

## Changelog

🆑
fix: Blob spores will respond to rallies more reliably (it won't runtime
every time they try and pathfind).
fix: Blobbernaut pain animation overlays should align with the direction
the mob is facing instead of always facing South
refactor: Blob spores, zombies, and blobbernauts now all use the basic
mob framework. They should work the same, but please report any issues.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
2023-09-26 15:28:26 -06:00
carlarctg
c4ac48f382 Refactored Mirrors (#77842)
## About The Pull Request

Heavily refactored mirrors to be less ass cancer 1998 code. Player
facing changes are that mirrors now use a radial menu, women can get
beards in magic mirrors, made the magic mirror 'change sex' option Woke
(it supports the 4 official genders and physique as well)

Fixed Pride Mirror teleporting you into the space on the first use. Now
it waits until you officially cancel and say 'I am Done' so you can
customize yourself to your liking.

With a change this big theres bound to be some small tidbits added here
and there (bald people get sad if they try to change their hairdo)

## Why It's Good For The Game

Bad code is bad and I need gbp and I am too hot and too tired to make a
proper description

## Changelog

🆑
refactor: Heavily refactored mirrors to be less ass cancer 1998 code.
Player facing changes are that mirrors now use a radial menu, women can
get beards in magic mirrors, made the magic mirror 'change sex' option
Woke (it supports the 4 official genders and physique as well)
fix: Fixed Pride Mirror teleporting you into the space on the first use.
Now it waits until you officially cancel and say 'I am Done' so you can
customize yourself to your liking.
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
2023-09-25 19:39:39 +00:00
Sealed101
68a1920a52 Removes unused ai detector camera mob (#78549)
it wasn't used anywhere for over a year (see #54832)
2023-09-25 12:48:15 -05:00
Higgin
125f3619b4 Fixes cigarettes smoking on any slot (#78544)
## About The Pull Request

#76881 allowed you to put cigarettes in a gas mask but removed the check
for, if the thing was a cigarette, making sure it was in your mask slot.

What this meant was that standing around with a cigarette in your hand
would still make you passively smoke it - although this is somewhat more
immersive to me as a former smoker, it also gets obnoxious having to set
the cigarette on a table or put it in my bag to avoid racking up the
ridiculously easy-to-accumulate nicotine addiction points you otherwise
get from even one cigarette in-game.

This just readds that check after the checks for gas masks/non-smoker
locations (which may also be broken but are beyond me right now - trying
to put a cigarette into a gas mask's filter* slot returns 'mask's mouth
is covered.')
2023-09-25 12:45:34 -05:00
Pickle-Coding
64cbbdbf2c [NO GBP]Zap strength is now measured in joules. NT CIMs will now display the power transmission from the zaps, accounting for every factor. (#78310)
## About The Pull Request
Zap strength is now measured in joules. Scales everything to account for
this.

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

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


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

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

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

Remade from #77961 because coders dont like bloat in prs

Added the Hippocrates bust to medbay heirlooms. Paramedics don't get
one.

You can now swear the Hippocratic oath with these busts! It'll give you
pacifism but nothing else. The process is reversible.

There's a very small chance that the Hippocrates bust was once wielded
by a certain German doctor. This chance is increased for coroner
heirlooms.

## Why It's Good For The Game

> Added the Hippocrates bust to medbay heirlooms. Paramedics don't get
one.

I got this idea and I just couldn't get it out of my head, it's too
funny. Paramedics don't get one because they're powergamers and laugh at
the Oath, and also it doesn't feel like a paramedic thing.

> You can now swear the Hippocratic oath with these busts! It'll give
you pacifism but nothing else. The process is reversible.

This is just a little fun thing you can choose to do, i think it'd be
cute to see doctors swearing the oath in medbay. Plus it's reversible
which can be even funnier depending on the occassion.

> There's a very small chance that the Hippocrates bust was once wielded
by a certain German doctor. This chance is increased for coroner
heirlooms.

We DO already have precedent for references with the entrenching tool
after all. The buff isn't all that special in reality, getting a medical
hud while in your hand is... basically irrelevant for the roles that
literally spawn with a med hud? It's just for accuracy and rule of
cool's sake.

## Changelog

🆑
add: Added the Hippocrates bust to medbay heirlooms. Paramedics don't
get one.
add: You can now swear the Hippocratic oath with these busts! It'll give
you pacifism but nothing else. The process is reversible.
add: There's a very small chance that the Hippocrates bust was once
wielded by a certain German doctor. This chance is increased for coroner
heirlooms.
/🆑

---------

Co-authored-by: Arturlang <24881678+Arturlang@users.noreply.github.com>
2023-09-24 07:27:43 +00:00
Lamb
c570c96ebb adds crushed can, jelly doughnut, and shipping container random spawners (#78444)
## About The Pull Request
i got bored so i made some new spawners, mainly for mappers but maybe an
admin will use them too. pics here:

![image](https://github.com/tgstation/tgstation/assets/110322848/2cd121dc-6fa6-46fd-bd9f-4cab72ead9c7)

firstly, this adds crushed can spawners, for if you want a random
crushed can sprite in your map, and don't really care which it is.
if you _do_ care, however - you can set the var/random_icon field on one
of these to 0, in your copy of strongdmm. then just change the icon
state to whatever specific can design you'd like it to be (ie:
"wellcheers")
here you can see a few of them in action

![image](https://github.com/tgstation/tgstation/assets/110322848/9fa3e210-e979-42c7-8f8c-d155ca2fe9bb)

secondly, this adds doughnut, jelly doughnut, and slime jelly doughnut
spawners - pictured below
these use a weighted list based on flavor - more down to earth flavors
are more common, while more interesting and unique flavors like bungo
and blumpkin are a bit rarer.

![image](https://github.com/tgstation/tgstation/assets/110322848/31cf6677-9f4b-40d0-91f0-bcdd59803e74)

thirdly, this adds a shipping container spawner. this one uses a
weighted list so the super obvious syndi corps are rare, less obvious
ones are less rare, and regular corporate ones are common. here you can
see a few.

![image](https://github.com/tgstation/tgstation/assets/110322848/8a8731e7-f6fc-4b91-9680-5b6b93619430)
## Why It's Good For The Game
more flexibility for mappers, more dynamic spawns... what's not to love?
## Changelog
🆑
not player facing
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-09-23 20:20:49 +02:00
jimmyl
5db7992b09 basicmob clowns (#78448)
## About The Pull Request

this is a mostly 1 to 1 port of simpleanimal clowns to basicmob clowns
this means they have 1 more brain cell
and they waddle



https://github.com/tgstation/tgstation/assets/70376633/0c5f01c7-fea2-4d8c-9fc1-764c1557e1b8



## Why It's Good For The Game


![image](https://github.com/tgstation/tgstation/assets/70376633/f92c85ea-33f2-4cf3-858f-103c0958ff97)

## Changelog
🆑
refactor: clowns are basicmobs now
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-09-23 14:46:11 +00:00
Jeremiah
a3849062b8 Feature: bitrunner, a new supply role (READY) (#77259)
## About The Pull Request
[Design doc](https://hackmd.io/@shadowh4nd/r1P7atPjn) 

Adds a new supply role centered on short dungeon-esque runs with a focus
on unifying the job with the fun part. Some virtual domains are combat
related, some are silly, some focus on "objectives". Avatar health is
linked to your physical presence and retries are limited.


<details>
<summary>Photos, WIP</summary>

Net pod stasis

![netpod](https://github.com/tgstation/tgstation/assets/42397676/d99073a4-2438-4600-83c0-cafb7b3fee55)

Server loaded

![](https://cdn.discordapp.com/attachments/1131433451841662996/1135304774976278759/dreamseeker_N14j6dwLcK.gif)

Server cooldown

![](https://cdn.discordapp.com/attachments/1131433451841662996/1135304775945179217/dreamseeker_NkIwWLJZma.gif)

the quantum console UI
![Screenshot 2023-08-05
105742](https://github.com/tgstation/tgstation/assets/42397676/3a45feaf-8c80-46b2-81c9-355932d1b014)

Cyber police antag page
![Screenshot 2023-08-16
205303](https://github.com/tgstation/tgstation/assets/42397676/fc28bcdd-2a2a-487b-927c-904f224c1b89)

A safehouse

![image](https://github.com/tgstation/tgstation/assets/42397676/c22ac115-4e00-432a-aeeb-b6afdb1ef750)

Domain info page, every domain gets this (and sometimes help text)
![Screenshot 2023-08-04
141859](https://github.com/tgstation/tgstation/assets/42397676/ba9ed6d9-a318-4466-b246-d2da0fa05676)

Me getting steamrolled in one of the missions

![syndicant](https://github.com/tgstation/tgstation/assets/42397676/3eb3099a-f9b2-4431-854d-50d8cad9b7f0)

Ghost roles getting notified that server is kicking them out
![Screenshot 2023-08-04
135454](https://github.com/tgstation/tgstation/assets/42397676/edab916c-6255-4b83-b2e7-155df2f03aab)

Players enjoying the new combat missions
![Screenshot 2023-08-05
005727](https://github.com/tgstation/tgstation/assets/42397676/e302a66f-610d-4fe1-82e0-7c8aec3913ea)

Players exploring some of the virtual maps
![Screenshot 2023-08-06
220919](https://github.com/tgstation/tgstation/assets/42397676/75a92a0b-6aa1-4bac-8fd1-c9fb47c955da)

(Not part of the PR, but)
![Screenshot 2023-08-06
221527](https://github.com/tgstation/tgstation/assets/42397676/012475ec-bfa5-4fd3-9dcb-31d222bb7bef)

New bitrunner vendor

![dreamseeker_V62h2BGdEl](https://github.com/tgstation/tgstation/assets/42397676/37ca8f69-f75e-45c9-b324-e6b31696c7b7)

</details>

## Why It's Good For The Game
Content, firstly, and moreso being supply department content.

The framework that this implements is a great (preauthorized)
replacement for two systems which are collecting dust: BEPIS and the
gateway. They integrate into this system and it's a direct upgrade.

This adds a way for the players on station to generate materials (if
that remains). The nice part about it is that I can throw balance and
believability to the wind, as unlike its unrelated predecessor VR or
away missions, bitrunning entirely washes its hands of the map and mobs
each reboot.

It offers a very expandable map framework to add content and it's all
fairly well documented.

I'd like to add a feature that represents the idea that jobs don't have
to be mundane and "external" jobs can stay tied to the main gameplay
loop.

## Changelog
jlsnow301, kinneb, mmmiracles, ical92, spockye
🆑
add: Adds Bitrunning to supply department- a semi-offstation role that
rewards teamwork.
add: Adds new machines to complement the job- net pod, quantum server,
quantum consoles, and the nexacache vendor.
add: Adds several new maps which can be loaded and unloaded at will.
add: Some flair for the new bitrunning vendor.
add: Adds a new antagonist for the virtual domain only. Short lived
ghost role that fights bitrunners.
del: Removes the BEPIS machine, moves its tech into the Bitrunning
vendor.
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->

---------

Co-authored-by: MMMiracles <lolaccount1@hotmail.com>
Co-authored-by: Ical <wolfsgamingtips@gmail.com>
Co-authored-by: spockye <79304582+spockye@users.noreply.github.com>
Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
2023-09-23 11:14:12 +02:00
Jacquerel
b2ecd81be4 Basic Mob Brimdemon (#78424)
## About The Pull Request

Fixes #71330

The brimdemon was basically already perfect (well, it has a novel means
of attacking) so I didn't get too fancy with this one, it's _largely_
just a straightforward conversion.
Following this change it's a little slower to back off, but better at
lining up with people in order to blast them. Additionally, its beam is
now a mob ability so you can give it to other mobs if you so desire.

Because I can't help doing a _little_ tinkering, Brimdemons now explode
2.5 seconds after they die, after a brief warning animation.

## Why It's Good For The Game

Simple mobs must die

## Changelog

🆑
add: Brimdemon corpses release an explosion shortly after death, just to
keep you on your toes.
refactor: Brimdemons now use the basic mob framework which (should)
improve their pathfinding somewhat. Please bug report any unusual
behaviour.
admin: The brimdemon's beam ability can be given to any mob, for your
Binding of Isaac event
/🆑
2023-09-22 19:12:43 -06:00
MrMelbert
336ff506e7 Makes some better use of passtable_on / off (#78487)
## About The Pull Request

Flicking the passtable flag has a helper to avoid accidentally
overriding passtable from another source. A few places don't use it,
which makes it plausible you're removing the flag when you shouldn't be.

So I just went through a few places I noticed setting it directly and
made it use the helper.

## Changelog

🆑 Melbert
fix: Maybe fixes some weird occurrences where you lose the ability to
pass over tables when you shouldn't, and visa versa
/🆑
2023-09-22 19:10:50 -06:00
lizardqueenlexi
84ca9d8278 Fixed several Foodening taste issues. (#78481)
## About The Pull Request

Fixes a number of issues with taste that arose from the Foodening:
- Foods with special `check_liked` callbacks were having these thrown
out without effect. This made food with special "liked" conditions get
ignored - for example, security lizards didn't like donuts anymore.
- Ageusia was completely ignored when determining taste reactions (the
entire point of the quirk!).
- Foods with a toxic ingredient still gave the normal toxic reaction,
but would not always show up as inedible on examine if they were very
complex or had several liked foodtypes.

These issues have been fixed through a rewrite of the
`get_perceived_food_quality()` proc - all relevant checks are now made
within this proc rather than some coming before (and being partly
discarded).

Food quality checks take on the following hierarchy:
`silver slime toxicity > check_liked > toxic foodtypes > ageusia > liked
+ disliked foodtypes`

- **Silver slime toxicity** is about the same as before, except it will
return a toxic result early if the eater is not a jellyperson, or
increase the perceived quality by 2 if they are.
- **check_liked** will return early with a value based on the result of
the callback: -8 (toxic) if toxic, -2 (disliked) if disliked, and 2 (a
nice meal) if liked. As before, these ignore all further foodtype
calculations.
- **Toxic foodtypes** will return the toxic threshold if present.
- **Ageusia** will always return 0 - you can't taste anything, so if it
doesn't poison you it tastes completely neutral.
- **Liked + disliked foodtypes** are how things already work - save for
toxic foodtypes no longer being needlessly factored into the math.

As part of unifying two disparate sets of checks, perceived food quality
of -8 or lower now gives the toxic reaction rather than the disliked
one. This threshold would be incredibly difficult to reach via disliked
food alone, requiring four different disliked foodtypes at once in a
non-handcrafted food. This could potentially be set to a less extreme
value, like -4, if you wanted disliked-enough food to act as toxic -
but, as this would be a minor balance change, I haven't done that here.

Finally, as a miscellaneous change, a vestigial "fraction" field has
been removed from the invocation of check_liked - this was not used, and
was inconvenient for the rewritten code.
## Why It's Good For The Game

Restores several features that were lost or muddled in the Foodening,
and should not have been.

Note that, while this change generally preserves old behavior, it
diverges somewhat from the _intended_ design of the Foodening. Namely,
toxic foodtypes will _always_ give the toxic disgust/moodlet (unless
superseded by the above hierarchy), rather than being weighed against
the other foodtypes. I personally think this is fine, as I disagree with
the notion that wrapping poison in nice ingredients will make them
edible.
## Changelog
🆑
fix: Foods that have special conditions for liking/disliking them (such
as donuts for sec officers) have these conditions again.
fix: Characters with ageusia properly ignore non-toxic food types that
they eat.
fix: If you examine toxic food, it can no longer appear to you as
edible.
/🆑
2023-09-22 20:32:39 +02:00
Ben10Omintrix
0976420f2f seedling basic mobs (#78224)
## About The Pull Request
this is a mob that was removed from the game since years ago. this pr
refactors them and readds them to the game. seedlings now can have
different colored petals!

![petalcolors](https://github.com/tgstation/tgstation/assets/138636438/7c657c49-9186-4563-a93f-eba35e335ce9)


to obtain this monster, botany can now grow them out of 'seedling' seeds
that they can find in the exotic seeds crate. this mob loves to help all
plants and when its grown out of the seed, it will help the botanists
look after their plants. it can water plants (if it finds a bucket),
remove weeds and remove dead plants. they will also use their solarbeam
ability to provide small healing to damaged plants. it will try to
refill its bucket with water if there is a water source near by. it will
also follow the orders of whoever harvested it.


![plantbotany](https://github.com/tgstation/tgstation/assets/138636438/4cde0613-0869-4fea-8851-2e6f4680d9d7)

traitors can buy a seed from the uplink that grows an evil version of
the seedlings, they can command them to attack people and use abilities
and to cause chaos on the station.


## Why It's Good For The Game
refacotrs the seedlings into basic mobs

## Changelog
🆑
refactor: seedlings have been refactored into basic mobs please report
any bugs
add: seedlings now can have different colored petals and can look after
botanys plants
add: seedlings are re-added to the game! they grow out of seedling seeds
obtainable from exotic seed crates or traitor uplink
/🆑
2023-09-22 15:28:48 +01:00
distributivgesetz
83fb93e275 The Medal Epilogue: Engineering (And Medical) Now Gets Them Too (#78461)
## About The Pull Request

**Credits to @CoiledLamb for the awesome sprites in this PR!**

CE 🤝 CMO

Finally, the last department to receive their own medal box, the
engineering department. The saga is complete, we can go home now.

Adds two types of medals: 1. For assisting the station in a crisis, the
"emergency services award" 2. For showing your atmospheric prowess with
a project, the "atmospheric mastery award"

To me, those two awards symbolize the best engineering (and medical) has
to offer. On the one hand, assisting the station and its crew in a
calamity, and on the other hand just absolutely flexing your atmos
knowledge on your boss.

CEs now have a lockbox in their locker with 3 emergency service medals
and 1 atmospheric mastery medal, and CMOs get 3 emergency services
medals in their lockbox.

3 emergency service medals may seem like a lot, but remember that
assisting the station is often done in a team and not alone. An
engineering/medical department who can work together in a crisis really
demonstrates how robust they are.

As for the atmos mastery medal, well...
### THERE CAN ONLY BE ONE !

<details>
<summary>Pictures</summary>


![image](https://github.com/tgstation/tgstation/assets/47710522/d3237b6a-df4e-44f6-90e0-4eed3202b351)
Upper row: emergency services award, engineering
Middle row: atmospheric mastery award
Lower row: emergency services award, medical


![image](https://github.com/tgstation/tgstation/assets/47710522/27543c0e-e77b-46ec-8c79-3f56c0940271)

![image](https://github.com/tgstation/tgstation/assets/47710522/7b3c0a6c-2c47-4e0f-af3f-b9d0037c19d4)

![image](https://github.com/tgstation/tgstation/assets/47710522/ae5bbeb3-42af-4b52-ae02-aa48480c8fd5)

Sprites without funky byond scaling


![image](https://github.com/tgstation/tgstation/assets/47710522/eab183dd-18c5-4e21-ad83-ee4bed7733b6)

![image](https://github.com/tgstation/tgstation/assets/47710522/66a85894-8163-40e7-bc91-b5c27e75b943)

</details>

## Why It's Good For The Game

medals are cute and awesome, i think you can agree
## Changelog
🆑 distributivgesetz, CoiledLamb
add: Added two new awards specifically for engineering and medical: The
"Emergency Services Award" and the "Atmospheric Mastery Award". CEs get
3 Emergency Services Awards and 1 Atmospheric Mastery Award and CMOs get
3 Emergency Services Awards.
/🆑
2023-09-22 13:49:06 +01:00
GPeckman
741260147e Fixes the comments in closets.dm (#78468)
## About The Pull Request

It looks like someone in a previous PR was a little too zealous with
find-and-replace, and replaced every 'w' in some of the comments in
closets.dm with 'weapon.' This PR just fixes those comments, making them
easily readable again.
## Why It's Good For The Game

Comments should be readable.
## Changelog
No player-facing changes.
2023-09-21 12:28:32 -07:00
Toastgoats
d92cacf866 Nerfs peacekeeper borg shock hugs (#78332)
## About The Pull Request

Modifies the flags of the peacekeeper cyborg's emagged shock hug,
changing the hardstun to one similar to the shock hand mutation.
## Why It's Good For The Game

Most players will agree that hardstuns are something that should be
phased out, however, there are some situations where hardstuns are
necessary for glass cannons to balance out their achilles heel.
Peacekeeper borg shock hugs are not one of those things.

Right now, the shock hug is a discreet (i.e iconless) electrocution
hardstun weapon that ignores insuls, arguably making it more effective
than the engineer borg's stun arm despite being a side module.

One of the things that balances this out on the engineer borg is that
the stun arm is a dead giveaway, it has a visible icon and makes a
distinct stun noise. Meanwhile, shock hugs have no icon, and the
ubiquitous shock effect combined with the relative obscurity of the
shock hug can cause some confusion among the crew.

Although borgs _should_ be powerful in many cases, this powerful of a
combat tool feels unwarranted considering the peacekeeper already has
multiple other stunning tools.

Replacing the stun effect with a disarming effect should act as a soft
nerf while playing into the peacekeeper borg's anti harm theming, and
hopefully keep it viable as disarming can very well make or break a
fight.
## Changelog
🆑
balance: Peacekeeper cyborg's emagged hug is no longer a hardstun.
/🆑
2023-09-21 05:50:14 -04:00
Jacquerel
7025e5da5e Replaces "Bread" smite with "Objectify" (#78445)
Instead of turning people into bread, the bread smite can now turn people into any object (including bread).
2023-09-21 08:24:37 +02:00
SyncIt21
aa44be14e8 Makes /datum/component/wall_mounted actually do it's job (#78439)
## About The Pull Request
This component added in #77417 never actually worked. It has 2 problems

**1. Nothing even gets dismounted**


https://github.com/tgstation/tgstation/assets/110812394/8859794c-e2da-4bf2-bf2e-cd44fb240872

This is because a ton of objects in game don't actually pass a callback
when the object is getting dismounted i.e. they pass no params to the
`find_and_hang_on_wall()` proc for e.g.


11ec431834/code/game/objects/items/wall_mounted.dm (L58)

and because the callback is null the action 


11ec431834/code/datums/components/wall_mounted.dm (L54)

never gets executed. Now to combat this in the `Initialize()` proc a
null check is done to ensure the callback is not null

11ec431834/code/datums/components/wall_mounted.dm (L15-L18)

But this code itself is broken for 2 reasons
1. We create a callback using the `CALLBACK` macro they are not the same
as `TYPE_PROC_REF` also we never specify which object this proc ref
should even be called on
2. `on_drop` ends up null anyway because we first check if the param is
null and set its value here

11ec431834/code/datums/components/wall_mounted.dm (L15-L16)
But then we again overwrite `on_drop` with the param passed(which is
null) so it ends up becoming null again

11ec431834/code/datums/components/wall_mounted.dm (L18)

So this never did it's job. Also we simply can't create a callback on
`obj/deconstruct` because this proc accepts a boolean as it's param

11ec431834/code/game/objects/obj_defense.dm (L150)
But we pass the `hanging_param` as its param when invoking the callback

11ec431834/code/datums/components/wall_mounted.dm (L54)

Which would cause undefined behaviour so we have to manually do a null
check for this param and call the `deconstruct` proc explicitly to
ensure correct behaviour


**2. Wall mounts created in round would runtime**

**Reproduction**
1. Use some iron sheets to construct an air alarm wall frame(or any
wallmount of your choice)
4. Put on wall
5. Get stack trace


![Error](https://github.com/tgstation/tgstation/assets/110812394/2f802dc2-faaa-4ee3-aacf-38b83adef17d)

This occurred because the component received an invalid parent when
mounting was attempted.

![Cause](https://github.com/tgstation/tgstation/assets/110812394/aed12757-edf6-4f79-8763-00f4a86251ca)

Which was caused by

11ec431834/code/game/objects/items/wall_mounted.dm (L45)

We should be doing this the other way around i.e. 

`hanging_object.AddComponent(/datum/component/wall_mounted, on_wall)`

But the truth is even this is not required nor is this


11ec431834/code/game/objects/items/wall_mounted.dm (L58)

These 2 lines of code are not necessary because a lot of objects call
`find_and_hang_on_wall()` proc by themselves in their `Initialization()`
proc for e.g.


11ec431834/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm (L127)

So the work is already done for us. we were just adding the component 2
more times for no reason and causing problems.

## Changelog
🆑
fix: wall mounted objects air alarms, fire alarms etc now actually falls
off/gets destroyed when their attached wall is deconstructed
fix: wall mounts crafted in game also properly falls off/gets destroyed
when their attached wall is deconstructed
/🆑
2023-09-20 16:53:38 +02:00
jimmyl
4b73b37d60 Heretic Knock Path (#78108)
## About The Pull Request

other changes: GODMODEd mobs cannot receive embeds or bleed, admins can
now use the traitor panel to give heretics a focus

adds a new heretic path, the path of knock
its a path about opening shit and having access
wound opening included, and stealing
this is its award icon

![ascended](https://github.com/tgstation/tgstation/assets/70376633/01473bf2-5c44-4574-850c-83fb5db204fd)
its knowledge is as follows:

### A Locksmith’s Secret
starting knowledge, unlocks the key blade which also works as a crowbar


https://github.com/tgstation/tgstation/assets/70376633/3690232d-5687-4b0c-a9cc-b6374e7f1850

### Grasp of Knock
it literally just opens stuff (also makes a knocking sound)
unbolts bolted airlocks and opens them, opens locked closets, opens
mechas, logs you into consoles
(comms consoles are with barebones head-level access, no buying shuttle,
but hey you can shitpost over comms)
Sidepaths: Ashen Eyes, Codex Cicatrix


https://github.com/tgstation/tgstation/assets/70376633/8b890d69-ee03-4d12-99dd-dde7b4483cd4

### Key Keepers Burden
transmute a rod,wallet, and some id card to create an eldritch id card
(very original naming), the ID card used is not preserved
this ID card functions essentially as a superior agent card, using other
IDs on it makes it be consumed by the eldritch ID and have its accesses
and forms added into it, you can use it inhand to turn it into any of
the cards that were consumed
in addition you can hit two airlocks with it to link them together to
create portals under the doors, which has a green glow
going through the portal as a Heretic gets you to the other destination
going through as a nonheretic lands you in a random onstation airlock,
SM chamber included if youre unlucky
1 id card can only have 1 set of portals, making another destroys the
former set, one of the airlocks being destroyed also destroys them


https://github.com/tgstation/tgstation/assets/70376633/e96a518e-b35d-44aa-9a7c-8f2103feab6f

### Rite Of Passage
transmute a white crayon, a multitool, and a plank to create consecrated
lintel
heretics can use this cool looking book to create a 8 second shield that
knocks back any nonheretic that tries to pass
also its ranged


https://github.com/tgstation/tgstation/assets/70376633/036e0875-c422-433e-87b3-71328cb2bf8a

### Mark Of Knock
the mansus grasp will now mark its victim for like 10 seconds
marked victims are denied access by all objects, public airlocks
included


https://github.com/tgstation/tgstation/assets/70376633/6187ef36-30f4-4a92-af21-e5b288afb869

### Burglars Finesse
steal a random item from the victims backpack (or other storage item if
they dont have a backpack) and puts it into your hand
the victim will probably hear you and also gets a chat message about
this



https://github.com/tgstation/tgstation/assets/70376633/2529fa78-616d-4a46-ae18-3cb22efb1ab1

### Ritual of knowledge
this is nothing new i put this here to keep it in order

### Apetra Vulnera (sidepath with flesh)
the victim receives bleed wounds on every single bodypart that has more
than 15 brute
if they dont have a bodypart that has >= 15 brute they get a random
wound anyway so
side paths are: blood siphon and void cloak



https://github.com/tgstation/tgstation/assets/70376633/3c2cd21e-edbc-4956-8c2d-cd9a42b87f33

### Wave of Desperation (sidepath with flesh)
cannot be casted uncuffed with no bola, can be casted cuffed with no
bola, with a bola and no cuffs
adjacent mobs are knocked down, mobs are repulsed away, your cuffs and
bola are destroyed, and you gain a status effect that:
after 12 seconds makes you unconscious for 20 seconds
5 min cooldown


https://github.com/tgstation/tgstation/assets/70376633/da480921-d5dd-4b46-b2e8-0cf543640bf9

### Opening Blade
your blade has a 35% chance to cause a weeping avulsion on hit


https://github.com/tgstation/tgstation/assets/70376633/b6fd2837-6b0a-4a5a-bc7b-b9c3f7f715d1

### Caretakers Last Refuge
you can only cast this when not near sentient living beings
while in refuge you are invincible and near transparent, cannot use your
hands or spells
also immune to damage slowdown, being hit with a null rod cancels this
also if you lose your focus you get out of refuge


https://github.com/tgstation/tgstation/assets/70376633/f053cfd8-2a16-4195-8004-17df077983ca



https://github.com/tgstation/tgstation/assets/70376633/72330486-5273-4123-a108-b437b56120c4

### Many secrets behind the Spider Door (Ascension)
ritual needs 3 bodies without organs in their chest
when successfully performed you ascend and;
open a tear in reality (not the BoH one) which;
Polls all ghosts with sentient mob enabled to spawn and siege the
station, ghosts can interact with the portal to spawn as a random
eldritch mob
spawned mobs are loyal to whoever ascended and on examine can identify
their master
also fills the entire room with purple light

also the heretics opening blade is upgraded to a 65% chance, and they
gain Ascended Shapeshift which allows them to shapeshift into eldritch
mobs, and its not 1 choice only



https://github.com/tgstation/tgstation/assets/70376633/8d06286e-789d-442f-b33c-878d26deab07


## Why It's Good For The Game

its cool i think and an option for those wanting to steal and be sneaky
and stuff

## Changelog
🆑
add: heretic knock path and its respective items and award
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-09-19 19:07:51 +00:00
Zephyr
1b96345e44 Multi-Z Support for Lazy Templates | Cleans up some turf flag misuse (#77786)
## About The Pull Request

Adds multi-z support for lazy templates
Also fixes some improper use and placement for turf flags
## Why It's Good For The Game

Shadow needs/wants this for bit runner maps.
Turf flags are also why lava has been generating in places it shouldnt.
(inside of ruins)
## Changelog
🆑
fix: Lava can no longer occasionally generate inside of previously
loaded templates and breach and/or destroy shit
/🆑

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2023-09-19 01:06:08 +00:00
Shadow-Quill
a446ac7166 Adds craftable surgery trays. (#78364)
## About The Pull Request

Surgery trays can now be crafted in the crafting menu for two rods and
one silver, while having a screwdriver. (Same cost as a table.)
Out of necessity, the preloaded variants of surgery trays have been
re-pathed to a full subtype, though maps have already been updated to
use the preloaded variant.

The morgue tray and the (new!) advanced trays have been re-pathed to
`.../full/morgue` and `.../full/advanced`, respectively

Additionally, surgery trays can now be deconstructed by secondary click
with a screwdriver. Woo!

## Why It's Good For The Game

If you want more surgery trays, build 'em!
If you want less surgery trays, unbuild 'em!

## Changelog
🆑
qol: Surgery trays can now be crafted via the crafting menu (two rods,
one silver), and deconstructed via secondary click with a screwdriver!
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-09-18 21:20:08 +00:00
Moose1002
8464ef9727 Fixes Multitool Buffer Clearing and Adds Multitool Linking Balloon Alerts (#78309)
## About The Pull Request
I was working on a feature that required the buffer of a multitool to be
cleared out after linking two devices, when I noticed it wasn't possible
to clear the multitool's buffer. The change to multitools in #77639 made
it impossible to set the buffer of a multitool to null without
destroying the stored object, yet many objects still tried to have the
multitool clear it's buffer after a successful linkage. This creates a
new proc, clear_buffer() dedicated just to clearing the buffer of a
multitool.

Also made all of the multitool linkage messages balloon alerts.

If there's any issues or things I can improve please let me know, I'm a
bit new to BYOND and DM but I'm working on learning so I can make some
more ambitious projects! _(I think I got the signaling right)_
## Why It's Good For The Game
Some objects aren't meant to be saved in the multitool's buffer after
the initial linking, this should fix that.
Also balloon alerts are nice.
## Changelog
🆑
fix: Nanotrasen has finally recalled their faulty multitools and
replaced them with working ones! The multitool's buffer now properly
clears itself.
qol: Moved multitool link messages to balloon alerts
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-09-18 18:18:06 +00:00
Teagarden
c7a33df99b Buildable mass drivers (#78360)
## About The Pull Request
Adds the ability to build mass drivers, you activate them by attaching a
signaler to their launch wire. They also have a safety wire, that when
pulsed, increases the power of it. To reset the power back to normal you
cut the safety wire. This is mostly just a port of
https://github.com/BeeStation/BeeStation-Hornet/pull/5563

## Why It's Good For The Game

Less weird unique machines, and you can do some interesting stuff with
mass drivers, like traps, cannons, and many other interesting things.

## Changelog

🆑
add: mass drivers are now buildable, you activate them by attaching a
signaler to their launch wire, and can increase their power by pulsing
the safeties wire, and reset it back to normal by cutting the safeties
wire.
/🆑
2023-09-18 14:13:19 +02:00
jimmyl
b8903325c6 fixes pizzabox+pancake stack layering, pizzabox bomb labelling (#78370)
## About The Pull Request


![image](https://github.com/tgstation/tgstation/assets/70376633/7238b875-903a-4fbb-aaba-b29a2887b497)

pizzabox stacks now layer correctly
pancake stacks now layer correctly

the pizzabox bombs that arent armed that can come with the cargo shuttle
now update their label so theyre slightly less obvious
also they can no longer spawn the base flatbread type that just looks
like an error

## Why It's Good For The Game

fixes #77380

## Changelog
🆑
fix: pancake stack layering
fix: pizzabox stack layering
fix: pizzabox bombs that spawn unarmed now label their pizza correctly
and cannot spawn a spriteless pizza
/🆑
2023-09-18 14:07:22 +02:00
SyncIt21
7c24788513 Refactors & patches for grinding & juicing (#78268)
## About The Pull Request

This deals with grinding & juicing in 4 stages

**1. General grinding & juicing**
Nothing player facing, just added some extra null checks to ensure we
use `reagents` and `target_holder` only when they are not null. The
current way it was setup did not check for this

**2. Grinding Stacks**
- Fixes #48387
- Fixes #78180
- Fixes #77878

This changes the way stacks are grinded. Rather than grinding the whole
stack and have reagents wasted from grinding because there isn't enough
space in the beaker we do the reverse.
We calculate how many pieces of cable(or sheets of material) can be
grinded "based" on the available volume inside the `target_holder`(i.e.
beaker for all in 1 grinder, or internal buffer for chemical plumbing
grinder, mortar & pedestal)

**For example**
Say you have a beaker of 100 ml capacity and you have a stack of 50 iron
sheets where each sheet of iron when grinded yields 20 units of iron
reagent. Doing some simple math we should only be able to grind 5 sheets
of iron(20 units of iron per sheet x 5 = 100 ml capacity). This means
the remaining 45 sheets of iron should be left untouched and we should
be able to eject and regrind them in a different beaker if we don't have
the space for it.

This PR does exactly that. It computes how many pieces/sheets can be
grinded based on the available volume for grinding (e.g. based on the
available volume in your beaker for the all in 1 grinder) and grinds
exactly that many pieces, leaving the rest of stack untouched so you can
reuse them

This way you avoid wasting stacks when your beaker doesn't have the
required space to hold its reagents

**3. Plumbing Chemical Grinder**
- Not sure how nobody noticed but the plumbing chemical grinder
completely stopped working because wrong arguments were passed to the
items grind & juice procs

2ddbdca1b7/code/modules/plumbing/plumbers/grinder_chemical.dm (L47)
When it fact it should have been
`I.grind(reagents, usr)`
So yeah the plumbing chemical grinder works again

- Fixes #75429
The plumbing chemical grinder now blocks anything that isn't an
`obj/item` from entering inside it. The `grind` proc is set up to accept
only items anyway so allowing mobs to enter is just a waste of
processing power. That way nobody gets stuck inside,

- Fixes #62822
The chemical grinder now accepts items coming at it from any direction.
if you don't want to throw stuff at it you can manually put stuff in it
with hand. If you try to use a storage item like a bag(plant bag or any
bag) it dumps all its contents in the grinder.

**4. All in 1 Grinder**  
- Fixes #76983
You can now remove the beaker when the blender is unpowered with right
click. The left click does not work when power is off because
`ui_interact()` proc is disabled which was responsible for ejecting the
beaker & its contents. The right click was meant to compensate for this
but it also checked if power was available and it also failed. Now that
check has been removed meaning you can eject the beaker & its contents
via right click

- Fixes #54813 
The delay and shake animation is already handled by the `operate()` proc
but the mix settings would add an additional timer on top of that with a
fixed delay of 50 deciseconds. That timer is adjusted so its reduced
from upgraded parts

## Changelog
🆑
code: added some null checks for general juicing & grinding items
fix: grinding stacks now grinds as many pieces/sheets from the stack as
possible that can fit in a beaker/container without wasting the whole
stack
fix: plumbing chemical grinder now actually works again
fix: the plumbing chemical grinder allows stuff to enter from any
direction but not mobs and also accepts items put inside it via hand
including bags
fix: You can remove the beaker from the all in 1 grinder when power is
off via right click
fix: All in 1 grinder now mixes faster with upgraded parts
refactor: you can no longer walk into a plumbing chemical grinder
/🆑

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
2023-09-17 08:27:21 +00:00
jimmyl
3567c1b2a6 go go gadget hat (#78293)
## About The Pull Request

adds a hat that you can say a phrase for it to put something in your hands
2023-09-17 07:06:23 +00:00
Zephyr
ccae3b5dd2 Items created from durathread are now 50% more resistant to consuming (#78325)
## About The Pull Request

Title.
This means that a moth can take, on average due to rounding, double the
normal bites from an article of durathread clothing.
2023-09-17 01:28:23 -05:00
Ghom
a351e4522c Culls client/mouse code only used by beam rifles in favor of signals. (#78113) 2023-09-17 01:25:51 -05:00
Jacquerel
8f999ad894 Ghosts can eat ghost burgers (#78303)
## About The Pull Request

Every tick while a ghost is orbiting a ghost burger there is a 20%
chance per ghost (capping at 100% at 5 ghosts) that they will take a
bite out of the ghost burger, shrinking it and depleting its reagents
until it is completely consumed.
It leaves some ectoplasm behind which you could use to make another
burger.
Also ghost burgers can no longer decay or pick up floor germs, the
burger moves itself so this would happen reasonably often because it
doesn't stay on tables. Also: it is a ghost.

Also just before I posted this PR I noticed that "booberry muffins" also
exist so there was nothing for it but to componentise this behaviour and
attach it to both food items, so I guess admins can also make anything
with reagents edible to ghosts also.

## Why It's Good For The Game

I think the chef should be able to make food for ghosts. It's not fair
if only living people get to eat.

## Changelog

🆑
add: Ghosts (observers) can eat ghost burgers and booberry muffins.
balance: Ghost burgers will not decay or pick up germs due to the fact
that they moved themselves off a table.
/🆑
2023-09-16 19:42:18 -07:00