* Fixes some stupid airlock sleeps
* Fixes the conflicts before checking the merge conflicts
* Converts another wires = to set_wires() and removes another issue
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
* Fix runtime from bilingual curators (#76199)
## About The Pull Request
`pick` from an empty list, because curators already know all the
languages the quirk can give you
## Why It's Good For The Game
Runtime fix
## Changelog
🆑 Melbert
fix: Fix a runtime involving Bilingual Curators
qol: Bilinguals get a message on spawn reporting which language they've
learned, or a message reporting they have learned no language if they're
already fluent in all possible ones.
/🆑
* Fix runtime from bilingual curators
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
* Moves species brutemod and burnmod to be handled by bodyparts
* Fixes compilation issues and updates the brute and burn mods on our own species
* Re-ticks the ashwalker bodyparts
---------
Co-authored-by: ChungusGamer666 <82850673+ChungusGamer666@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
* Expanding the Experimental MODsuit Bepis Node with three new modules. (#75801)
## About The Pull Request
So, I've had this idea to make a contribution to the Bepis feature with
some modsuit stuff. The gimmicky stuff is ok and a good way to even out
the better content since it has game of chance design it has (you can
find those disks in space anyway so...). However, the Experimental
MODsuit node feels very underwhelming right now, compared to how big
that feature is.
This PR adds three MOD modules to the Experimental MODsuit node, plus
two more:
- Magneto Charger: While the Modsuit is activated, each step the user
takes will charge the installed power cell by a tiny bit, enough to
sustain a standard modsuit of generic slow speed with only a few, easy
modules installed. It won't work in zero G, while flying, pulled by
someone else, on a conveyor belt, riding a vehicle or crawling on the
floor, though.
- Recycler: It collects (most) garbage and casings off the ground and
recycles them into material sheets that can be dispensed on an adjacent
location or storage with with Middle Mouse Button. Doesn't clean debris,
and scuffed because most trash doesn't yield material anyway.
- - It also has two subtypes, unbound from the node: one that dispenses
riot foam darts and can be found on the black market, and another that
dispenses the more innocuous foam darts, rarely found in maints.
- Shooting Assistant: A configurable module. On Stormtrooper mode, it
will give the user a faster fire rate (the double tap trait) at the cost
of accuracy. On Sharpshooter mode, it will improve the user accuracy and
make their shots ricochet against walls at least once (if the hit atom
allows that, that is, e.g. lasers don't ricochet against iron walls), at
the cost of movement speed. Both modes also prevent the user from dual
wielding guns.
To make the Stormtrooper mode stackable with the poor aim quirk and
refrain from making a new trait for the sharpshooter mode, the gun
spread code in gun.dm has also received a little refactor and cleanup.
Also, it's been tested.
## Why It's Good For The Game
The Experimental MODsuit node is quite shabby and could use something
extra to make it more appealing to MODsuit enjoyers.
Also doubles down as a small addition to the black market and maint
loot, and code cleanup, since gun code gives off some garbled vibes.
## Changelog
🆑
add: Expanded the Experimental MODsuit Bepis node with three new
modules: Magneto Charger, Recycler and Shooting Assistant.
add: Added a Riot Foam Recycler module to the black market, as well a
more innocuous version as maint loot.
/🆑
* Expanding the Experimental MODsuit Bepis Node with three new modules.
* update modular, I hate this file btw
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
* Plasmamen can now get HMS (#76352)
As plasmaman it is not currently possible to get HMS, despite being able
to pick it as a trait roundstart and being able to get infected by
traitors with the objective, this will fix two issues in one, removing
yet another free points, this time 12, AND making them suffer the
consequences of the syndicate.
* Plasmamen can now get HMS
---------
Co-authored-by: FunnyToilet <117867244+Funnytoilet@users.noreply.github.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
* Adds an element for noisy movement (wheelchairs, office chairs, trashcarts etc. etc.) (#76378)
## About The Pull Request
Converts generic, copypasted behavior into an element.
## Why It's Good For The Game
I'd rather not have someone just copypaste the old thing, since there're
a few more things to take into account now than just whether the item
has gravity, and if that ever has to change, we will only have to modify
one line than several.
## Changelog
🆑
fix: Fixed the office chair being silent. My bad.
/🆑
* Adds an element for noisy movement (wheelchairs, office chairs, trashcarts etc. etc.)
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* HMS, once again. (#75654)
## About The Pull Request
Bug reports seem to come in after the last fix gets merged. It makes me
sad.
## Why It's Good For The Game
The EHMS injector no longer continues to inject no matter what.
Fixes#75776
## Changelog
🆑 Chadley
fix: fixes the EHMS injector's do_after()
code: Improves the code for the disease scan proc (thank you fikou)
/🆑
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@ users.noreply.github.com>
* HMS, once again.
---------
Co-authored-by: Charlotte <98856144+orthography@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@ users.noreply.github.com>
* Moves ui references from the tgui subsystem to datums themselves (#76215)
## About The Pull Request
Unused vars have 0 memory cost, and the ref and list lookup here is
REALLY expensive, for both init and foam spreading.
## Why It's Good For The Game
Saves 0.2s off a station flood on meta, and 0.17s off init. More time in
other qdel heavy areas
Pulled off #76104 for the sake of cleanliness
* Moves ui references from the tgui subsystem to datums themselves
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
* Maptext 2023 tweaks [NO GBP] (#76397)
## About The Pull Request
- In PR https://github.com/tgstation/tgstation/pull/76356 missed a few
bits of maptext around, such as shuttle signs and the supermatter. Small
text adjustments/fixes here.
- Large amount of feedback about the context tooltips. Increases size,
lightens default color as to not be too imposing.
🆑 LT3
qol: Context tooltip size increased
fix: Fixed remnants of old maptext code on various things
/🆑
* Maptext 2023 tweaks [NO GBP]
---------
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
* Mind link speech displays symbols correctly (#76290)
Closes#71991
Removes a call to sanitize() in mind linker code because tgui_input_text() already sanitizes input by default, symbols now display correctly
* Mind link speech displays symbols correctly
---------
Co-authored-by: cnleth <113535457+cnleth@users.noreply.github.com>
* Glass bottles with reagents can be used for crafting, empty ones will be used as tools if possible (#76259)
## About The Pull Request
Fixes#76250
The problem was a glass bottle has `tool_behaviour = rollingpin` and so
it took priority in this if condition
93d4b6d6cd/code/datums/components/crafting/crafting.dm (L125-L134)
before it could check if its a reagent container
Now the priority is inverted, if the glass bottle has reagents inside it
then it is used as a reagent container else if it is empty then it used
as a rolling pin(i.e. checks for its tool behaviours)
## Changelog
🆑
fix: glass bottles with reagents can be used for crafting, empty glass
bottles will be used as tools(e.g. empty glass bottle as rolling pin)
fix: glass bottle with welding fuel can be used for crafting improvised
shotgun shells
/🆑
* Glass bottles with reagents can be used for crafting, empty ones will be used as tools if possible
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
* Buffs Wizarditis (#76156)
## About The Pull Request
Basically, reworks Wizarditis so you randomly cast real (weakened)
spells instead of just saying random invocations + doing a hardcoded
version of teleport.
Spells include Teleport, Disable Tech (small radius), Mutate, Knock,
Forcewall, Blink, Smoke, Spacetime Distortion (much smaller radius),
Timestop (radius of 1 (haha)), Repulse (small radius), Blind, Lightning
Bolt (weaker bolt), and Swap
Makes anti-magic counter wizarditis, but not cure it.
Adds some more minor tells that one may be infected. Removes some old
messages in favor of newer ones.
## Why It's Good For The Game
Wizarditis is very lackluster for how difficult it is to obtain.
Initially this started as de-hardcoding / optimizing the in built
teleport function to use the actual scyar nila, but I realized how easy
it would be to expand this, so I did it.
Because it's funny.
## Changelog
🆑 Melbert
add: Wizarditis Improved. Those infected will now randomly cast one of
the following (weakened) spells at max stage: Teleport, Disable Tech,
Mutate, Knock, Forcewall, Blink, Smoke, Spacetime Distortion, Timestop,
Repulse, Blind, Lightning Bolt, or Swap
add: A source of antimagic will prevent Wizarditis's ill effects, but
won't cure you.
/🆑
* Buffs Wizarditis
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* initial i think
* stuff
* test
* fix
* close to publishing
* k
* raise akula tail 1 px
* beginning of clothing
* akula species trait initial
* reviews and CI
* head.dm runtime
* some reviews
* oops
* oops 2x
* review
* job equipping
* clothing flavor
* forgot the .dme
* runtime test
* foundation to more clothing
* errors
* almost ready now
* forgot
* new loadout species restriction
* null runtime
* runtime test
* sprite error
* atleast fill this in
* screenshot test
* lots of descriptions
* i forgot to add job clothing values
* get_species_lore
* prepare_human_for_preview fix
will need new screenshot test probably
* screenshot test fix
https://github.com/Skyrat-SS13/Skyrat-tg/issues/20284
* loreupdate
* write it better
* forgor 💀
* dixel fix
* sprite fix
* job outfit armor changes
* reviews
* extra
* desc formatting
* linter
* reviews part 1
* forgot
* reviews part 2
* reviews part 3
* reviews part 4
* forgot
* fixes
* fix for aquatic digilegs
* small
* fire/water balancing like yin and yang
* modularity thing
* aquatic rename
* A fix and change
* moves sphere 1px and loadout thing
* hair bugfiex
* Te Velu Akko
* head internals
* more patches
* akula eyenudge
* Changes food storage to use a right-click instead of a left-click, adds context hints (#76110)
What it says on the tin. Currently, if you left-click a cake or bread
with anything small enough (including a knife) you store it inside and
have to remove it to actually use it. Now it uses a right-click which
makes significantly more sense because you're almost always going to be
trying to cut the piece of food and not embedding an object into it and
left-click actions should ideally be "what you're most likely to be
doing with the object 99% of the time".
Also adds context tips for slicing, embedding, and removing embedded
items. It'll always give a prompt to remove an item even if there isn't
one, so there's no concern about it giving away that something is
inside.
* Changes food storage to use a right-click instead of a left-click, adds context hints
---------
Co-authored-by: TheVekter <TheVekter@users.noreply.github.com>
* [NO GBP] Patches for material container (#75747)
**1. Meat hook**
#75422 gave auto lathe's the ability to consume an item AND it's
content's recursively so the autolathe can display multiple messages if
it founds item's in that object content's which it will also recycle.
This might catch player's off guard as they would not have expected that
item to contain other stuff inside it so now the auto lathe(and any item
implementing material container component) will display that item name &
it's material worth being consumed.
**New Format.**
Here i inserted 3 item's
1. Shotgun
2. Foam Box Riot(full ammo inside)
3. Stack of iron
The red line indicates where one item end's and the other one begin's.
Notice how every part of the shotgun(it's bean slugs and even it's
firing pin) are consumed and the same for the ammo box(the box + 40 of
it's bullets)
**2. Tentacle Gun**
this is an abstract item
So even though the auto lathe understood that & didn't touch it, it
still tried to consume it's contents leaving behind an non functional
tentacle gun.
Now it will early return if the item is an hologram/abstract and won't
touch any of that item's content's
**3. Other Patches**
- Indestructible item's inside an item's content's are not consumed but
forced moved out
- the total material worth of the item & it's contents are calculated
and we check if there is enough space for all of them before we attempt
to insert. This is important so we don't break an object by consuming
only some of it's contents and leaving out the rest
* [NO GBP] Patches for material container
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
* Fixes a runtime when attacking non-carbon mobs with a cuffsnapper (#76190)
## About The Pull Request
The cuffsnapper component now checks to make sure the target is a carbon
before running the rest of the cuffsnapping process on them.
target.handcuffed is checked (handcuffed is defined on carbon), but
nowhere is it actually asserted that the target is a carbon, so a
runtime would occur when attacking non-carbon mobs.
## Why It's Good For The Game
This runtime fix was brought to you by https://runtimes.moth.fans
## Changelog
🆑
fix: attacking non-carbon mobs with a cuffsnapping object will no longer
runtime.
/🆑
* Fixes a runtime when attacking non-carbon mobs with a cuffsnapper
---------
Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
* Air Sensor are Craftable, Removed from RPD UI, Have New Linking System (#75869)
## About The Pull Request
**1. Craftable & Removed from RPD UI**
1. Air sensor's are now craftable
2. You can turn them on/off with hand. Even though turning off the
sensor will change it to a diffrent type[from `obj/machinery/air_sensor`
-> `obj/item/air_sensor`] it's I/O port's are sill preserved when
turning them on although you have to assign it a new name again which is
usefull if you want to change the sensor's purpose in game.
3. They can now only be deconstructed by a welding tool and should be
wrenched in place to turn them on.
4. Turned off air sensor's once unwrenched can be picked up like any
regular item
5. Air sensor's are removed from the RPD UI because they don't go with
pipes so it logically doesn't make sense to group them with pipe related
device's
Removed unused code in the process
https://github.com/tgstation/tgstation/assets/110812394/3439a0f3-9c48-43ac-8f4b-98135435ec13
**2. New ID System**
The problem with air sensor's is that each sensor is assigned a unique
ID which is then stored in `GLOB.objects_by_id_tag` list. Each sensor
name it's assigned based on the gas it's trying to sense(for naming only
even though it can detect other gases) So if 2 sensor's having the same
ID are made they will overwrite each other in this list leaving one
sensor orphaned in the world which cannot be referenced because it's
value was overwritten by a new sensor having the same ID in this list.
The Solution? Rather than having all atmos computer's look up sensor's
from this 1 global list make each computer keep track of all sensor's
it's responsible for in it's own local list[which i called
`connected_sensor's`] this way 2 sensor's can have randomly generated
names in the global `GLOB.objects_by_id_tag` list but the computer will
know what sensor to look up in this list based on the stored sensor ID's
in the `connected_sensor's` list
Basically what i am getting at is now you can make as many air sensor's
as you wish but you will know have to connect that sensor to the
computer using a multitool.
Notice in the video how i made 2 sensor's called `Supermatter Chamber
Sensor's`] and every time you try to connect an sensor which has the
same name[`Supermatter Chamber Sensor's` in this case] they will
ovewrite the old sensor in it's list as shown in the video
https://github.com/tgstation/tgstation/assets/110812394/b5283c3b-c8a1-4b94-a6a8-8ba7a0007615
**Why it's good for the game**

I agree. Also air sensor's taking up a full Tab/Section in the RPD UI
wasted a lot of UI space so that's removed now. Also making the air
sensor's wrenchable and pickable item's was also requested in
https://github.com/tgstation/tgstation/pull/72019#issuecomment-1355499873
so you relate them to device's like meter's
Another huge issue was that the number of air sensor's you can make in
the world was limited because each sensor in the world must have a
unique ID but that's finally fixed now so yeah make as many sensor's as
you want.
## Changelog
🆑
add: air sensor's are craftable
refactor: air sensor's can now be turned off by hand and can only be
deconstructed by a welding tool
refactor: removed `Params()` proc
qol: unwrenched air sensors can be picked up & recycled like regular
item's
del: air sensor are removed from the RPD UI
qol: air sensor's are no longer restricted by their unique ID's which
mean you can craft as many air sensors as you want.
/🆑
---------
Co-authored-by: Time-Green <timkoster1@ hotmail.com>
* Air Sensor are Craftable, Removed from RPD UI, Have New Linking System
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Time-Green <timkoster1@ hotmail.com>
* The honorbound trauma now makes use of the relay_attackers element. (#75908)
## About The Pull Request
Whoever made the relay_attackers element, thank you for streamlining the
bucketload of signals that had to be registered for everything that
counted as an attack. It's very much needed.
Beside, I only had to add a few flags to be sent by the
ATOM_WAS_ATTACKED signal, so that stamina and shoving doesn't
automatically make the attacker guilty.
Oh, one more thing I have forgot to mention. Currently medical staff is
immune to "guilt" altogether, while the comments suggest they should be
affected by declaration but not attacking. This PR also covers that
issue.
## Why It's Good For The Game
This will fix#75904.
## Changelog
🆑
fix: Fixed the honourbound trauma not reacting to attacks from basic
mobs
fix: Fixed the "Declare Evil" spell not working against the medical
department.
/🆑
* The honorbound trauma now makes use of the relay_attackers element.
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Makes Godwoken Syndrome VoG commands ignore spam filter (#76146)
## About The Pull Request
they're basically forced speech and should not account for the spam
filter
## Why It's Good For The Game
fixes#55392
## Changelog
🆑
fix: fixed Godwoken Syndrome VoG commands triggering the spam filter
/🆑
* Makes Godwoken Syndrome VoG commands ignore spam filter
---------
Co-authored-by: Sealed101 <cool.bullseye@yandex.ru>
* Autolathe, protolathe, mech fab and comp printer now use defines for matter bins values. Also some production ui do. (#76020)
Changed hardcoded matter bins values to use defined
`SHEET_MATERIAL_AMOUNT` for following stuff: autolathe, protolathe, mech
fabricator and component printer.
`Material Access Bar` and `MaterialIcon` used for protolathes, circuit
printers and etc. now also use defined `SHEET_MATERIAL_AMOUNT`, via
static ui data, to prevent same issues in future.
Also changed some notes in /// parts just because why not.
* Autolathe, protolathe, mech fab and comp printer now use defines for matter bins values. Also some production ui do.
---------
Co-authored-by: Helg2 <93882977+Helg2@users.noreply.github.com>
* Fixes and adds an element for TC reimbursement. (#75816)
## About The Pull Request
Fixed being unable to reimburse syndicate spawners via uplinks. This
includes nukie reinforcements, cyborgs, and holoparasite injectors.
Turned TC reimbursement into a bespoke element.
Tuned demon's blood message when there's no ghosts to pick to be a
little more understandable and sensible.
## Why It's Good For The Game
> Fixed being unable to reimburse syndicate spawners via uplinks. This
includes nukie reinforcements, cyborgs, and holoparasite injectors.
This bug was, to my knowledge, introduced with bubby traitors when
uplinks were turned into components, as the code no longer supported it
due to what I presume to be an oversight, since there's plenty of
references to it ingame still.
> Turned TC reimbursement into a bespoke element.
Seemed like the best way of doing this. Since for some godforsaken
reason attackby() is one-way only (no attackto() ), the uplink component
sends a signal to any item hit with it instead.
## Changelog
🆑
fix: Fixed being unable to reimburse syndicate spawners via uplinks.
This includes nukie reinforcements, cyborgs, and holoparasite injectors.
refactor: Turned TC reimbursement into a bespoke element.
spellcheck: Tuned demon's blood message when there's no ghosts to pick
to be a little more understandable and sensible.
/🆑
* Fixes and adds an element for TC reimbursement.
---------
Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com>
* Fix cyborg autofire (#76240)
## About The Pull Request
Nothing implies this has to be an `iscarbon` check anywhere
Closes#76211
## Changelog
🆑 Melbert
fix: The Syndicate Assault Cyborg can autofire their LMG
/🆑
* Fix cyborg autofire
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Lighting object oddities (#76009)
## About The Pull Request
Fire stacks status effect no longer uses a weakref for the mob light, I
am pretty sure there was no real reason to use a weakref there.
Deleted weird luminescent glow dummy, now it just uses the standard
moblight obj.
Put all /obj/effect/dummy/lighting_obj together in a single file and
added a comment explaining why they exist.
(I severely dislike the /obj/effect/dummy typepath, but I am very much
unsure if just replacing all of them with /obj/effect/abstract would
break shit)
## Why It's Good For The Game
Code organization good
* Lighting object oddities
* Update kindle.dm
---------
Co-authored-by: ChungusGamer666 <82850673+ChungusGamer666@users.noreply.github.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
* Standardize Welder Fuel Usage (#76021)
Remove welder fuel usage from all actions except attacking and leaving
it on
most welder tasks require a minimum of 1u of fuel, some longer tasks
require a minimum of 2 or 3u welders now drain 1u every 5 seconds
they're active
## About The Pull Request
Prior to this PR welder fuel usage was random, a lot of tasks didn't use
any welder fuel and welders were basically near infinite so long as you
didn't use them for combat, it took 26 seconds of activity to drain 1u
of fuel, that means an emergency welder alone could run for 5 minutes
straight before needing a refuel
After this PR all welders will drain 1u every 5 seconds instead of every
26 seconds, but welding objects won't require extra fuel anymore, making
the fuel usage much more consistent.
resolves#55018
## Why It's Good For The Game
Actually makes fuel tanks useful and relevant without making it
obnoxious to do repetitive quick tasks like turn rods into plates,
there's actually a reason to upgrade off the emergency welder now since
it lasts 50 seconds rather than 5 minutes
## Changelog
🆑
qol: Welders now have a more consistent fuel usage
/🆑
* Standardize Welder Fuel Usage
---------
Co-authored-by: Couls <coul422@gmail.com>
* Adds the current server name from the config to the world status (#76014)
## About The Pull Request
Adds the server name from the configuration to the world's status topic.
## Why It's Good For The Game
We don't currently expose the server's short name (e.g. `Sybil`,
`Manuel`) anywhere. This fixes that. This is mostly to support external
tools.
* Adds the current server name from the config to the world status
---------
Co-authored-by: Nick <nick@nfreader.net>
* Fix further/MetaStation (#76158)
## About The Pull Request
Typo fixes. Further and fixes MetaStation's default name to match the
JSON.
## Changelog
🆑 LT3
spellcheck: Fixed a few typos
/🆑
* Fix further/MetaStation
---------
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
* Burner can be crafted from any open container (#75978)

## About The Pull Request
Expands the options for making burners (makeshift igniters) by requiring
any open container (bottles, cans, cups) instead of beaker subtypes.
## Why It's Good For The Game
Makes ghetto recipe a bit more ghetto-friendly
## Changelog
🆑
qol: Chemical burner can be crafted from any open container, not just
beakers
/🆑
* Burner can be crafted from any open container
* null modular icon
---------
Co-authored-by: Andrew <mt.forspam@gmail.com>
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
* Gives Fugitive Hunters credible IDs, access restricts the hunter shuttles, minor hunter shuttle improvements (#75913)
## About The Pull Request
This standardizes fugitive hunter IDs, making all hunter packs use the
same subtype and giving them to hunters who would spawn with no ID at
all.
The badass flaming ID color that the OG Bounty Hunter team got are now
the standard for fugitive hunter IDs. Additionally, these IDs now come
with a radical skull trim.
(Spacepol Officers don't get the badass flaming skull ID, and instead
get a more modest Police Officer ID).
**These IDs come with access, too. Airlocks, bolt buttons, shuttle
controls, and shutters on all of the hunter shuttles now require a
hunter's ID to operate.**
While I was in the area doing mapping stuff to get the accesses in
place, I made a few other very minor changes to the shuttles. These
include:
- The Bounty Hunter shuttle now has an oxygen dispenser. Two walls have
been moved to make space.
- The Russian Hunter shuttle now gets enough oxygen tanks to share with
everyone.
- The Psyker Hunter spawners now have proper spawner menu text. This was
due to duplicate-but-not-really subtypes existing, and me mistakenly
putting the wrong ones there in a previous PR.
- The cut ai wire helpers from the Russian/Psyker shuttles have been
extended to the Bounty/Spacepol shuttles.
- Every hunter shuttle now has a shuttle pinpointer on it somewhere, and
is no longer exclusive to a single Bounty Hunter's loadout.
## Why It's Good For The Game
Some of the hunter IDs would spawn without trims or coloration, and some
hunters wouldn't spawn with IDs at all. Now, everyone gets a credible,
cool-looking ID that lets everyone know what you're here to do at a
glance.
One of these is a crazed larper with an unregistered firearm, the other
is a certified bounty hunter.
As for the hunter access, it's pretty nonsensical that anyone can just
walk into the hunter ship and set up shop. At least the pirates get
turrets! Not to mention, it's hard to balance or give hunters new
equipment in good conscience when their entire domain is public-access
and anything they can't carry is considered forfeit to the crew. Now it
can be used as a base of operations, storage area, etc. more securely.
Locking down the shuttle with accesses isn't going to stop a determined
gamer with a toolset, but it'll at least make it more interesting and an
actual risk. If the fugitives want to try and loot/hijack the shuttle,
it will require the effort of taking down one of their hunters first.
While hunters stand out for the differences/imbalances between each
group, I don't see the shuttle pinpointer as something that contributes
positively to the OG bounty hunter's uniqueness. There's no reason why
the other hunters shouldn't also be able to track their ship.
* Gives Fugitive Hunters credible IDs, access restricts the hunter shuttles, minor hunter shuttle improvements
---------
Co-authored-by: Rhials <Datguy33456@gmail.com>
* Machine's correctly eject signaller's attached to it's wires (#75928)
## About The Pull Request
Fixes#72053
the signaller is made part of the machine's `component_parts` now so it
doesn't get moved out when `dump_inventory_contents()` is called like in
the case of microwave when it has finished cooking
This fix also applies for other machine's that call this proc
Fixes#72132
Clear's out the `holder` & `connected` vars from the signaller when the
wire's get destroyed allowing the signaller to be picked up
## Changelog
🆑
fix: microwave's(after it has finished cooking) & other machine's that
spit out contents don't spit out assemblies/signallers attached to it's
wires.
fix: signallers can be picked up if you attached them to a machine's
wire & later deconstructed that machine without detaching it first.
/🆑
---------
Co-authored-by: Jeremiah <42397676+jlsnow301@ users.noreply.github.com>
* Machine's correctly eject signaller's attached to it's wires
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@ users.noreply.github.com>
* Adds runtime safety into cinematic code to stop everyone locking up (#76025)
## About The Pull Request
Separates these two sections of cinematic code out in their own procs to
add some runtime protection.

This keeps happening and I have really no idea why. There shouldn't be
any `null`s in this list of weakrefs. I asked Lemon a while ago and they
said it was a bug in some other code. So I'm just doing this instead.
Because I don't know where to hunt down that issue and try-catches
aren't real.
Closes#76024
## Why It's Good For The Game
Runtiming in these procs is really bad because it handles setting all
mobs to `notransform`. Which blocks all movement and acting and stuff.
## Changelog
🆑 Melbert
code: Adds some runtime safety to Cinematic code
/🆑
* Adds runtime safety into cinematic code to stop everyone locking up
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Refactors the worst list ever, Stun Absorptions, into status effects + makes status flags more accurate (making certain mobs more vulnerable to incapacitations?) (#76000)
## About The Pull Request
- Refactors the stun absorption list into a status effect
- Does a fair bit of cleanup around stun code
Weird thing involved in this.
Check out this define.
`IS_STUN_IMMUNE(source, ignore_canstun) ((source.status_flags & GODMODE)
|| (!ignore_canstun && (!(source.status_flags & CANKNOCKDOWN) ||
HAS_TRAIT(source, TRAIT_STUNIMMUNE))))`
Notice anything odd about it?
It only checks for `CANKNOCKDOWN`.
What does this mean?
Well, *every single* one of the stun procs used this macro for checking
stun immunity. Which means every method of stun checked the
`CANKNOCKDOWN`.
This means that, say you have a mob which has `CANSTUN` but not
`CANKNOCKDOWN`.
Intuitively this means that the mob cannot be knocked down, but can be
stunned.
But instead, this means the mob can't be stunned either.
This doesn't affect humans, they have all the status flags, but it does
affect some other mobs.
Alien adults (not queens) have `CANUNCONSCIOUS|CANPUSH`. Before, they
didn't have `CANKNOCKDOWN`, so they were fully immune to stuns and
sleeps. But now, they can be knocked unconscious.
However, overall it doesn't change much, as most mobs that flipped off
`CANKNOCKDOWN` flipped off the others too.
For consistency though it makes sense for these flags to work as they
imply.
- `incapacitate` didn't have a signal, now it does
## Why It's Good For The Game
More consistent, better code? I may use this in the future.
## Changelog
🆑 Melbert
refactor: Refactored Stun Absorptions (Bastard Sword, His Grace)
refactor: Refactored Stun Immunity. Note this means that some mobs
which, prior, were immune to all forms of incapacitation are now
vulnerable to some. Notably, adult non-queen xenomorphs are now
vulnerable to falling unconscious.
/🆑
* Refactors the worst list ever, Stun Absorptions, into status effects + makes status flags more accurate (making certain mobs more vulnerable to incapacitations?)
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Fixes stowing suit storage jetpacks when retracting modsuit chestplates (#75844)
## About The Pull Request
This is a bizare bug I discovered while trying to develop another
feature, so let's just get into the reproduction steps:
- Wear a modsuit and extend it's parts
- Put a jetpack in the suit storage slot and turn it on. Currently, the
only jetpack that fits in the storage slot on TG is the captain's
jetpack.
- While the jetpack is activated, deactivate your modsuit using the UI,
which stows the jetpack into your storage module automatically.
- This fails to unregister some signal thing because it can't find the
user.
My fix *could* be shitcode, so any feedback would be appreciated.
Jetpack activation and deactivation signals now pass a user.
`/datum/component/jetpack/proc/activate(datum/source, mob/user)`
`/datum/component/jetpack/proc/deactivate(datum/source, mob/user)`
Some jetpack `pre_move_react` thing now has a check to see if it's
argument is null.
```
if(!trail)
return FALSE
```
## Why It's Good For The Game
Stops a crash/runtime.
## Changelog
🆑 stonetear
fix: jetpack signals now pass a user argument. This fixes an error when
automatically stowing a captain jetpack into your modsuit.
/🆑
* Fixes stowing suit storage jetpacks when retracting modsuit chestplates
---------
Co-authored-by: Stonetear <89315023+Stonetear@users.noreply.github.com>
* Fixes coin values (#76066)
## About The Pull Request
This brings coins values back from being severely undervalued after
#75437. Coins are supposed to be made of and worth 400 units of mats,
but the numbers weren't updated and so they were made of significantly
less than that.
## Why It's Good For The Game
Brings coins back to what they're supposed to be worth.
## Changelog
🆑
fix: After destroying unfathomable quantities of excess coins, their
value is back to what it's supposed to be!
/🆑
* Fixes coin values
---------
Co-authored-by: Nick <42454181+Momo8289@users.noreply.github.com>
* Glass jaw quirk minor oversight fix (#76088)
## About The Pull Request
The knock out message will no longer appear if the quirk holder is
already unconscious
## Why It's Good For The Game
Less confusing combat messages!
## Changelog
🆑
fix: Glass joes will no longer appear to get knocked out, while already
knocked out.
/🆑
* Glass jaw quirk minor oversight fix
---------
Co-authored-by: ChungusGamer666 <82850673+ChungusGamer666@users.noreply.github.com>