Commit Graph

43073 Commits

Author SHA1 Message Date
necromanceranne
db33f07921 [NO GBP] Fixes the knife offsets of pipeguns (#83155)
<!-- 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

Fixes the knife offsets of pipeguns.

## Why It's Good For The Game

I completely forgot to fix this when I updated the pipegun sprites.
Oops.

## 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: Fixes the knife offset for pipeguns
/🆑

<!-- 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. -->
2024-05-15 02:32:33 +02:00
Sadboysuss
8b8934c700 Portals now make sounds (#83166)
## About The Pull Request
### New sounds:

https://drive.google.com/drive/folders/1vLoyxY93Qfe_GtCnetkEHLrkGYZ8S7nD?usp=sharing

Demo:


https://github.com/tgstation/tgstation/assets/96586172/2c468ab8-deea-4151-8d66-167b63fdda39



Changes teleporter,gulag teleporter, hand tele, bluespace teleport gun,
cultist teleport, experimental syndicate teleporter teleport sounds.
## Why It's Good For The Game
I think sounds are an integral part of immersion and having no cool
sci-fi noises for portals really spoils it.
## Changelog
🆑 grungussuss and Virgilcore
sound: portals now have a unique sound to them
/🆑
2024-05-15 02:32:01 +02:00
Afevis
9affd58bec Fixes kinetic accelerator fire sound div 0 runtime (#83177)
```
 [17:34:10] Division by zero
Thrown by fire_sounds (/obj/item/gun/energy/fire_sounds) at code/modules/projectiles/guns/energy.dm, line 50

User: Xiryang Zhol (/mob/living/carbon/human)
User Location: the volcanic floor (/turf/open/misc/asteroid/basalt/lava_land_surface) (78, 184, 3)
Source: the proto-kinetic accelerator (/obj/item/gun/energy/recharge/kinetic_accelerator)
Source Location: Xiryang Zhol (/mob/living/carbon/human)
Stacktrace:
1	the proto-kinetic accelerator (/obj/item/gun/energy/recharge/kinetic_accelerator): fire sounds()
2	the proto-kinetic accelerator (/obj/item/gun/energy/recharge/kinetic_accelerator): shoot live shot(Xiryang Zhol (/mob/living/carbon/human), 0, the legion (/mob/living/basic/legion_brood), 1)
3	the proto-kinetic accelerator (/obj/item/gun/energy/recharge/kinetic_accelerator): shoot live shot(Xiryang Zhol (/mob/living/carbon/human), 0, the legion (/mob/living/basic/legion_brood), 1)
4	the proto-kinetic accelerator (/obj/item/gun/energy/recharge/kinetic_accelerator): process fire(the legion (/mob/living/basic/legion_brood), Xiryang Zhol (/mob/living/carbon/human), 1, "icon-x=18;icon-y=17;left=1;but...", "", 0)
5	the proto-kinetic accelerator (/obj/item/gun/energy/recharge/kinetic_accelerator): process fire(the legion (/mob/living/basic/legion_brood), Xiryang Zhol (/mob/living/carbon/human), 1, "icon-x=18;icon-y=17;left=1;but...", "", 0)
6	the proto-kinetic accelerator (/obj/item/gun/energy/recharge/kinetic_accelerator): fire gun(the legion (/mob/living/basic/legion_brood), Xiryang Zhol (/mob/living/carbon/human), 1, "icon-x=18;icon-y=17;left=1;but...")
7	the proto-kinetic accelerator (/obj/item/gun/energy/recharge/kinetic_accelerator): afterattack(the legion (/mob/living/basic/legion_brood), Xiryang Zhol (/mob/living/carbon/human), 1, "icon-x=18;icon-y=17;left=1;but...")
8	the proto-kinetic accelerator (/obj/item/gun/energy/recharge/kinetic_accelerator): melee attack chain(Xiryang Zhol (/mob/living/carbon/human), the legion (/mob/living/basic/legion_brood), "icon-x=18;icon-y=17;left=1;but...")
9	Xiryang Zhol (/mob/living/carbon/human): ClickOn(the legion (/mob/living/basic/legion_brood), "icon-x=18;icon-y=17;left=1;but...")
10	the legion (/mob/living/basic/legion_brood): Click(the volcanic floor (78,183,3) (/turf/open/misc/asteroid/basalt/lava_land_surface), "mapwindow.map", "icon-x=18;icon-y=17;left=1;but...")
```
2024-05-15 02:30:58 +02:00
Lufferly
ca92ca4704 Fixes destroyed solar panels dropping overlays (#83224)
## About The Pull Request
Fixes #82301
It feels like im missing something here so if this isnt the right way to
fix this (deleting the overlays on the solar panels Destroy() ) please
tell me.

## Why It's Good For The Game
Bugfix

## Changelog

🆑 Seven
fix: Destroyed solar panels no longer drop their overlays
/🆑
2024-05-15 02:22:38 +02:00
SyncIt21
16be085f7b Fixes energy lost as heat for some machines (#83205)
## About The Pull Request
By fixes i mean the energy lost as heat is now directly proportional to
the amount of power these machines draw from the grid via
`charge_cell()` proc. The machines affected are as follows
- Cell charger
- Mechbay charger
- Recharge stations + cyborg charging fix(Fixes #82626)

The idea is simple. As the cell nears its charging completion it draws
less power from the grid to complete that last mile (for e.g. if the
cell is 0% charged the cell charger attempts to draw 100% of the cells
max charge from the grid but if the cell is already 99% charged it will
only attempt to draw 1% of the required power from the grid) and so it
only makes sense that the heat energy lost is also less & vice versa.

In other words the heat energy lost is directly proportional to the
amount of work done (via `charge_cell()` proc) so you get conservation
of energy & bug fixes which especially benifits borgs & mod suits at the
recharge station as it will attempt to first pump in whatever energy is
available from the grid and then compute energy lost as heat from it &
not the other way around.

For borgs we attempt to first charge its modules & then charge the cell
so you get an fully charged cell at the end

## Changelog
🆑
fix: cell chargers, mechbay port chargers & recharge stations heat lost
is directly proportional to energy drawn from the grid to charge their
respective cells
fix: cyborgs should charge more frequently & to their max capacity at
recharge stations
/🆑
2024-05-15 02:21:16 +02:00
Lufferly
d7aef14eb9 Fixes cultist blood rites runtime (#83220)
## About The Pull Request
Fixes #82443
Fixes a runtime when using bloodrites on yourself. It was trying to
create a beam from the user to the user, and the beam datum cant handle
that.

## Why It's Good For The Game
Bugfix

## Changelog

🆑 Seven
fix: Fixed a runtime when using the cultist blood rites on yourself.
/🆑
2024-05-15 02:17:12 +02:00
Kyle Spier-Swenson
a8dda646a1 Moves as many db related date/time operations to the db side to avoid byond bugs with dates and times. (#83193)
While we try to have the datetimes of all vms synced to within 100ms of
eachother, via a cluster of time servers and intercepting all ntp
traffic in the vm lan towards the cluster, this isn't perfect and so
things putting time onto the database server should use the time at the
database server as much as it can.

To avoid confusion, i have renamed `SQLtime()` to `ISOtime()` to avoid
the likely hood its cargo culted onto database code again. ISOtime is
still a bad name, but there isn't a good name for this kind of time
format, like ISO8601, but human readable (so no `T` between date and
time and less other nonsense), with an assumption of GMT, thats not
SQLtime(), and SQLtime(). Suggestions welcome.

also byond's time procs can bug out because of how cursed they operate,
case in point, this year 2054 item that got inserted into the legacy
population table:


![image](https://github.com/tgstation/tgstation/assets/7069733/41669db0-c242-4c4e-ae6e-709725b91439)
2024-05-14 15:48:38 -06:00
MrMelbert
11843651f5 Allows status effects with alerts to display their duration (on the alert), adds it to a select handful (#83211)
## About The Pull Request

Plainly: Expands the status effect API so their alerts can showcase
duration remaining.


https://github.com/tgstation/tgstation/assets/51863163/02eaad84-ebb7-4af9-9895-977c6e71acc4

## Why It's Good For The Game

I figure there are some status effects out there which really want the
player to know how long the duration is.

And right now, for 95% of them, you have to code dive to find out. This
is rather punishing for players who... don't code dive.

At the same time, there are effects which *do* tell you how long they
last, which leaves it up to the player to intuit when it'll run out.
This can get a bit silly during lag, and again, punishes new players.

That's not to say I think every status effect should report how much
duration is left: **For very common effects, like sleeping, it should be
left up to the player to guess.** Otherwise we lose a lot of paranoia
and feeling of helplessness. (Also keep in mind this only applies to
status effects with alerts associated.)

Hence why I only added it, largely, to the more "gamified" buffs and
debuffs - Things from (generally) one or two sources and with a static
duration, (or things which already informed the player how long they
last).

Notable ones include Fleshmend, Convulsing (from emag defib), Regen
core.

## Changelog

🆑 Melbert
qol: Some alerts, such as Fleshmend's, show their remaining duration on
their icon.
/🆑
2024-05-14 08:36:23 +02:00
starrm4nn
5d81ba7bb0 Makes Health Sensor assemblies a bit nicer to use (#83183)
## About The Pull Request
Gives health sensors a UI to change their settings

![sensor-off](https://github.com/tgstation/tgstation/assets/139372157/06eb1756-23ff-4d8a-b305-e847430f6982)

![sensor-on](https://github.com/tgstation/tgstation/assets/139372157/466f21d2-8369-4e04-9197-d606063aa715)

![checking-for-death](https://github.com/tgstation/tgstation/assets/139372157/25d7bc84-246b-4997-9684-e899a6700b5b)


## Why It's Good For The Game

Makes the assemblies less annoying to use

## Changelog
🆑

qol: Gives Health sensor assemblies a UI so its easier to use.

/🆑
2024-05-13 11:09:05 -07:00
Afevis
6933307eea Fixes tram malfuction event not ending properly (#83200)
these lists only contains text, not anything qdeletable. 
```
[18:10:26] Runtime in code/controllers/subsystem/garbage.dm, line 349: bad del
proc name: qdel (/proc/qdel)
src: null
call stack:
qdel(null, 0)
the tram controller (/obj/machinery/transport/tram_controller): clear repair signals()
/datum/transport_controller/li... (/datum/transport_controller/linear/tram): end malf event()
/datum/round_event/tram_malfun... (/datum/round_event/tram_malfunction): end()
/datum/round_event/tram_malfun... (/datum/round_event/tram_malfunction): process(2)
Events (/datum/controller/subsystem/events): fire(0)
Events (/datum/controller/subsystem/events): ignite(0)
Master (/datum/controller/master): RunQueue()
Master (/datum/controller/master): Loop(2)
Master (/datum/controller/master): StartProcessing(0)
```
2024-05-13 08:50:30 -07:00
Time-Green
013e40bc8e Fixes brain deletion not being lethal (#83203)
Oversight on my part. I stuck c4 on a lizards brain and it didnt kill
them.

The deletion chain is somewhat awkward for humans. When deleting a
human, it deletes the organs but also removes them, which causes all
kinds of wacky effects on a deleting mob which is not great.

This is more akin to a band aid, but I need to take some time and focus
to sort through all the removal procs and make them qdel friendly

🆑
fix: Deleting someones brain kills them again
/🆑
2024-05-13 08:49:38 -07:00
Jacquerel
28791c0a5f Bodybuilders can see each others' power levels. (#83088)
## About The Pull Request

Once you gain a level in Athletics you will gain the ability to evaluate
the relative muscularity (in terms of unarmed combat) of your fellow
crewmates by examining them.
Various factors influence this; 
- The damage dealt by your limbs.
- Your experience in the fitness skill.
- Various quirks, genetic mutations, and brain traumas.

In order to make this not an antagonist check, Changelings will now also
be able to copy your athletics skill level when they steal your DNA.
This is... admittedly a little weird, but this is a consequence of using
"skills" to represent a physical attribute I guess.

## Why It's Good For The Game

During the social experiment we sometimes call "April Fools Day" it
became apparent to me that our playerbase liked to watch a number go up,
a quality marked especially in those players who liked to have their
characters hang out in the gym.
Many of them made their characters repeatedly hang out in the gym and
work out even though doing this had no effect at all on the number they
were supposedly increasing.
I would like to give this joy back to them.
<sub><sup>Additionally I have heard that the ability to retain players
by stimulating their desire to see numbers increase is good for our
annual retention metrics.</sub></sup>

Ultimately this is a very silly feature but I think that there often
_can be_ a comparative aspect to bodybuilding and letting players be
competitive in terms of looking at each other's completely meaningless
numbers gives them something to base a story around.

Also I mostly only make silly features.

## Changelog

🆑
add: People who spend time improving their bodies are able to evaluate
the relative physical strength of those they examine as a kind of "power
level".
add: Changeling transformation copies the target's athletics skill
level.
/🆑
2024-05-13 02:37:41 -04:00
paganiy
d70aa8b55f Fix the size of the projectile of the accelerator laser cannon (#83144)
## About The Pull Request
Closes
https://github.com/tgstation/tgstation/issues/82965#issue-2270347676

This is how it looks now:


https://github.com/tgstation/tgstation/assets/126676387/3934017c-b031-4bb0-8041-231739a6144c


## Why It's Good For The Game
It's not
## Changelog
🆑
fix: Accelerator laser gun no longer shoots sun size projectiles.
/🆑

---------

Co-authored-by: paganiy <leunscrupuloustrolle@gmail.com>
2024-05-13 02:36:17 -04:00
MrMelbert
a838d0b011 Replace cigarette smoke with particles, add a big puff when taking cigarettes out of your mouth (#83101)
## About The Pull Request

- Cigarette particles are now particles rather than baked in 
- Taking a cigarette out of your mouth release a big puff of smoke


https://github.com/tgstation/tgstation/assets/51863163/183b39e7-3367-43a1-b750-99e66838d60f

## Why It's Good For The Game

Looks better

## Changelog

🆑 Melbert
add: Cigarette smoke is now more smokey. 
add: Taking a cigarette out of your mouth will let out a big puff of
smoke.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2024-05-12 20:09:49 -04:00
nikothedude
2083960e95 Adds a period to the end of the wendigo deathrattle (#83185)
## About The Pull Request

Title
## Why It's Good For The Game

typos... BAD?????????
## Changelog
🆑
spellcheck: Added a period to the end of the wendigo deathrattle
/🆑
2024-05-12 21:57:01 +02:00
PapaMichael
1b09d8df7d Rat Kings can no longer create grime and miasma while ventcrawling (#83176)
## About The Pull Request
Blocks Rat Kings from using "Rat King's Domain" (the spell that spawns
dirt/vomit/oil and creates miasma) while ventcrawling.

Also blocks Rat Kings from summoning mice while in pipes; as far as I
can tell, this is just an oversight, as it previously created a mouse
stuck inside of the pipe without the normal chat message.
## Why It's Good For The Game
Rat Kings are supposed to build a lair of filth, a rat king visiting
every department in the distro pipes while spamming motor oil is boring,
lame, lacks any contextual sense that a rat inside a pipe could dirty
the floor above it, and doesn't really have any counterplay besides
begging atmos to up the temperature (which they realistically probably
will never do because it's a rat king not a xeno or a ling).

Ling spells are blocked while crawling so there's precedent for it.
## Changelog
🆑 PapaMichael
fix: Rat Kings can no longer trap mice inside of pipes by creating them
while ventcrawling.
balance: Rat Kings can no longer create grime and miasma while
ventcrawling.
/🆑
2024-05-12 08:43:08 -07:00
Joshua Kidder
c3622c3e16 Enables right click, alt click, ctrl click for alt-click item window (#83179)
## About The Pull Request

This fix enables most of the clicks that have been disabled in the alt
click menu up to this point. However, I did have to cut out the pointing
thing it would do for right clicking. The only thing you aren't able to
do with the new alt-click menu at this point is dragging items onto each
other, pointing, and the shift-click context menu. Maybe we'll leave
that for another PR, because I think I'd have to rewrite core components
of TGUI for that?
## Why It's Good For The Game

Lets you perform almost all of the alternative and right click functions
on things you have alt-clicked the tiles for. I believe this outweighs
the benefits of pointing at stuff on a tile instead.
## Changelog

The alt-click item panel now lets you perform most of the alternative
click options.
🆑 Bisar
qol: Most of the alternate click modes (right click, control clicking,
shift clicking, etc) have been enabled in the alt-click item menu.
fix: You will no longer point at things you right-click in the alt-click
item menu.
/🆑
2024-05-11 23:21:54 -07:00
Higgin
6621e94085 [no gbp] fixes spy bug, thank you melbert (#83153)
## About The Pull Request

~~removes protect objectives from spies,~~ actually just finds
objectives* fixing the 'nothing' or 'free objective' bug previously
present.

## Why It's Good For The Game

~~fix good until I can actually fix whatever's making protect objectives
not work. they aren't used anywhere else right now and work when
manually added after roundstart or with other active mobs around - I
suspect spies being a roundstart is the cause of this.~~
2024-05-10 23:00:15 -05:00
Xander3359
b75eab1dde fix glass style /hooch being duped (#83169)
## About The Pull Request
/datum/glass_style/drinking_glass/hooch was being added 2 times, so I
just replaced the one with "aleglass" sprite to be /ale
2024-05-10 22:06:55 -05:00
norsvenska
1fc79309b3 Coroner, Chief Engineer, Bitrunner are no longer exempt from certain Traitor objectives (#83165)
## About The Pull Request
While reading traitor objective code for a project, I noticed that both
the Coroner and CE are not listed as potential targets for the 'Destroy
Heirloom' objectives. Looking into it, I noticed that the Coroner was
also not listed for the kidnapping objective. This fixes that.
## Why It's Good For The Game
Coroner should not be immune to traitory
And the CE should not be exempt from having their heirloom potentially
destroyed
## Changelog
🆑
fix: The Coroner and Bitrunner can now be selected as a target for
kidnapping and heirloom destruction objectives.
fix: The Chief Engineer is now a valid target for heirloom destruction
objectives.
/🆑
2024-05-10 23:12:31 +00:00
Ben10Omintrix
17a113297a fixes fish huds hard delete (#83160)
## About The Pull Request
fish huds were consistently hard deleting because their reference wasnt
being removed from the fisher's screen

## Why It's Good For The Game
fixes fish huds hard deleting

## Changelog
2024-05-10 20:17:43 +02:00
carlarctg
b7d4c7f967 Chance to become crab on DNA meltdown (#82985)
## About The Pull Request

Sometimes when you get a nonlethal instability consequence you will now
become crab

## Why It's Good For The Game

You should be abel to reach teh peak of evolution when messing with your
genetics

## Changelog

🆑
add: Chance to become crab on nonlethal DNA meltdown
/🆑
2024-05-10 01:32:33 +01:00
TiviPlus
2efd770f4f Fix tutorials not reappearing in some cases (#83066)
## About The Pull Request
client deletion isn't the only way to leave a mob
## Changelog
🆑
fix: fixed clients being seen as stuck doing tutorials in some cases
when changing mobs
/🆑

Co-authored-by: TiviPlus <572233640+TiviPlus@users.noreply.com>
2024-05-08 19:41:39 -06:00
Jacquerel
f358423a1e Replace Heretic Phobia with Cursed Organs (#83082)
## About The Pull Request

Being sacrificed by a Heretic no longer applies an incurable brain
trauma that gives you a phobia of Heretic-associated items.
Instead it does the following things:

- Removes 2-4 of your organs and leaves them behind on the sacrificial
circle, replacing them with "corrupt" organs with negative effects.
- Gives you an unremovable "curse" debuff which will cause you to
immediately cough a random organ out of your chest if you attack or are
attack by the person who sacrificed you, **if they are wearing a Focus
at the time.**

Corrupt Organs can be removed via surgery, although doing so is
dangerous.
A removed corrupt organ will often either immediately explode for a
small (but not insignificant) amount of burn damage to everyone nearby,
or it will animate itself as a haunted object and be a general nuisance
until subdued.
A patient dosed with Holy Water can always have their organs removed
without consequence.
Chugging Holy Water will also suppress most of the negative effects of
your corrupt organs.

The effects of Corrupt Organs are as follows:
- **Eyes:** All Heretics **and also a selection of additional random
people** are completely invisible to you. You can still see their
runtext (or "hear") them, but they otherwise cannot be seen. And as you
can't see them you also cannot click on them.
- **Tongue:** When you speak, your language will sometimes be replaced
by "Shadowspeak", understood only by Curators and Nightmares. This is
less of an impediment during Halloween because of the friendly
Shadowpeople.
- **Liver:** When you drink something, it will add extra reagents to
your sip from a pool largely composed of alcohol and hallucinogens.
- **Stomach:** Your hunger will deplete significantly faster if you do
not regularly ingest blood. (Fun fact: Did you know that a drinking
glass full of blood automatically relabels itself "tomato juice"?)
- **Heart:** You will continue to be intermittently tormented by
frightening hands.
- **Lungs:** You will intermittently cough out dangerous or unpleasant
gases.
- **Appendix:** Very infrequently you will vomit out several hostile
worms.

Most of these effects aren't present while you're dodging the spooky
hands in the Mansus realm.
Plasmamen never have their lungs replaced because they'd immediately
start choking on their internals and that is annoying. Ethereals _do_
have their hearts replaced so may be surprised to find that they don't
respawn when killed if they don't get a new one.
I would haved called them Cursed Organs but the Cursed Heart already
exists.

## Why It's Good For The Game

Nobody enjoys the Heretic phobia from any angle.
Phobias suck to deal with in general. and while being scared of all
Heretic stuff from that point on is mildly flavourful it's not very
interesting.
This alternative hopefully provides a more interesting answer (which
should provide more storytelling and interaction with other people) to
the problems that the original change intended to address:
Making sure that nonlethal sacrifices still feel significantly bad
enough that you're not going to volunteer, and as an extra layer of
protection to ensure that someone you sacrificed functionally ceases to
be a threat to you.

## Changelog
🆑
del: Being sacrified by a Heretic no longer gives you an incurable
phobia.
add: Being sacrificed by a Heretic will drop 2-4 of your organs on the
ground and replace them with "corrupt organs" with negative effects
which can be suppressed with Holy Water.
add: Players who have been sacrificed by Heretics will experience
additional and rapidly lethal consequences for attempting to fight
someone who previously sacrificed them, as long as that person is
wearing a focus.
/🆑
2024-05-08 19:40:16 -06:00
Kyle Spier-Swenson
2bf57113df Command bar typing indicators (client side html version) (#83081)
This uses a browser skin element to spy on the command bar and report
back to the server what verb is currently in it and how many characters
it has. it skips reporting if the text hasn't changed since the last
report.

im intentionally not providing the full text in the command bar to the
server, while designing the system so new verbs can be given typing
indicators by editing DM code, not html code.

The report rate is once a second but this could be lowered or tweaked.

Both the tgui say window being open and this system being active because
the command bar starts with `say "` is undefined behavior, mostly the
first one to end the indicator will just freeze indicators for the other
one until it too ends its current indicator session.

The system waits until something besides the `"` is in the argument to
say.

It is enabled for verbs `say`, `me`, and `whisper`.

I don't actually know if this is the case for tgui say. this is a one
line tweak anyways so let me know if this should be changed.

[(This pr closes a
bounty)](https://tgstation13.org/phpBB/viewtopic.php?p=726634#p726634)

🆑 MrStonedOne & Lilah Novi
add: Say commands typed in the command bar now trigger typing indicators
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2024-05-08 19:35:30 -06:00
Pickle-Coding
df05285390 The labour camp shuttle paroles the user when they complete their points. The station return message specifies which prisoner returned. (#83132)
## About The Pull Request
The labour camp shuttle paroles the user when they complete their
points. The station return message specifies which prisoner returned.
## Why It's Good For The Game
People shouldn't be looking like fugitives after completing their work.
## Changelog
🆑
qol: The labor camp shuttle properly sets people to parole after they
complete their work.
qol: The labor camp shuttle specifies which person returned to the
station.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2024-05-08 19:27:19 -06:00
Jacquerel
98b73d50e3 Laser decharge sound uses pitch instead of frequency (#83102)
## About The Pull Request

Now that we require Byond 515 we can make use of the sound pitch var
instead of frequency.
The advantage of this is that we can make a sound lower or higher
pitched without also changing its duration.

Before:


https://github.com/tgstation/tgstation/assets/7483112/ff61c130-788b-432e-93e8-56c6b6df42d4

After:


https://github.com/tgstation/tgstation/assets/7483112/c1c3d1d5-97fd-468e-9724-61fb6f9f3026


In some extreme cases with frequency, the sound would become incredibly
long. This no longer occurs.

## Why It's Good For The Game

I think it sounds better.

## Changelog

🆑
sound: Lasers adjust their pitch as they run out of charge, rather than
frequency
/🆑
2024-05-08 19:25:54 -06:00
Jeremiah
ba6019dfe2 Screentips for sm shard (#83119)
## About The Pull Request
Adds screen tips for anchoring sm shard
## Why It's Good For The Game
I worry each time I go to click this thing
## Changelog
🆑
fix: Supermatter shards now have screentips with a wrench in hand
/🆑
2024-05-08 19:24:58 -06:00
Bloop
d0062f1b89 Fixes flap and wing emotes not updating wing sprites (for functional wings) (#83137)
## About The Pull Request

Pretty straightforward, the wing sprites were not updating on the mob
after calling `open_wings()`/`close_wings()`. Additionally I reduced the
time between opening/closing for the flap emote to 0.35 seconds. It
matches up more with the sound effect that way, and in my opinion look a
bit more like a proper flap should. 2 seconds was really long.

And finally functional moth wings will make the moth flap sound too! As
they should.


---

More codey stuff:

I slightly refactored the way sounds play to be more object oriented
adding a new proc for it:
`/obj/item/organ/external/wings/make_flap_sound()`. This will make it
easier for people to add different sound effects for other types of
wings beyond just moth ones, should they so desire.

## Why It's Good For The Game

Moths can rejoice in more ways to express yourselves!

<details><summary>Flap emote</summary>


![dreamseeker_KhEzxJaA4A](https://github.com/tgstation/tgstation/assets/13398309/d5b2ad6d-be62-4629-9c7f-4bb0523d8da3)

</details>

<details><summary>Wing emote</summary>


![dreamseeker_kuV1sMxHOB](https://github.com/tgstation/tgstation/assets/13398309/78f339d5-b28f-4cb6-885c-e16e649a89e3)

</details>

## Changelog

🆑
fix: moths with functional/flight potion wings get an animation when
they *flap once again, and it makes a sound
/🆑
2024-05-08 19:24:39 -06:00
Afevis
0d29902736 Fixes some missing poll_ghost_candidates sanity checking for ghost role based events (#83107)
poll_ghost_candidates can return null if nobody signs up, these weren't
properly checking for that case.

Also moved the Santa ghost role over to the proper subtype (not sure if
it was outright broken, but it'll now properly update the Santa's role
and trigger automatically.)

```
[14:41:54] Runtime in code/modules/events/ghost_role/sentience.dm, line 77: Cannot read null.vars
proc name: spawn role (/datum/round_event/ghost_role/sentience/spawn_role)
src: /datum/round_event/ghost_role/... (/datum/round_event/ghost_role/sentience)
call stack:
/datum/round_event/ghost_role/... (/datum/round_event/ghost_role/sentience): spawn role()
/datum/round_event/ghost_role/... (/datum/round_event/ghost_role/sentience): try spawning()
/datum/round_event/ghost_role/... (/datum/round_event/ghost_role/sentience): start()
/datum/round_event/ghost_role/... (/datum/round_event/ghost_role/sentience): process(2)
Events (/datum/controller/subsystem/events): fire(0)
Events (/datum/controller/subsystem/events): ignite(0)
Master (/datum/controller/master): RunQueue()
Master (/datum/controller/master): Loop(2)
Master (/datum/controller/master): StartProcessing(0)
```

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2024-05-08 19:24:04 -06:00
Afevis
3c51accda6 Fixes masspurbation erroring out when trying to give/remove cat tails from incompatible subspecies of humans (#83108)
```
[2024-05-06 22:43:46.320] RUNTIME: runtime error: adding a /obj/item/organ/external/tail/monkey to a /mob/living/carbon/human/species/monkey when it shouldn't be!
 - proc name:  stack trace (/proc/_stack_trace)
 -   source file: code/__HELPERS/stack_trace.dm,4
 -   usr: the monkey (828) (as Gratian H... (/mob/living/carbon/human)
 -   src: null
 -   usr.loc: the floor (120,86,2) (/turf/open/floor/iron)
 -   call stack:
 -  stack trace("adding a /obj/item/organ/exter...", "code/modules/surgery/organs/ex...", 69)
 - the monkey tail (/obj/item/organ/external/tail/monkey): mob insert(the monkey (412) (/mob/living/carbon/human/species/monkey), 1, 1)
 - the monkey tail (/obj/item/organ/external/tail/monkey): Insert(the monkey (412) (/mob/living/carbon/human/species/monkey), 1, 1)
 - the monkey tail (/obj/item/organ/external/tail/monkey): Insert(the monkey (412) (/mob/living/carbon/human/species/monkey), 1, 1)
 - the monkey tail (/obj/item/organ/external/tail/monkey): Insert(the monkey (412) (/mob/living/carbon/human/species/monkey), 1, 1)
 - purrbation remove(the monkey (412) (/mob/living/carbon/human/species/monkey), 0)
 - mass remove purrbation()
 - /datum/secrets_menu (/datum/secrets_menu): ui act("massremovepurrbation", /list (/list), /datum/tgui (/datum/tgui), /datum/ui_state/admin_state (/datum/ui_state/admin_state))
 - /datum/tgui (/datum/tgui): on act message("massremovepurrbation", /list (/list), /datum/ui_state/admin_state (/datum/ui_state/admin_state))
 - /datum/callback/verb_callback (/datum/callback/verb_callback): InvokeAsync()
 - 
[2024-05-06 22:44:02.813] RUNTIME: runtime error: adding a /obj/item/organ/external/tail/monkey to a /mob/living/carbon/human when it shouldn't be!
 - proc name:  stack trace (/proc/_stack_trace)
 -   source file: code/__HELPERS/stack_trace.dm,4
 -   usr: the monkey (828) (as Gratian H... (/mob/living/carbon/human)
 -   src: null
 -   usr.loc: the floor (120,86,2) (/turf/open/floor/iron)
 -   call stack:
 -  stack trace("adding a /obj/item/organ/exter...", "code/modules/surgery/organs/ex...", 69)
 - the monkey tail (/obj/item/organ/external/tail/monkey): mob insert(the monkey (665) (/mob/living/carbon/human), 1, 1)
 - the monkey tail (/obj/item/organ/external/tail/monkey): Insert(the monkey (665) (/mob/living/carbon/human), 1, 1)
 - the monkey tail (/obj/item/organ/external/tail/monkey): Insert(the monkey (665) (/mob/living/carbon/human), 1, 1)
 - the monkey tail (/obj/item/organ/external/tail/monkey): Insert(the monkey (665) (/mob/living/carbon/human), 1, 1)
 - purrbation remove(the monkey (665) (/mob/living/carbon/human), 0)
 - mass remove purrbation()
 - /datum/secrets_menu (/datum/secrets_menu): ui act("massremovepurrbation", /list (/list), /datum/tgui (/datum/tgui), /datum/ui_state/admin_state (/datum/ui_state/admin_state))
 - /datum/tgui (/datum/tgui): on act message("massremovepurrbation", /list (/list), /datum/ui_state/admin_state (/datum/ui_state/admin_state))
 - /datum/callback/verb_callback (/datum/callback/verb_callback): InvokeAsync()
 - 
```
2024-05-08 19:23:25 -06:00
Afevis
0308430832 Fixes logging runtime when admins trigger summon events (#83109)
Admin secrets panel passes a client to this proc, which only had
handling for being passed a mob.

```
[17:23:21] Runtime in code/modules/spells/spell_types/right_and_wrong.dm, line 250: undefined proc or verb /client/log message(). 
proc name: summon events (/proc/summon_events)
usr: ShizCalev/(Gratian Hunter)
usr.loc: (Engineering SMES (115,96,2))
src: null
call stack:
summon events(ShizCalev (/client))
/datum/secrets_menu (/datum/secrets_menu): ui act("events", /list (/list), /datum/tgui (/datum/tgui), /datum/ui_state/admin_state (/datum/ui_state/admin_state))
/datum/tgui (/datum/tgui): on act message("events", /list (/list), /datum/ui_state/admin_state (/datum/ui_state/admin_state))
/datum/callback/verb_callback (/datum/callback/verb_callback): InvokeAsync()
```
2024-05-08 19:16:29 -06:00
_0Steven
5cb62c143e Fixes the stomach pump surgery not actually causing vomit nor decreasing reagent contents (#83110)
## About The Pull Request

So while playing I had to get a bunch of unstable mutagen out of a
corpse's stomach before reviving it, and thus I tried to stomach pump
it.
This, however, never decreased the amount in the stomach, nor did it
actually create any vomit like it's supposed to.

Looking into it, the issue seems to be with this line:

0c562fd742/code/modules/surgery/stomachpump.dm (L49)
Which doesn't line up with the parameters `vomit(...)` takes:

0c562fd742/code/modules/mob/living/carbon/carbon.dm (L417)
`vomit_type = FALSE` isn't very helpful.

This mismatch seems to be due to the `vomit(...)` proc getting changed
quite a while ago, but in the process forgetting to update stomach pump
to use it.
Based on what I found looking into this, I replaced it with the
following:
```dm
target_human.vomit((MOB_VOMIT_MESSAGE | MOB_VOMIT_STUN), lost_nutrition = 20, purge_ratio = 0.67)
```
Where we don't use `VOMIT_CATEGORY_DEFAULT` as that includes
`MOB_VOMIT_HARM`, and we already have our own harm condition.

This fixes our issue.

Oh, we also fix a minor spelling issue, "brusing" to "bruising".
## Why It's Good For The Game

Makes stomach pumping actually work.
## Changelog
🆑
fix: The stomach pump surgery actually works again.
spellcheck: "brusing" to "bruising" in the message you get when failing
the stomach pump surgery.
/🆑
2024-05-09 02:44:22 +02:00
Afevis
d62a1d95ea Fixes Cursed Items wizard event (#83111)
Slot flags got changed from set 1 through 20 numbers to bitflags, this
was runtiming since it was still trying to use the old hard-set slot
numbers.

```
[2024-05-07 00:50:31.612] RUNTIME: runtime error: list index out of bounds
 - proc name: start (/datum/round_event/wizard/cursed_items/start)
 -   source file: code/modules/events/wizard/curseditems.dm,44
 -   usr: null
 -   src: /datum/round_event/wizard/curs... (/datum/round_event/wizard/cursed_items)
 -   call stack:
 - /datum/round_event/wizard/curs... (/datum/round_event/wizard/cursed_items): start()
 - /datum/round_event/wizard/curs... (/datum/round_event/wizard/cursed_items): process(2)
 - Events (/datum/controller/subsystem/events): fire(0)
 - Events (/datum/controller/subsystem/events): ignite(0)
 - Master (/datum/controller/master): RunQueue()
 - Master (/datum/controller/master): Loop(2)
 - Master (/datum/controller/master): StartProcessing(0)
 - 
```

🆑 ShizCalev
fix: Cursed Items wizard event actually works again.
/🆑
2024-05-09 02:41:31 +02:00
Echriser
136c80597a Fix conveyor switches not working for cyborgs (#83121)
## About The Pull Request
Makes conveyor switches work for cyborgs again

## Why It's Good For The Game
The left/right click update broke it. Fixes #83078 

## Changelog
🆑
fix: conveyor switches work for cyborgs again
/🆑
2024-05-09 02:40:54 +02:00
Jeremiah
177a2edfe5 Quick equip no longer throws balloon alerts (#83117)
## About The Pull Request
Pressing E to quick equip would throw balloon alerts when it iterates
over storage that's full
Especially noticeable on round start engies because their toolbelt gets
checked
## Why It's Good For The Game
Less noise
## Changelog
🆑
fix: The quick equip 'E' hotkey shouldn't warn if one of your bags is
full anymore
/🆑
2024-05-09 00:12:20 +02:00
necromanceranne
6fd6ebd850 Pipegun updates and glowup (#83063)
## About The Pull Request

Updates pipeguns with a brand new set of sprites. Also comes with pipe
pistols; plinkier versions of the pipegun.

![ye
pipeguns](https://github.com/tgstation/tgstation/assets/40847847/dd8ea3db-aa5a-403e-9eca-c3aa2c38b694)


![image](https://github.com/tgstation/tgstation/assets/40847847/9015f1fe-8ed2-4724-844d-7d550d35b890)


![image](https://github.com/tgstation/tgstation/assets/40847847/0d99551a-ecc4-4f2b-a397-46c5f26437f7)

Alters pipeguns away from utilizing shotgun/rifle ammunition towards a
bespoke junk round ammo. These shells are crafted similarly to current
improvised shells. This also removes improvised shells as a shotgun ammo
type. (these new shells aren't shotgun shells to begin with, they're
more like rifle bullets)

Crafting junk rounds produces an entirely unknown projectile in the
shell. You won't know what you get until you fire the gun. Almost in
every instance, however, the shot is beneficial towards killing things.
And they all do about the same amount of damage, so there is hopefully
never a round you didn't want to fire in the gun. Fighting someone with
a pipegun is usually predictable for what amount of damage it will do,
but any additional effects it might have is going to be an unknown
factor. They also brutalize borgs, which is a quality that improvised
shells had previously.

Pipeguns operate as they did before, and do roughly 40 damage per shot
with the majority of their ammo types (less than what they do currently
with .310). They only have one shell in the gun at a time, so every time
they're fired, they must be reloaded.

Pipe pistols do roughly 15 damage per shot, but hold more ammo than the
bigger pipegun. However, they're more likely to veer off-course.

There are regal versions of each of these weapons, and each are more
potent respective of their general rarity. Having one is going to be a
lot more noteworthy.

### Minor changes

Some more clothing items can carry pipeguns in their suit storage.

The icemoon hermit spawns with a heroic laser musket rather than a regal
pipegun (partially because it is too difficult for the hermit to get
more ammo for their gun, and also because the regal pipegun is a more
powerful weapon than previously)

## Why It's Good For The Game

It has been a few years since I added the pipegun, and time was never
particularly kind to it. There are alternative weapons now with
interesting mechanics of their own. The ammunition it used has changed
considerably. And it simply didn't ever feel like a 'junk gun' in a way
that was fun. The original mechanics added to give it that feeling were
just not fun to experience and were removed. So the pipegun has been
left as 'a shitty version of X'. Even the regal pipegun was, at the end
of the day, a shittier version of either a shotgun or cargo rifle.

It didn't feel right not having some kind of unique quality to using
these weapons that help them express themselves as unpredictable trash
weapons built inside of maintenance. But I expressly didn't want to make
it 'unpredictable' in a way that felt unfair on the person getting shot
either. So just giving it more damage was right out. As a compromise, I
reduced the overall lethality of the weapons while introducing a gimmick
that will appeal to those wanting to play out the role of a homeless
lunatic with a shitty homemade gun stalking maintenance. A 'chaos gun'
so to speak. Maybe that will appeal to people.

## Changelog
🆑
balance: Reworks pipeguns to use an unpredictable 'junk round'. You
won't know what you're shooting until you fire it.
add: Introduces a pistol version of the pipegun; the pipe pistol. It is
inaccurate and does significantly less damage, but more portable and has
more ammunition in the gun.
image: Updates the visuals of the pipeguns.
balance: Also improves the Regal varieties of these weapons. By a lot.
balance: More articles of clothing can be used to carry pipeguns in suit
storage.
balance: The Icemoon Hermit comes with a Heroic Laser Musket instead of
a Regal Pipegun.
remove: Improvised shells (the shotgun shell) has been replaced with
improvised junk shells (which don't work with shotguns but do work with
pipeguns).
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2024-05-08 22:40:28 +01:00
XElectricX
28eca1db0c Add bump mining to mech drills (#83079)
## About The Pull Request

All mineral turfs can be auto-mined by just walking into them if
piloting a mech. This PR mostly just reorganizes the action() to
accommodate it and add a new proc for listening to a signal.

## Why It's Good For The Game

Less work on your mouse finger.

## Changelog
🆑
qol: Mech drills can auto-mine by walking into rock.
/🆑
2024-05-08 22:38:45 +01:00
Ghom
5631fb144e Unit test for black market items. Added missing bulwark module and jawed hook to the market. (#82972)
## About The Pull Request
Jacq has come up with the suggestion of adding a unit test to the
blackmarket. I agreed ~~and I think I deserve the NO GBP label because
both of these missing items are actually my fault~~.

## Why It's Good For The Game
Let's avoid issues like this in the future.

## Changelog

🆑
fix: Added the missing bulwark MOD module and the jawed fishing hook to
the black market.
/🆑
2024-05-08 22:22:29 +01:00
_0Steven
aa5eddb99b Fix pride pin reskinning (#82920)
## About The Pull Request

**Edit: Since writing, this pr has been updated to address failing CI
based on code-general suggestions, invalidating the previous
descriptions. The previous descriptions has been included as spoilers
for posterity**

Right, so, this has gone from just a simple pride pin fix to realizing
CI fails with it to doing a more complex lasting fix based on
suggestions.

Recap time. Objects get reskinning set up if they have `unique_reskin`
set when `Initialize(...)` runs.

9145ecb7e1/code/game/objects/items.dm (L267-L269)
Because pride pins use a global list, we set it in `Initialize(...)`...
After we call the parent.

9145ecb7e1/code/modules/clothing/under/accessories/badges.dm (L196-L198)
Obviously this fails.

However, moving this *before* `Initialize(...)`, while fixing the issue,
causes CI to fail due to calling `register_context()` twice.
Why? Well, it's simple. We automatically call `register_context()` if we
have `unique_reskin` set, as seen above, but we *also* call it on
accessory `Initialize(...)` due to it having its own context.

0c562fd742/code/modules/clothing/under/accessories/_accessories.dm (L29-L31)
This causes it to try register the same thing twice, which doesn't
_break_ things, but it sure as hell isn't clean.

So talking about this with San in code general, we decided to try go
with the following:
We add two new procs, `setup_reskinning()` and
`check_setup_reskinning()`, and handle all this fuckery within those.
This lets subtypes override them with their own new checks or
differences in setup.
Then we override `setup_reskinning()` for `/obj/item/clothing/under` and
`/obj/item/clothing/accessory` to not register context again, and do the
same for `/obj/item/clothing/accessory/pride` but while also setting
`unique_reskin`.

This fixes it.

<details>
  <summary>Previous implementation for posterity</summary>
  
Back from my short code break, time to fix some of the things I've been
annoyed by.

Firstly, I noticed pride pins could no longer be reskinned since the
alt-click refactor.
Looking into it, this seems to be because we now only register this on
`Initialize(...)` if `unique_reskin` has been set:

9145ecb7e1/code/game/objects/items.dm (L267-L269)
While due to using a global list we don't set this in the item
definition, but in `Initialize(...)` :

9145ecb7e1/code/modules/clothing/under/accessories/badges.dm (L196-L198)
Where we call the parent proc _before_ setting `unique_reskin`, and thus
not registering our ability to reskin.

So all we do is set this to our global list _before_ we call the parent
proc.
```dm
/obj/item/clothing/accessory/pride/Initialize(mapload)
	unique_reskin = GLOB.pride_pin_reskins // Set before parent proc checks for it.
	. = ..()
```
This fixes it.
  
</details>


## Why It's Good For The Game

Fixes pride pin reskinning.
Theoretically makes it easier to avoid this happening in the future, and
allows `setup_reskinning()` to be manually called in the case of values
being edited post-initialize.

<details>
  <summary>Previous pitch for posterity</summary>
  
Fixes pride pin reskinning.
  
</details>

## Changelog
🆑
fix: Pride pins can be reskinned again with alt-click.
/🆑
2024-05-08 22:18:54 +01:00
Joshua Kidder
0fe447e56e Resting knockdown disarm immunity exploit fix (#83055)
## About The Pull Request

This fix makes it so the effect of you falling is always applied if you
receive the knockdown effect. Currently, you can make yourself immune to
being disarmed by shoves or any other effect that applies knockdown by
laying down. We've all seen the tactically crawling desword user using
this to avoid being disarmed. This fixes that.

No GBP because I got GBP for a separate PR that I tagged wrong
## Why It's Good For The Game

Lying down in the middle of a hand-to-hand fight flies in the face of
common sense. I'm working on another PR to rebalance being prone in
melee combat, but this itself is a simple fix of what seems to be a
long-standing exploit.
## Changelog

Receiving the effects of a knockdown will now always disarm you, instead
of only when you're not laying down.
🆑 Bisar
balance: Knockdown effects will know consistently disarm, instead of
failing to disarm if you're already lying down.
/🆑
2024-05-08 13:49:16 +01:00
Fikou
39963ae3b2 blueprints status on photographs is no longer persistent (#83093)
Bro it's a different station with different wires!
2024-05-07 22:49:49 +00:00
Iamgoofball
6700593da2 Spies can now use other spies' uplinks. (#82995)
## About The Pull Request

Spies can now use other spies' uplinks.

## Why It's Good For The Game

Every other antagonist in the game has a recovery method for their main
gimmick or has their main gimmick baked into their mind and thus cannot
be taken from them. This sucks ass for spies because they have zero
recovery so they're left with the broken ass freeform objectives that
don't green or redtext that maintainers and admins told me were bad for
Families but are suddenly okay here I guess.

Spies being able to jack and use other spies' PDAs means you can now
recover your primary gimmick by tracking down other spies, which
improves spy gameplay and also discourages sharing loot.
2024-05-07 15:50:22 -05:00
delingar
494f306fcc RD get robo knowledges (#82642)
## About The Pull Request

Setting RD suplex skillchip as common chip. Adding Roboticist's
skillchip into RD. Skillchip's categories are global defines now

## Why It's Good For The Game

RD is literally the most skilled scientist and roboticist. CEO of all
Silicons. Why he doesn't have robo wires trait?
2024-05-07 13:27:48 -05:00
Jeremiah
17c799fdeb Lootpanel: Requires 515.1635+ (#83084)
## About The Pull Request
Per request of MSO, drops the fallback icon generation for clients under
515.1635. Lootpanel warns about this anyways and you had ample time.


![image](https://github.com/tgstation/tgstation/assets/42397676/b7064b28-13b9-4cd1-ad99-33f3e665209b)

Saves some time from SSlooting.
## Why It's Good For The Game
Pushes players to use a better client
Saves some server cost from older clients
## Changelog
🆑
fix: Lootpanel now requires 515.1635 to generate most icons. TG support
for 514 ended May 1. Update your client to fix the icons.
/🆑
2024-05-07 05:05:33 -04:00
Rhials
6aa0dee37f Virtual Domains now have certain areas protected from ghost role interference (#82960)
## About The Pull Request

This touches up on the bitrunning ghost roles that come with some maps,
namely Corsair Cove and Syndicate Assault.

The gist of it is: Ghost role spawners and Digital Anomalies (the random
event boss mobs) are now restricted from entering the VDOM safehouse,
and other areas where critical equipment is stored.

Here's an example from Syndicate Assault -- The X-ed out area is
considered "out of bounds" for digital anomalies/ghost roles:

![image](https://github.com/tgstation/tgstation/assets/28870487/b0752dd4-102b-4b64-8c21-c100a58c1a96)

Additionally, this also fixes the matter of pirate ghost role spawns
creating their own antag datum/pirate team, which would carry into the
roundend report. Since these are no longer legitimate pirate spawners
and are now specifically designed spawners for virtual domains.

Naturally, emagging the server jailbreaks all of these restrictions and
notifies any virtual entities.

The new subtype of spawners should also be scalable enough that new
VDOMs should be able to implement new ghost role spawners with ease.
## Why It's Good For The Game

It's one thing to have sentient mobs to fight, which can shake up the
otherwise somewhat static nature of bitrunning maps, but when players
are tossing equipment, spawncamping, or otherwise making it impossible
for the runners to fight them it ends up being unfun for everyone
involved. You can't get into a good fight with a bitrunner avatar if
their only recourse is to wipe the map and everything (YOU) in it.

This ensures a level of fairness between the (typically vindictive)
ghost roles of a VDOM and the players.

Also, pirate spawns don't make a new pirate team/datum. That's one of
the fixes I was aiming for with this.
## Changelog
🆑 Rhials
balance: Virtual domain ghost roles can no longer enter the
safehouse/"equipment" areas of a domain.
fix: Pirate virtual domain ghost roles will no longer make a pirate team
antag datum.
/🆑

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
2024-05-06 22:35:05 -07:00
BurgerLUA
6a3ad66575 Detective hat improvements regex, for real this time. (#83033)
Fun fact: This PR has been made a total of three (3) times because I
keep forgetting about it.

## About The Pull Request

The inspector's Fedora now uses regex. When saying commands, it is much
more generous on picking up trigger words, as it is now case insensitive
and ignores punctuation at the middle end as well as extra words.

For example, if the prefix is "go go gadget" and the prefix is "batong",
it will trigger with these phrases:
- Go go gadget... batong (Ignores punctuation after the prefix)
- Go go gadget batong! (Ignores punctuation at the end)
- Go go gadget batong bitch! (Ignores extra words at the end)
- Go go GADGET, BATONG (Ignores case)

Multiple items can also be deployed at once, if it is possible to put an
item in your hand. For example, you can assign two items to the same
word, and the first item will be put in your active hand and the second
would be put in your off hand.

## Why It's Good For The Game

Regex good. Removes infuriating situations where the entire phrase is
ignored because you didn't say it exactly, such as adding extra
punctuation or typing in all caps.

I tested this pretty extensively(tm) so it does work, and I tested some
dumb possible exploits as well and couldn't do them. Works with latest
version of /tg/.

## Changelog

🆑 BurgerBB
qol: The inspector's Fedora now uses regex. When saying commands, it is
much more generous on picking up trigger word.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2024-05-07 05:32:18 +02:00
Afevis
f0d2ef6f5c Fixes runtime when an APC has a functional external power supply but no power cell inserted (#83091)
![image](https://github.com/tgstation/tgstation/assets/6209658/059c5647-55c2-4509-8cce-7bcb565f6070)


![image](https://github.com/tgstation/tgstation/assets/6209658/5f7c0335-fda1-4db7-b24e-99c9fbb5169c)

```
[2024-05-03 02:26:28.713] RUNTIME: runtime error: Cannot execute null.use().
 - proc name: draw energy (/obj/machinery/power/apc/proc/draw_energy)
 -   source file: code/modules/power/apc/apc_main.dm,709
 -   usr: null
 -   src: the Brig Entrance APC (/obj/machinery/power/apc/auto_name/directional/north)
 -   src.loc: the floor (66,117,2) (/turf/open/floor/iron)
 -   call stack:
 - the Brig Entrance APC (/obj/machinery/power/apc/auto_name/directional/north): draw energy(2565)
 - the Brig Entrance APC (/obj/machinery/power/apc/auto_name/directional/north): early process(2)
 - Machines (/datum/controller/subsystem/machines): fire(0)
 - Machines (/datum/controller/subsystem/machines): ignite(0)
 - Master (/datum/controller/master): RunQueue()
 - Master (/datum/controller/master): Loop(2)
 - Master (/datum/controller/master): StartProcessing(0)
 - 
```

```
[2024-05-03 02:08:31.047] RUNTIME: runtime error: Cannot execute null.use().
 - proc name: use energy (/obj/machinery/proc/use_energy)
 -   source file: code/modules/power/power.dm,180
 -   usr: null
 -   src: the disposal unit (/obj/machinery/disposal/bin/tagger)
 -   src.loc: the floor (51,156,2) (/turf/open/floor/iron)
 -   call stack:
 - the disposal unit (/obj/machinery/disposal/bin/tagger): use energy(100, 1, 0, 1)
 - the disposal unit (/obj/machinery/disposal/bin/tagger): process(2)
 - Machines (/datum/controller/subsystem/machines): fire(1)
 - Machines (/datum/controller/subsystem/machines): ignite(1)
 - Master (/datum/controller/master): RunQueue()
 - Master (/datum/controller/master): Loop(2)
 - Master (/datum/controller/master): StartProcessing(0)
 - 
```

Don't think this one has an issue report, but it's all over in the
runtime log.

Fixes #83106
2024-05-07 05:24:40 +02:00
The Sharkening
0746039df6 Makes the medibeam process only on active use (#83062)
## About The Pull Request

Per title

## Why It's Good For The Game

We can have things process only when they need to process

## Changelog
2024-05-07 05:18:46 +02:00
Afevis
875a662c23 You can no longer shove abstract items into light sockets (#83089)
Fixes #82914
2024-05-07 05:08:18 +02:00