* Fix APC cell removal runtime (#79077)
## About The Pull Request
Someone implemented `Exited` but didn't remove this code, it's not
necessary and all it does is runtime now.
* Fix APC cell removal runtime
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Heretic summon name fixes (#79055)
## About The Pull Request
Fixes#79049.
The ghost poll for heretic summons used the `real_name` field to display
the mob's name. However, for some reason, a couple of the heretic
summons have jokey nicknames as their real names ("Ashy" for ash
walkers, "Rusty" for rust walkers). I've opted to take the simple option
of making the ghost text just use the `name` field instead - it's used
for the admin logs around summoning, so it should be fine for the poll
too.
Also, I've capitalized "Fire Shark" and set its real name to also be
"Fire Shark". For consistency.
Finally, I've made heretic summon names not proper nouns, so examining
them will display "That's a Rust Walker" rather than "That's Rust
Walker". The Lord of the Night did not receive this treatment due to
being a unique thing.
## Why It's Good For The Game
It's good when ghosts know what they're actually signing up to be.
Most heretic summons aren't unique entities, so it makes sense for them
to not be proper nouns.
## Changelog
🆑
fix: Heretic summons should now display the correct name when polling
ghosts to play as them.
/🆑
* Heretic summon name fixes
---------
Co-authored-by: lizardqueenlexi <105025397+lizardqueenlexi@users.noreply.github.com>
* Adds pathmaps, refactors pathfinding a bit (#78684)
## About The Pull Request
Implements /datum/pathfind/sssp, which generates /datum/path_map
/datum/path_maps allow us to very efficently generate paths to any turf
they contain from their central point.
We're effectively running the single source shortest paths algorithm.
We expand from the center turf, adding turfs as they're found, and then
processing them in order of addition.
As we go, we remember what turf "found" us first. Reversing this chain
gives us the shortest possible path from the center turf to any turf in
its range (or the inverse).
This isn't all that useful on its own, outside of a few niche cases
(Like if we wanted to get the farthest reachable turf from the center)
but if we could reuse the map more then once, we'd be able to swarm
to/from a point very easily.
Reuse is a bit troublesome, reqiures a timeout system and a way to
compare different movables trying to get paths.
I've implemented it tho. I've refactored CanAStarPass to take a datum,
/datum/can_pass_info. This is built from a movable and a list of access,
and copies all the properties that would impact pathfinding over onto
itself.
There is one case where we don't do this, pathing over openspace
requires checking if we'd fall through the openspace, and the proc for
that takes an atom.
So instead we use the weakref to the owner that we hold onto, and hold
copies of all the values that would impact the check on the datum.
When someone requests a swarmed path their pass info is compared with
the pass info of all other path_maps centered on their target turf. If
it matches and their requested timeout isn't too short, we just reuse
the map.
Timeout is a tricky thing because the longer a map exists the more out
of date it gets.
I've added a few age defines that let you modulate your level of risk
here. We default to only allowing maps that are currently
being generated, or finished generating in our tick.
Hopefully this prevents falling into trouble, but consumers will need to
allow "failed" movements.
As a part of this datumized pass info, I've refactored pathfinding to
use access lists, rather then id cards directly. This also avoids some
dumbass harddel oppertunities, and prevents an idcard from changing mid
path.
Did a few things to the zPass procs, they took args that they did NOT
need, and I thought it'd be better to yeet em.
If you'd all like I could undo the caching/can_pass_info stuff if you'd
all like. I think it's useful generally because it avoids stuff changing
mid pathfind attempt, but if it's too clunky I could nuke it.
Oh also I added optional args to jps that constricts how it handles
diagonals. I've used this to fix bot paths.
## Why It's Good For The Game
Much of this is redundant currently. I'm adding it because it could have
saved hugglebippers, and because I get the feeling it'll be useful for
"grouping" mobs like bees and such.
We're doing more basic mob work currently and I want to provide extra
tools for that work.
https://github.com/tgstation/tgstation/assets/58055496/66aca1f9-c6e7-4173-9c38-c40516d6d853
## Changelog
🆑
add: Adds swarmed pathfinding, trading accuracy for potential
optimization of used correctly
fix: Bots will no longer take diagonal paths, preventing weirdo looking
path visuals
refactor: Refactored bits of pathfinding code, hopefully easier to add
new pathfinding strategies now
/🆑
* Adds pathmaps, refactors pathfinding a bit
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Starlight Control (Aurora works now, space gas doesn't touch starlight, narsie ending effects) (#78877)
## About The Pull Request
[Implements a setter for starlight
variables](af34f06b41)
I want to start to modify starlight more, and that means I need a way to
hook into everything that uses it and update it, so we can modify it on
the fly.
This does that, alongside removing space overlays from nearspace (too
many false positives) and making the aurora modify all turfs projecting
starlight, rather then all turfs in an area.
Do still need to figure out handling for the starlight color usage in
turf underlays tho (I gave up, we just keep it static. I'll fix it
someday but the render_relay strategy just doesn't work with its masking
setup)
[Reworks how starlight overlays
work](9da4bc38e2)
Instead of setting color on the overlays directly, we instead store an
object with our current settings in every mob's screen, and
render_target it down onto our overlays.
This lets us update overlay colors VERY trivially. Just need to set
color on the overlay var. Makes modifying starlight a lot cheaper.
It doesn't work on area overlays, because suffering, and it MIGHT induce
extra cost on clients. if it does we can do something about that, we'll
play it by ear
[Removes parallax starlight
coloring.](5f701a1b13)
I'm sorta iffy on the color, the effect can be real oppressive in some
cases, and I'd like to use starlight color for more events in world, and
having it vary can make that looking nice hard.
[Adds some visual effects to narsie being
summoned](a423cfcb2b)
As the rune drawing progresses space (starlight and parallax) go from
normal to greyscale. Then, right about when narsie shows up, starlight
becomes vibrant red.
It's a nice effect. I wanna do more shit like this, I think it'll
improve vibes significantly.
## Why It's Good For The Game
Can't embed it because of github's upload limit, can show a
[link](https://cdn.discordapp.com/attachments/458452245256601615/1160821856358645860/2023-10-08_22-31-22.mp4?ex=65360e99&is=65239999&hm=680e33e4e0026b89e132afc50c04a648a24f869eb662f274a381a5de5c5a36f2&)
for the narsie stuff
Here's
[one](https://cdn.discordapp.com/attachments/326831214667235328/1160813747196141568/2023-10-08_22-34-10.mp4?ex=6536070c&is=6523920c&hm=f8d571d1013da89887f49f3fec99f632251eeeac83085aa7dde97009aee3922f&)
for the aurora too.
This gives us more pretty starlight shit, and the ABILITY to do more
pretty starlight shit. I'm pretty jazzed, and I hope people use this
proc more (keeping in mind that it's pretty hard on the lighting system,
and needs significant delay between changes)
## Changelog
🆑
add: Narsie summoning has had some effects added to space and starlight
del: Removes the link between spacegas color and starlight. It was a
slight bit too vibrant and I think impacted the vibe too wildly to be
incidental.
fix: The aurora event actually... works now. Space lights up and all
that
/🆑
* Starlight Control (Aurora works now, space gas doesn't touch starlight, narsie ending effects)
* Update space.dm
* Update shuttles.dm
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* Added more slapcraft recipes, improved its component, fixed base cowboy hat type (#78854)
## About The Pull Request
Added slapcraft recipes for: Pillow suits, pillow helmets, bone and
sinew tailoring/weaponry, pipeguns, ghetto jetpacks, and pneumatic
cannons.
The base type of cowboy hats no longer looks and is named like a bounty
hunter hat, clarifying the recipe for the heroic laser musket.
Fixed an issue where if a slapcraft recipe required more than one
instance of its 'primary' slapcrafting item, it wouldn't show the
additional instance when examining its recipes.
## Why It's Good For The Game
Idk lol
## Changelog
🆑
qol: Added slapcraft recipes for: Pillow suits, pillow helmets, bone and
sinew tailoring/weaponry, pipeguns, ghetto jetpacks, and pneumatic
cannons.
code: The base type of cowboy hats no longer looks and is named like a
bounty hunter hat, clarifying the recipe for the heroic laser musket.
They need cowboy hats not bounty hats.
fix: Fixed an issue where if a slapcraft recipe required more than one
instance of its 'primary' slapcrafting item, it wouldn't show the
additional instance when examining its recipes.
/🆑
* Added more slapcraft recipes, improved its component, fixed base cowboy hat type
---------
Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com>
* Invisibility refactor (#78908)
This adds a tracker for sources of invisibility and a priority system. I
needed this for another thing so I'm doing this first since it touches a
lot of code. As for the bugs fixed in the changelog, it's only what I
noticed while going through everything and there's likely a few more
things fixed with this. This should be testmerged for a while, I'll
bring this out of draft when it feels safe.
🆑
admin: Invisimin can now be used on mobs that are already invisible,
whether through temporary or permanent effects.
fix: Monkeyize/Humanize mob transformations no longer permanently reveal
invisible mobs if they had effects making them invisible otherwise.
fix: Objects with the undertile element that have been made invisible
through other means are no longer revealed by being uncovered.
/🆑
* Invisibility refactor
---------
Co-authored-by: Emmett Gaines <ninjanomnom@gmail.com>
* Revenants can use spirit boards (#79029)
## About The Pull Request
Allows Revenants to use Ouija boards.
Cleans up some code of Ouija boards in general.
Default Ouija boards now have some more options to select.
Admins can now VV Ouija board options.
Adds a 1% chance for a Ouija board to be called Luigi board.
## Why It's Good For The Game
Revenants being excluded from spirit board fun is kinda messed up, even
though they're telepaths.
## Changelog
🆑 Melbert
add: Revenants can now use Ouija Boards
add: Ouija Boards now have more options to select from by default (and
admins can VV it to even more options)
fix: Blind people are now worse at using Ouija Boards
/🆑
* Revenants can use spirit boards
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Fixes CI failure from AttackingTarget not passing the attacked_target in its args (#79037)
## About The Pull Request
CI started spamming with runtimes.

`AttackingTarget()` wasn't passing the `target` as an arg. Fixes that.
Also added the arg in a bunch of its overrides because they were not
there. I know we're phasing out simple mobs but in the meantime broken
things bad.
## Why It's Good For The Game
Fixes bug
## Changelog
🆑
fix: fixed runtime caused by simple mobs AttackingTarget() missing an
arg
/🆑
* Fixes CI failure from AttackingTarget not passing the attacked_target in its args
---------
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* [NO GBP] fish analyzers can now be actually used for experiments. (#79030)
## About The Pull Request
I've forgot that, for some reasons, both experiments and experiment
handlers have an experiment(or) whitelist var.
## Why It's Good For The Game
This will fix#78921
## Changelog
🆑
fix: Fish analyzers can now be actually used for experiments.
/🆑
* [NO GBP] fish analyzers can now be actually used for experiments.
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Distillation fixed (#79045)
## About The Pull Request
The recent changes to the food defines have broken the quality scaling
for the fruit wine. This PR fixes the regression.
## Why It's Good For The Game
Bug fix
## Changelog
🆑
fix: Distilled drink quality is fixed - can't give a mood debuff anymore
/🆑
* Distillation fixed
---------
Co-authored-by: Andrew <mt.forspam@gmail.com>
* Fixes being able to punch yourself (#79033)
## About The Pull Request
Fixes#79031Fixes#79042
I forgot some logic here when making the human override.
Not the cleanest way to do it but it'll suffice.
## Changelog
🆑 Melbert
fix: You can punch yourself again
/🆑
* Fixes being able to punch yourself
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Fixes the ghost sheet's supports_variation_flags (#78999)
## About The Pull Request
Tin.
## Why It's Good For The Game
Fixes a small oversight
## Changelog
🆑
fix: ghost sheets will now have the correct flags for digi sprites
/🆑
* Fixes the ghost sheet's supports_variation_flags
* No longer need this modular override now that it's upstreamed
---------
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* Observers can now play CTF again. (#79000)
## About The Pull Request
#78957 accidently made it so CTF could only be played by people with
mobs to return to after dying. I've made it so those who don't have mobs
to return to (e.g. roundstart observers) can play CTF again.
## Why It's Good For The Game
Everyone should be allowed to play CTF without needing to engage with
the space roleplay game we've strapped on.
## Changelog
🆑
fix: Players without bodies to return to can play CTF again.
/🆑
* Observers can now play CTF again.
---------
Co-authored-by: NamelessFairy <40036527+NamelessFairy@users.noreply.github.com>
* Fixes a runtime with AI targeting code, refactors faction checking to be at the atom/movable level (#78803)
## About The Pull Request
Saw this in CI.

~~Quick fix for it--because turrets are not mobs trying to call this
proc on them will runtime. So let's give them their own implementation
of the proc.~~ Just kidding, let's refactor faction checking entirely
## Why It's Good For The Game
Fixes an issue with basic mob AI targeting and turrets.
## Changelog
🆑
fix: basic mobs will no longer runtime when trying to check the faction
of a porta turret
refactor: faction checking is now done at the atom/movable level
/🆑
---------
Co-authored-by: san7890 <the@ san7890.com>
* Fixes a runtime with AI targeting code, refactors faction checking to be at the atom/movable level
* Modular updates
---------
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
* reload savefile on pref assosciation (#78984)
## About The Pull Request
Tells the preferences datum to reload the savefile when we associate to
an already existing one
## Why It's Good For The Game
This trolled me locally for a good hour wondering "why aren't my prefs
updating when I swap out the file"
## Changelog
* reload savefile on pref assosciation
---------
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
* Fixes playing card hands displaying the wrong card at the top when there's more than five cards in the hand (#78954)
## About The Pull Request
Title says it all, really.
It wasn't working right, because BYOND indexes start at 1 and not 0, so
when you had 6 cards, `cards.len - 5 = 1`, which is not what it was
meant to do.
## Why It's Good For The Game
Now hands of card can be used much more effectively for stuff like
discard piles where the top card is important.
(example of what placing down a full, unshuffled deck looks like. It
ends on a King, and as you can see, it displays the King now)

## Changelog
🆑 GoldenAlpharex
fix: Hands of cards will now properly display the last card added to the
hand all the time, even when there's more than five cards in that hand.
/🆑
* Fixes playing card hands displaying the wrong card at the top when there's more than five cards in the hand
---------
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Microwave hotfixes [NO GBP] (#78970)
## About The Pull Request
Microwave hotfixes for https://github.com/tgstation/tgstation/pull/78717
- Microwave will no longer get stuck turned on if the PDA has no cell.
- A message is now generated when a silicon changes the microwave mode.
- Eliminates a 2nd pass through the ingredient loop by checking for PDA
alongside edible food, sends a notification if it's going to explode.
- Show a context hint for both anchored and unanchored state
## Changelog
🆑 LT3
fix: Microwave will no longer get stuck turned on if a PDA has no cell
fix: Silicons can no longer silently change the microwave between cook
and charge
/🆑
* Microwave hotfixes [NO GBP]
---------
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
* Fixes a bug with the plasma flower core MODsuit that would cause a butterfly murder scene wherever there were turrets (#78978)
## About The Pull Request
Fixes https://github.com/Skyrat-SS13/Skyrat-tg/issues/24306
The butterfly effect.
The "MOD plasma flower core" spawns temporary butterflies using a
`/datum/component/spawner`, which is nice and cute. Until you start
getting shot at by turrets because spawners assign the faction of the
mob to `MOB_MINING` by default.
Fixes that.
## Why It's Good For The Game
No more being murdered by your butterflies.

## Changelog
🆑
fix: Fixes a bug with the plasma flower core MODsuit that would cause a
butterfly murder scene wherever there were turrets
/🆑
* Fixes a bug with the plasma flower core MODsuit that would cause a butterfly murder scene wherever there were turrets
---------
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* Fixes tgui say flash on load (#78879)
## About The Pull Request
Hides the TGUI say window from popping up briefly during load
## Why It's Good For The Game
Just annoying for it to "jump scare" players
Fixes#75716
## Changelog
🆑
fix: TGUI Say should no longer flash during initialization
/🆑
* Fixes tgui say flash on load
---------
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
* Universal Scanners Now Make a Noise When Scanning (#78911)
## About The Pull Request
The universal scanner will now make a sound when scanning any item of
value. Items that have no value do not make any noise when scanned. The
lack of a sound for no-value items is intentional, as I couldn't find a
good middle-ground noise that sounded neutral for items with no value.
## Why It's Good For The Game
More audio feedback for scanning stuff with an export scanner. Nearly
all item interactions make a noise of some sort.
## Demonstration
https://github.com/tgstation/tgstation/assets/45489195/f1bf9538-7cf6-44cc-9def-2c7c5af676b9
Here you can see (from left to right of the viewer) the sounds that play
for positive, no value, and negative value items scanned with an export
scanner. The scanner making the same noise for positive or negative
valued items is intentional as
https://github.com/tgstation/tgstation/pull/78923 will be fixing that.
## Changelog
🆑
sound: added sounds for scanning valued items with an export scanner
/🆑
* Universal Scanners Now Make a Noise When Scanning
---------
Co-authored-by: RedBaronFlyer <45489195+RedBaronFlyer@users.noreply.github.com>
* Makes fuel tanks explode again (#78976)
## About The Pull Request
Fixes fuel tanks so they explode again. Very weird bug which I will walk
through below using the old code for reference.
```
/obj/structure/reagent_dispensers/proc/boom()
if(QDELETED(src))
return // little bit of sanity sauce before we wreck ourselves somehow
var/datum/reagent/fuel/volatiles = reagents.has_reagent(/datum/reagent/fuel)
var/fuel_amt = 0
if(istype(volatiles) && volatiles.volume >= 25)
fuel_amt = volatiles.volume
reagents.del_reagent(/datum/reagent/fuel) // not actually used for the explosion
if(reagents.total_volume)
if(!fuel_amt)
visible_message(span_danger("\The [src] ruptures!"))
// Leave it up to future terrorists to figure out the best way to mix reagents with fuel for a useful boom here
chem_splash(loc, null, 2 + (reagents.total_volume + fuel_amt) / 1000, list(reagents), extra_heat=(fuel_amt / 50),adminlog=(fuel_amt<25))
if(fuel_amt) // with that done, actually explode
visible_message(span_danger("\The [src] explodes!"))
// old code for reference:
// standard fuel tank = 1000 units = heavy_impact_range = 1, light_impact_range = 5, flame_range = 5
// big fuel tank = 5000 units = devastation_range = 1, heavy_impact_range = 2, light_impact_range = 7, flame_range = 12
// It did not account for how much fuel was actually in the tank at all, just the size of the tank.
// I encourage others to better scale these numbers in the future.
// As it stands this is a minor nerf in exchange for an easy bombing technique working that has been broken for a while.
switch(volatiles.volume)
if(25 to 150)
explosion(src, light_impact_range = 1, flame_range = 2)
if(150 to 300)
explosion(src, light_impact_range = 2, flame_range = 3)
if(300 to 750)
explosion(src, heavy_impact_range = 1, light_impact_range = 3, flame_range = 5)
if(750 to 1500)
explosion(src, heavy_impact_range = 1, light_impact_range = 4, flame_range = 6)
if(1500 to INFINITY)
explosion(src, devastation_range = 1, heavy_impact_range = 2, light_impact_range = 6, flame_range = 8)
qdel(src)
```
The fuel in the tank is converted into `volatiles`
```
var/datum/reagent/fuel/volatiles = reagents.has_reagent(/datum/reagent/fuel)
```
The `fuel_amt` var is zeroed out, we will recalculate this below
```
var/fuel_amt = 0
```
If there's enough for the tank to explode, this is converted back into
`fuel_amt` and the actual reagent is deleted.
```
if(istype(volatiles) && volatiles.volume >= 25)
fuel_amt = volatiles.volume
reagents.del_reagent(/datum/reagent/fuel) // not actually used for the explosion
```
If there was fuel in the tank, select the appropriate explosion size
depending on the volume of volatiles. As of recently this
`volatiles.volume` became zero by this point due to the deletion of the
fuel reagent above. Investigation of why this behaviour changed is still
ongoing.
```
if(fuel_amt) // with that done, actually explode
visible_message(span_danger("\The [src] explodes!"))
switch(volatiles.volume)
if(25 to 150)
explosion(src, light_impact_range = 1, flame_range = 2)
if(...
```
Going forward, replacing the switch statement with one checking
`fuel_amt` is safer as it's not relying on something we already tried to
delete, and is guaranteed to have the same effect as `fuel_amt =
volatiles.volume`
Fixes#78975
## Why It's Good For The Game
Fuel tanks should explode.
## Changelog
🆑
fix: Fuel tanks are explosive again
/🆑
* Makes fuel tanks explode again
---------
Co-authored-by: Thunder12345 <Thunder12345@users.noreply.github.com>
* [NO GBP]Fixes plumbing for good(hopefully) & more reagent code (#78947)
## About The Pull Request
1. This should be the end of all problems related to plumbing and I
swear if another issue popes up I'm goanna delete my GitHub account. Or
to be more realistic just ping me and I'll be back :D
- Fixes#78945
And this time I am **100%**(if I'm wrong then fuck me) sure that
reagents will not flow in excess amounts into reaction
chambers/synthesizers or whatever plumbing component you can think off.
Reagents flowing in excess amounts is what caused the factory to grind
to a halt as the components will stop processing if they detect excess
amounts of reagents (which is why plunging them with a plunger would
clear them of their reagents and help them resume processing again which
obviously is not an ideal solution)
Also, now it's no longer required to see reagent volumes in 4 decimal
places so I rounded it back to just 2 places again so values like 0.999
or 1.001 will become just 1 again.
Also plumbing reaction chamber was doing too much work so I fixed that.
2. Made defines for min & max ph. any change to ph values of any reagent
will be confined between these values i.e., 0 & 14. Also converted some
vars into defines. Using a variable makes sense if it's value changes
but if it doesn't then just define it as a constant so you can save
memory. Made synthesizer lists static to further save memory.
3. Significantly boosted the ph balancing mechanism for reaction
chamber. You will be surprised.
## Changelog
🆑
fix: plumbing setups should(hopefully) no longer grind to a halt nor
will overflow with excess volume of reagents.
code: created defines for min & max ph. Improved some reaction_reagent
code. Made synthesizer dispensable reagent list values static to save
memory.
refactor: ph balancing mechanism for reaction chamber is significantly
improved. Optimized it's code overall
refactor: examining each individual reagent will display their results
back to 2 decimal places again and not 4 for easy readability.
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
* [NO GBP]Fixes plumbing for good(hopefully) & more reagent code
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
* Bladists can now use silver *or* titanium while creating their blades (#78701)
## About The Pull Request
Blade Heretics can now use silver *or* titanium while creating their
blades.
## Why It's Good For The Game
Silver quite literally *only* exists on surgery tables. Being a blade
heretic with shit miners/roundstart means one of several things.
1. Wait for miners to come back with enough silver (They might never
come back or they might have not gotten any silver)
2. Go to lavaland to dig your own silver (Extremely time-consuming on
the antagonist role that has most downtime, death knell for latejoin
heretics)
All that is not even to mention that for some reason it takes two sheets
rather than one, and surgery tables give one silver when scavenged.
This all combined makes obtaining blades super annoying as the BLADE
path.
Now we can farm titanium off shuttles if the miners are jacking off or
dead, or if we joined 9 minutes to roundend.
## Changelog
🆑
qol: Bladists can now use silver *or* titanium while creating their
blades
/🆑
* Bladists can now use silver *or* titanium while creating their blades
---------
Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com>
* Fixes leaning runtiming from non-carbon mobs, adds a slight animation to the effect (#78847)
* Fixes leaning runtiming from non-carbon mobs, adds a slight animation to the effect
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Improved documentation and message for the dcs_check_list_arguments unit test. (#78903)
## About The Pull Request
I've been contacted recently by san7890 regarding an opened issue report
about the aforementioned unit test. I've told them it's mainly an issue
about the lack of clarity and the bad choice of words in both
documentation and fail messages, and that I'd get to it soon.
I don't repute myself a good writer. The renewed doc and messages may
contain a few grammar issues, but I'm optimistic that it explains it way
more thoroughfully than before.
## Why It's Good For The Game
Better documentation for one of the few unit tests that might tell you
to "fix" stuff you're not directly responsible of. Suggestions are
welcome. This closes#78896.
## Changelog
N/A
* Improved documentation and message for the dcs_check_list_arguments unit test.
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Allows spacemen to use age-appropriate drugs by making it so you can now huff N2O to get high. (#78809)
## About The Pull Request
Allows spacemen to use age-appropriate drugs by making it so you can now
huff N2O to get high.
## Why It's Good For The Game
please do not do whippets IRL
## Changelog
🆑
balance: Allows spacemen to use age-appropriate drugs by making it so
you can now huff N2O to get high.
/🆑
* Allows spacemen to use age-appropriate drugs by making it so you can now huff N2O to get high.
---------
Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
* Fixes Monkey's Delight recipe no good boy point (#78972)
## About The Pull Request
Fixes onkeys delight recipe ti had salt and water but you cant do that
now it turns into aslt water
this pr is untestsed
## Why It's Good For The Game
iots not this is monkey abuse
## Changelog
🆑
fix: Fixes Monkey's Delight recipe
/🆑
* Fixes Monkey's Delight recipe no good boy point
* Update paper.dm
---------
Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Overclocked Vent Pumps (#78583)
## About The Pull Request
Adds in the capability for vent pumps to be overclocked, which allows
them to ignore pressure differentials and move their entire air contents
each process. Doing this causes them to take damage over time however
which causes them to be less effective in normal operation.
**the penalty for low integrity does not apply to fans which are
overclocked, however reaching 0 integrity will still disable them**
## Why It's Good For The Game
Engineers got used to vent pumps being stupid and ignoring pressure, now
its a feature not a bug.
## Changelog
🆑
add: Vent Pumps can now be overclocked, do some light reading in the air
alarm to figure out what this means.
balance: Vent Pumps now have fan integrity, the damaging of which
reduces their ability to move air.
sound: Overclocking sounds, including spool, stop, and loop
/🆑
---------
Co-authored-by: Emmett Gaines <ninjanomnom@ gmail.com>
* Overclocked Vent Pumps
---------
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: Emmett Gaines <ninjanomnom@ gmail.com>
* Modsuits can no longer be deepfried (#78950)
## About The Pull Request
Adds modsuit control unit to deepfry blacklist.
Fixes#78928
## Why It's Good For The Game
You aren't supposed to be able to deepfry storage items like backpacks
since it causes issues. However modsuits start out with no storage, and
can have storage added later, allowing them to bypass this. Therefore
you shouldn't be able to deepfry modsuits since they can become a
storage item.
It's also inconsistent that you can fry modsuits without storage, but
modsuits with storage can't be fried. It's simpler that no modsuits can
be fried at all.
## Changelog
🆑
fix: Modsuits can no longer be deepfried
/🆑
* Modsuits can no longer be deepfried
---------
Co-authored-by: BlueMemesauce <47338680+BlueMemesauce@users.noreply.github.com>
* VV Upgrades (#78948)
## About The Pull Request
* Makes special byond lists display properly
* Makes images get a preview in the header
* Makes filters display properly
* Make variable value display a bit more robust to errors
* Kills single char vars
## Changelog
🆑
admin: VV can now display the contents of special byond lists like
filters, or client.images
admin: VV on images now displays the image in the header
admin: VV can now display filters and includes their type
/🆑
* VV Upgrades
---------
Co-authored-by: Emmett Gaines <ninjanomnom@gmail.com>
* [no gbp] Don't give every heretic mob mirror walk (#78949)
## About The Pull Request
Fixes#78942
Don't give every heretic mob mirror walk
Also restores their spaceproofing.
The causes of this were respectively:
- I didn't type out the full typepath.
- I forgot.
## Changelog
🆑
fix: "Mirror Walk" is once more the domain of the Maid in the Mirror
rather than "every heretic summon"
fix: Heretic mobs can once again survive space
/🆑
* [no gbp] Don't give every heretic mob mirror walk
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
* Manifest Rune/Capture the Flag no longer DNR you. Blocks suicides in CTF areas (#78957)
## About The Pull Request
You can return to your old body after playing CTF or being summoned as a
manifest rune cult ghost. This is done by slapping the temporary_body
component onto cult rune summons and CTF bodies. This also extends to
Medisim Shuttle knights.
This also blocks suicides from being performed in CTF areas. Ghosting
and "manually" suiciding is, of course, still an option.
## Why It's Good For The Game
There's no reason these two cases should lock you out of being revived.
They both also dust bodies on death or after their job is done, making
them a perfect fit for this component.
Blocking suicides ensures that all bodies are properly "cleaned up" by
the death dusting process. Gun suicides, for instance, would remove the
brain from the body and bypass cleanup. This not only prevents the user
from being returned to their old body, but likely has other unforeseen
problems that leaving a body behind might cause.
## Changelog
🆑 Rhials
qol: You can now return to your old body after being summoned by a
manifest rune.
qol: You can now return to your old body after dying in CTF.
qol: You can now return to your old body after dying in the Medisim
Shuttle battle area.
qol: You can no longer suicide in CTF areas, for integrity purposes.
/🆑
* Manifest Rune/Capture the Flag no longer DNR you. Blocks suicides in CTF areas
---------
Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
* Fixes Space Dragon Attacking (#78964)
Fixes#78953
## About The Pull Request
Basically the gist is that Space Dragon's special attack code was on
`AttackingTarget()` rather than whatever the hell simple animals
controlled by clients use (I didn't bother enough to look into the chain
to remember this). This was the complete wrong proc to use, and it NEVER
got executed. Anyways, we just hook into the signal for whatever the
simple animal proc is as well as clean up all the code, make everything
pretty, and most importantly:
MAKE THE DAMN CODE WORK
## Why It's Good For The Game
Either someone did not test their code at all, or some weird esoteric
change in the attack chain changed this somehow? I'm not sure when or
why this happened but it is guaranteed to be fixed now.
The code cleanup and tinkering I did means that it's gonna be about 10%
easier to port this over to a basic mob eventually (not doing a full
refactor when this shit is this broken, the code added here is modular
enough to the point where it's plug-n-play).
## Changelog
🆑
fix: Space Dragons can now, once again, tear down walls and eat corpses.
They also have regained their special damage modifier when attacking
mechs.
/🆑
* Fixes Space Dragon Attacking
---------
Co-authored-by: san7890 <the@san7890.com>
* Adds `on_mob_life` `SHOULD_CALL_PARENT`, fixes holy water metabolizing at double rate (#78932)
## About The Pull Request
- Fixes#78919
- Adds `SHOULD_CALL_PARENT` to reagent `on_mob_life`, fixes a few places
which didn't call parent
- Off the top of my head I remembered holy water purposefully didn't
call parent to get a static metabolism rate. However #78657 added a
parent call to holy water, meaning it's been metabolizing out twice,
incredibly fast. Fixes that.
## Why It's Good For The Game
Reagent parent is fairly important as it handles removing the reagent
from the mob.
## Changelog
🆑 Melbert
fix: Fixes Mauna Loa, Monover, Silibinin, Granibitaluri not exiting your
system on metabolism
fix: Fixes holy water exiting your system at double the rate on
metabolism
fix: Holy Water no longer spams cultists with big text every time, it's
much more tame now
/🆑
* Adds `on_mob_life` `SHOULD_CALL_PARENT`, fixes holy water metabolizing at double rate
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>