* Adds `UPSIDE_DOWN` movetype for negative gravity / makes Atrocinator affected by less things (#79785)
## About The Pull Request
Fixes#79764
I was going to tackle this issue by slamming `TRAIT_NO_SLIP_ALL` on
Atrocinator users and calling it a day, but like, that didn't feel
proper.
So I thought hey, we could just give them the flying movetype, even
though they technically aren't flying it means they're unaffected by
things that flying would make you unaffected by.
Nope, this means the mob technically "negates gravity", so no falling
and no feetsteps.
Let's try floating - this give us feetsteps but no falling upwards.
So instead of going back to square one, with `TRAIT_NO_SLIP_ALL`, I
decided to go for the more complex route of just adding a movetype.
Hence, move type `UPSIDE_DOWN`. This covers situations where a mob would
be "floating" above the ground, but still walking. ...Negative gravity.
This means overall the Atrociator acts more as you'd expect - you don't
slip on ice, you don't trigger bear traps or mouse traps, you can walk
over railings, unaffected by conveyor belts, etc.
## Why It's Good For The Game
Makes the Atrocinator a lot more consistent with how you'd expect for it
to work.
Admittedly it is a bit niche use of movetypes, but it can possibly be
expanded to more things in the future, who knows? I applied it to mobs
on meat spikes (even though they don't move), just for proof of concept.
## Changelog
🆑 Melbert
fix: Atrocinating mobs will now behave more as you'd expect. Meaning
they don't slip on wet patches, can't trigger bear traps / landmines /
mouse traps, ignore conveyors, and can walk over tables and railings.
fix: Floating mobs are unaffected by conveyor belts, acid (on the
ground), glass tables
fix: Floating mobs won't squish stuff like roaches anymore
fix: Fixes bear traps triggering on floating / flying mobs
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
* Adds `UPSIDE_DOWN` movetype for negative gravity / makes Atrocinator affected by less things
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
* Nukes radio.dmi, adds inhands for somewhat relevant items. (#79792)
## About The Pull Request
Third /icon/ cleansing splinter 1. Comments on commits say all it does
pretty much.

## Why It's Good For The Game
Inhand for walkietalkie was requested in the project, gets rid of some
usecases of old 'gangtool', headset splitoff requested by Fazzie.
Inhands reflecting the items they are supposed to represent is nice.
## Changelog
🆑
image: Following now have unique item sprites: syndicate war declaration
radio, curator and chief beacon's, chaplain beacon.
image: Following now have unique inhand sprites: radio, export scanner,
walkie-talkie, syndicate war declaration radio, curator and chief
beacon's, chaplain beacon.
/🆑
* Nukes radio.dmi, adds inhands for somewhat relevant items.
---------
Co-authored-by: YesterdaysPromise <122572637+YesterdaysPromise@users.noreply.github.com>
* Puts all traits in the globalvars file + CI Testing (#79642)
Fixes#76349
I didn't know that people needed to add any new traits to a global list
so they can be easily read in View Variables, and was pretty shocked to
find out many other people didn't know it was a thing. Let's make it a
thing by testing it using a new CI Python Linter to check this. But oh
no-

There were about 200+ missing traits. Alright, so let's do the
following:
* Move trait defines to their own dedicated folder in the `_DEFINES`
folder.
* Split up the traits mega-file into different files, for better
organization. One for the macros, one for the sources, and a few for the
"trait declarations"
* Run the linter a load of times and add everything to the globalvars
file, removing anything that's no longer used and figuring out where the
best categorization of it is. also minor code improvements. also rename
all of the ones that look weird. also fix list indentations
* Also alphabetize the lists because it's easy
* Move everything to a new `traits_by_type` list, while keeping the
admin one the way it is for the time being while we figure out a better
way to show that list to admins.
* Profit
Mapping trait injectors will now work for any type of trait. You
shouldn't add any trait via this injector though, but you're no longer
limited to coders remembering to add it to that critical list you
needed.
Lays the framework for a better view variables experience. This work is
too lengthy to presently do, but hopefully we can get this done sooner
rather than later. we will need a code-accessible way to view these
traits for such a framework to be implemented, so let's just do that.
Future steps are to break down the mega-declarations file into a folder
full of separate files by typepath, but that requires a lot of auditing.
Does need to happen one day though, there's a lot of mob traits mingled
with datum traits and auuugh we gotta do this later this PR is already
massive.
there's probably ways to game this but this catches _my_ mistakes so
good luck to everyone else (it should work for 99% of everyone)
Nothing applicable to players. However, to mappers, the mapping trait
injector should always be able to add any kind of trait (which is rather
good for the times when you need it).
* Update tgstation.dme
* Update _traits.dm
* Comment these out for now
---------
Co-authored-by: san7890 <the@san7890.com>
* More code compression for reagent holder (#79796)
## About The Pull Request
Part 2 of #79686 where we trim down the size of `holder.dm` even further
and in the process give some procs more advanced features as they get
merged with their counterparts.
**1. Removes & merges `get_multiple_reagent_amounts()` proc with
`get_reagent_amount()`**
The proc `get_multiple_reagent_amounts()` was only used by bio generator
and 1 other item with its only use being finding the sum of all reagents
present in the list returned by
`typesof(datum/reagent/consumable/nutrient)`. Currently the approach is
very inefficient because.
- `typesof()` is an expensive call which returns a long list of reagents
- `get_multiple_reagent_amounts()` would then use 2 nested for loops.
One to loop over every reagent in this holder & another inner for loop
to loop over every reagent returned by `typesof()` operator so the time
complexity of this proc is overall multiplicative which in lamen terms
means "Bad"
We can replicate the same behaviour of `typesof()` by using the
`type2parent()` proc and 1 more direct type check to get the exact same
behaviour but with much faster results, therefore reducing overall code
**2. Removes & merges `get_reagent()` proc with `has_reagent()`**
The proc `has_reagent()` is way more advanced than `get_reagent()` with
arguments requesting for a specific amount, metabolization and now even
has a new argument i.e. `chemical flag`. `has_reagent()` has always
returned the reagent reference directly and not a simple TRUE/FALSE so
it is a perfect replacement for `get_reagent()`, therefore reducing
overall code
**3. Removes & merges `has_chemical_flag()` proc with `has_reagent()`**
The proc `has_reagent()` can now look for a specific reagent with a
specific chemical flag as well as mentioned above thus it can replace
`has_chemical_flag()` therefore reducing overall code
## Changelog
🆑
code: Removes & merges `get_multiple_reagent_amounts()` proc with
`get_reagent_amount()` inside reagent holder
code: Removes & merges `get_reagent()` proc with `has_reagent()` inside
reagent holder
code: Removes & merges `has_chemical_flag()` proc with `has_reagent()`
inside reagent holder
refactor: Reagent holder code has been further compressed. Report bugs
on github
/🆑
* More code compression for reagent holder
* Update hemophage_organs.dm
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Refactor icemoon wolves into basic mobs and add taming + pack behavior (#79736)
## About The Pull Request
Ports icemoon wolves over to the basic mob framework with a bit of extra
stuff:
- Wolves call for help when attacked within a decently large radius.
Because you know, pack animals.
- Wolves can now be tamed with a slab of meat
- When tamed, wolves can be ridden like goliath mounts. Ride wolf, life
good. Pretend you're playing ARK and start shivering to death in thatch
huts for that High Roleplay experience.
- Tamed wolves have access to a bunch of pet commands (following, point
fetching, point attacking, play dead, etc) and will also defend their
owners vehemently if they're attacked.
You can probably tame multiple if you wanted to.
## Why It's Good For The Game
What part about riding wolves isn't entertaining? I don't really play
/tg/ that much so I can't argue too much about the balance implications
this might pose, but it's undoubtedly a stupid little gimmick and is
likely to be used by bored assistants and miners with too much time on
their hands.
Especially robust individuals will probably find a million things to do
with a basic mob capable of fetching, attacking on command and generally
being able to defend themselves decently well.
## Changelog
🆑 yooriss
refactor: Icemoon wolves now use the basic mob framework and should act
more intelligently, defending their pack.
add: Icemoon wolves can be tamed with slabs of meat and can be ridden as
mounts once friendly. Being rather large dogs, they also have access to
most of the pet commands you'd expect, such as fetching things, and
violently mauling people their owners point at.
/🆑
---------
Co-authored-by: san7890 <the@ san7890.com>
* Refactor icemoon wolves into basic mobs and add taming + pack behavior
---------
Co-authored-by: Ephemeralis <Ephemeralis@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
* More standardization for ghost notifications (READY) (#79596)
## About The Pull Request
I'm still not satisfied with how ghost notifications work. This gives
every notification with a source (99% of all notifications, in other
words) a link to jump/orbit. Currently, notifications with "play"
interactions would only get the interact link, so jumping to the source
was pretty annoying.
It removes posting the entire message in the alert tooltip, as some got
pretty lengthy and it didn't seem to fit. To replace this, they will
always use headers
After:



NOTIFY_JUMP and NOTIFY_ORBIT have been merged, since the only difference
seems to be whether it's a turf. The result shaves off some redundant
lines of code, since most-every usage of notify_ghosts uses
NOTIFY_ORBIT.
## Why It's Good For The Game
More standardization for the ghost notification system. Adds a few alert
headers that never had them. All in all, makes it easier for creators to
throw alerts at ghosts
## Changelog
🆑
qol: Nearly every ghost alert should now feature a "VIEW" button, even
those with click interaction.
del: Ghost alerts no longer show the entire message in the tooltip,
instead have been replaced with titles.
/🆑
* More standardization for ghost notifications (READY)
* Modular
* Update outpost_of_cogs.dm
---------
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Splits placeontop proc (#79702)
## About The Pull Request
I find the proc hard to read honestly. There's no reason we can't split
this into two functions - the secondary functionality is used only once,
in reader.dmm.
## Why It's Good For The Game
Code improvement
Glorious snake case
## Changelog
N/A nothing player facing
---------
Co-authored-by: san7890 <34697715+san7890@ users.noreply.github.com>
* Splits placeontop proc
* Update brass_spreader.dm
---------
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: san7890 <34697715+san7890@ users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* adds a muzzled config since we never had one and this mask has used a digi one for months
* this was part of that last commit oops
* give the scarf the new muzzle config
* adds compatiability for neck items to check for muzzled variations
* update face scarf to have muzzle version and use the not-obsolete toggle component
* fix the icon state flag check being backwards
* moves the face scarf .dmis into their own little folder
* [NO GBP] Debug chem synthesizer works & related code cleanup (#79616)
## About The Pull Request
1. Fixes#79610
It works and the UI has also been updated to match that of chem
dispenser and it displays an input list for adding reagents now

2. Created a common component for chem dispenser, portable chem
dispenser & debug chem synthesizer to share in the UI code.
3. Moved portable chem mixer to modules/reagents/machinery folder to
group them under the chemistry category
## Changelog
🆑
fix: debug chem synthesizer works again. cleaned up chem dispenser,
portable chem dispenser & debug chem synthesizer ui code
qol: ui for displaying beaker reagents for debug chem synthesizer has
been improved. Now displays input list for adding reagents
/🆑
* [NO GBP] Debug chem synthesizer works & related code cleanup
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
* Updates examine text for Nukie & ERT defibs (#79806)
## About The Pull Request
Description of these two items tells you how to attack people with them,
but it's outdated and tells you to use disarm or aggressive intent.
Since those aren't part of the game any more, I changed it so it tells
you to use combat mode instead.
Also a minor rewording both to stop the word 'combat' being used twice
in quick succession to mean different things (looks awkward), and to
make it technically more correct (old description implies you need
combat mode on to revive someone in the middle of a fight)
## Why It's Good For The Game
Intents aren't in the game so mini tutorials like this shouldn't refer
to them.
## Changelog
🆑
spellcheck: Nukie and ERT defibrillators now reference combat mode
instead of intents.
/🆑
* Updates examine text for Nukie & ERT defibs
---------
Co-authored-by: Da Cool Boss <142358580+DaCoolBoss@users.noreply.github.com>
* Paint cans actually hold an appreciable amount of paint (#79791)
## About The Pull Request
Paint can total uses 10 => 200
## Why It's Good For The Game
Paint cans used to be infinite until it was discovered that was actually
a bug and it was fixed back in May
What wasn't actually changed was how much paint is supposed to be in the
can.
Cans only hold 10 charges of paint, and lack an apparent way to refill
them (as far as I know), which is enough paint to do almost nothing
with.
Given crayons and spraycans hold 30 charges, 200 seems a lot more
reasonable for a big old can of paint that can only colour things and is
generally a lot bigger than spraycans (much less crayons)
## Changelog
🆑
balance: Paint cans hold 20x more paint than before, painters rejoice!
(Janitors cry more)
/🆑
* Paint cans actually hold an appreciable amount of paint
---------
Co-authored-by: YakumoChen <king_yoshi42@yahoo.com>
* Fixes some fried food exploits (#79789)
## About The Pull Request
I would've been content to leave these, but you guys just haaaad to
overdo it
- Plates now respect weight class of items on top
- Fried food now respect volume of existing items
## Why It's Good For The Game
These exploits are not intended and have potential and, if abused, can
severely detract from rounds.
## Changelog
🆑 Melbert
fix: Plates now respect the weight class of items on top.
fix: Fried items now respect existing volume cap.
fix: Smartfridges now don't accept bulky food items, good thing we have
none of those right guys?
/🆑
* Fixes some fried food exploits
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* [no gbp] fixes being unable to climb up onto unblocked spaces with a climbing hook (#79744)
## About The Pull Request
climbing hook (the thing in your internals box on icebox and other
multiz planetary maps if any)
should now allow you to climb through directional windows if they arent
blocking your direction on the target tile, and over railing
## Why It's Good For The Game
hooks should be easier to use
## Changelog
🆑
fix: you can climb over more stuff with a climbing hook
/🆑
* [no gbp] fixes being unable to climb up onto unblocked spaces with a climbing hook
---------
Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com>
* Code compression for reagent holder. Lowers plumbing reaction chamber tick usage (#79686)
## About The Pull Request
More code improvements for reagent holder. As you can see it removes a
lot more code than it adds so code savings are significant. This does
not touch on any floating point arithmetic, all that is behind us, this
focuses on removing redundant procs and merging existing procs to
achieve the same functionality so if you do see any changes in reagent
related behaviour it's not intentional and should be reported as a bug
here.
The following code changes can be summarized into points.
**1. Removes procs `get_master_reagent_id()` &
`get_master_reagent_name()`**
Both of these procs have the exact same functionality as
`get_master_reagent()` with the only exception of returning a different
value. Instead we can just call `get_master_reagent()` directly and
infer the name & type of it ourselves rather than creating a wrapper
proc to do it for us, therefore reducing overall code
**2. Removes & Merges `remove_all_type()` proc into `remove_reagent()`**
The proc `remove_all_type()` is highly inefficient, it first uses a for
loop to look for the reagent to remove & then it again calls
`remove_reagent()` on the reagent once it has found it. We can just
embed this functionality directly into `remove_reagent()` by simply
adding an additional parameter `include_subtypes`. This way the
operation is faster, and we reduce the code to get the job done. Also
now `remove_reagent()` will return the total volume of reagents removed
rather that a simple TRUE/FALSE
**3. Removes & Merges `trans_id_to()` proc into `trans_to()`**
Both these procs have the same job of transferring either a single
reagent or all reagents. `trans_id_to()` is a scaled down version of
`trans_to()` because
- It does not have any `method` var. This means if you want to transfer
a single reagent to a mob/organ or any other object it does not have the
functionality to expose the target to that transferred reagent.
- It does not have a `multiplier` var to scale reagent volumes
- It does not have code to deal with organs or stop reactions i.e. it
does not have the `no_react` var.
We can overcome all these short comings by simply adding an extra var
`target_id` to specify what specific reagent to transfer therefore
attaining the same functionality while keeping the benefits of
`trans_to()` proc therefore reducing overall code
**4. Lowers plumbing reaction chamber tick usage for balancing ph.**
Rather than invoking a while loop to balance ph it's much easier for the
player to simply make the reaction chamber wait for e.g. add a reagent
that will never come. This will make the chamber wait therefore giving
the reaction chamber ample time to correctly balance the ph and then
remove that reagent from the list therefore getting correct ph levels.
No need to create code hacks when the player can do it themselves so
the while loop has been removed
## Changelog
🆑
code: removed redundant procs `get_master_reagent_id()` &
`get_master_reagent_name()`
code: merged `remove_all_type()` proc with `remove_reagent()` now this
proc can perform both functions. `remove_reagent()` now returns the
total volume of reagents removed rather than a simple TRUE/FALSE.
code: merged `trans_id_to()` proc with `trans_to()` now this proc can
perform both functions
refactor: plumbing reaction chamber will now use only a single tick to
balance ph of a solution making it less efficient but more faster. Just
make the reaction chamber wait for longer periods of time to accurately
balance ph
refactor: reagent holder code has been condensed. Report any bugs on
GitHub
/🆑
* Code compression for reagent holder. Lowers plumbing reaction chamber tick usage
* Modular update
* Update alcohol_reagents.dm
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* CRAB-17 will round down the credit amount it steals (#79761)
## About The Pull Request
When stealing credits, the CRAB-17 takes a between 5 and 15 percent of
your current credit balance.
Due to how numbers work, this almost always ends up with a fractional
amount being taken (ie 10% of 1015 is 101.5)
There is, as far as I'm aware, no way to get rid of this fractional
amount, as you can only pull whole credits from your ID.
## Why It's Good For The Game
CRAB-17 will now take between 5 and 15 percent of your current credits,
rounded down.
No more 1/3 of a credit to stare at in abject horror.
## Changelog
🆑
fix: The CRAB-17 will now only take whole credits, as fractional credits
were found to be worth less.
🆑
* CRAB-17 will round down the credit amount it steals
---------
Co-authored-by: Shadow-Quill <44811257+Shadow-Quill@users.noreply.github.com>
* Big enough carrots get a chance to be turned into full-sized carrot swords instead of shivs (#79718)
## About The Pull Request
A funny little interaction I came up with while sitting in a toilet.
Since high potency carrots can be quite big, you could definetly cut
more than a shiv out of them. A sword, for example. A bit of reward for
making such a high-potency carrot in the first place.

## Why It's Good For The Game
Comedic purpose, and who knows, maybe someone will be a gimmick
botany-knight based on these?
## Changelog
🆑
add: Adds a chance that, when sharpened, a sufficiently potent carrot
will turn into a sword instead of a shiv.
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
Co-authored-by: carlarctg <53100513+carlarctg@ users.noreply.github.com>
* Big enough carrots get a chance to be turned into full-sized carrot swords instead of shivs
---------
Co-authored-by: YesterdaysPromise <122572637+YesterdaysPromise@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
Co-authored-by: carlarctg <53100513+carlarctg@ users.noreply.github.com>
* Makes the spelling of 'mjollnir' consistant and renames singularityhammer.dm to wizard_weapons.dm 2 (#79700)
## About The Pull Request
All the below copied from #79588
Does as the tin says and renames all instances of 'mjolnir' to
'mjollnir' . They are TECHNICALLY both correct but because 'mjolnir' was
only used for the spelling in game for the hammer itself and the icon
when worn on the back I decided on two l's. This also means I had to
change the icon name for the back sprite
If I'm missing any files with it spelt 'mjolnir' please tell me
While I was at it i also decided to change singularityhammer.dm to
wizard_weapons.dm because apparently the file is supposed to be where
wizard weapon are stored and having it be named after a single weapon is
confusing incase people add more weapons later on.
## Why It's Good For The Game
More consistent spelling.
Code wise it makes it more clear what the intended use for a file is
## Changelog
🆑
spellcheck: hopefully changed all instances of the word 'mjolnir' to
'mjollnir'
/🆑
* Makes the spelling of 'mjollnir' consistant and renames singularityhammer.dm to wizard_weapons.dm 2
---------
Co-authored-by: D4C-420 <75496851+D4C-420@users.noreply.github.com>
* TGUI Destructive Analyzer (#79572)
## About The Pull Request
I made this to help me move more towards my goals [laid out
here](https://hackmd.io/XLt5MoRvRxuhFbwtk4VAUA) which currently doesn't
have much interest.
This makes the Destructive Analyzer use a little neat TGUI menu instead
of its old HTML one. I also touch a lot of science stuff and a little
experimentor stuff, so let me explain a bit:
Old iterations of Science had different items that you can use to boost
nodes through deconstruction. This has been removed, and its only
feature is the auto-unlocking of nodes (that is; making them visible to
the R&D console). I thought that instead of keeping this deprecated code
around, I would rework it a little to make it clear what we actually use
it for (unhiding nodes).
All vars and procs that mentioned this have been renamed or reworked to
make more sense now.
Experimentor stuff shares a lot with the destructive analyzer, so I had
to mess with that a bit to keep its decayed corpse of deprecated code,
functional.
I also added context tips to the destructive analyzer, and added the
ability to AltClick to remove the inserted item. Removing items now also
plays a little sound because it was kinda lame.
Also, balloon alerts.
## Why It's Good For The Game
Moves a shitty machine to TGUI so it is slightly less shitty, now it's
more direct and compact with more player-feedback.
Helps me with a personal project and yea
### Video demonstration
I show off connecting the machine to R&D Servers, but I haven't changed
the behavior of that and the roundstart analyzers are connected to
servers by default.
https://github.com/tgstation/tgstation/assets/53777086/65295600-4fae-42d1-9bae-eccefe337a2b
## Changelog
🆑
refactor: Destructive Analyzers now have a TGUI menu.
/🆑
* TGUI Destructive Analyzer
* Modular
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Sleeping Carp grant scroll no longer says deflect with throw mode (#79656)
## About The Pull Request
https://github.com/tgstation/tgstation/pull/79517 changed sleeping carp
to use combat mode to deflect instead of throw mode, but didn't change
the grant scroll text to reflect. I doubt anyone reads that anyways.
* Sleeping Carp grant scroll no longer says deflect with throw mode
---------
Co-authored-by: 1393F <59183821+1393F@users.noreply.github.com>
* Pipe painting, spraycan preset colors (#79521)

## About The Pull Request
Made pipe painter properly paint pipe colors, work on pipe items, and
added the same functionality to regular spraycans.
Spraycans now have the color presets in UI for easier selection of the
valid pipe colors.
## Why It's Good For The Game
Bug fixing is good.
It was weird that spraycans couldn't paint pipes, but some other device
could.
Also custom spraycan color is too clunky, presets are nice for quick
spraycan color selection.
## Changelog
🆑
fix: fixed pipe painter not applying pipe color properly
qol: made spraycans work also as pipe painters
qol: spraycans now have basic color presets for quick selection
/🆑
* Pipe painting, spraycan preset colors
---------
Co-authored-by: Andrew <mt.forspam@gmail.com>
* Renames vars on pdas and removes ntnet_relays glob (#79595)
## About The Pull Request
- replaces the ntnet_relays global list with ``get_machines_by_type``
- renames ``transfer_access`` var on PDA to ``download_access`` &
``required_access`` to ``run_access`` to better describe what they do,
because on more than one ocassion I've confused myself with the two
terms and ended up doing something unintentional (see:
https://github.com/tgstation/tgstation/pull/74269)
## Why It's Good For The Game
Kills a useless global list and makes pda code a little less confusing.
## Changelog
Nothing player-facing.
* Renames vars on pdas and removes ntnet_relays glob
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
* Typo correction in maintenance_loot.dm (#79613)
## About The Pull Request
Fixes typos and grammar issues in the maintenance_loot file. Mostly
these are in item descriptions.
## Why It's Good For The Game
Improves those item descriptions.
## Changelog
🆑
spellcheck: Fixed typos in the examine text for the lead pipe &
lead-acid battery.
/🆑
* Typo correction in maintenance_loot.dm
---------
Co-authored-by: Da Cool Boss <142358580+DaCoolBoss@users.noreply.github.com>
* Fixes a small runtime due to copied memories (#79609)
## About The Pull Request
Copied memories (`/datum/memory/copy`) are stored in the same slot as
the type they copied it from (in this case,
`/datum/memory/key/account`), meaning this would runtime if someone with
a copied memory tried to change their bank account ID.
## Changelog
🆑 Melbert
fix: People with copied memories can modify their bank account ID as
normal.
/🆑
* Fixes a small runtime due to copied memories
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Adds garbage dumpster ruins (#79446)
## About The Pull Request
Adds 4 small space ruins. Each is a dumpster in space containing hostile
mobs to fight and items to bring back to the station. There's a
decommissioned garbage truck pulling each dumpster which acts as a
staging area before you take on the mobs inside.
All the fights are in cramped dark areas with full pressure, air is
breathable but sometimes has miasma in it so beware of getting sick. So
you can drop your space suit and put on armour, but PKAs won't fire at
full power and keeping a gas mask on is recommended.
Also all the dumpsters look the same from the outside so you gotta crawl
inside to know what's inside. And no you can't metagame it with mesons
either.
Comes in the following flavours:
Food Waste
Full of trash from kitchens, and food. Some of the food is still edible.
There's a lot of territorial rats. You can chop them up into meat if you
want more food. The big prize is a big vat of cooking oil.
Medical Waste
Spare organs, cyberorgans and almost a full set of old surgical gear.
There's a syndicate agent here up to no good and he has a GUN. The gun
blows up when the agent dies so you can't get it. There's a few corpses
of different species in bodybags and some spare corpse parts so you can
bring them back to the station and give them to the coroner. Also a
single use eyestealer in a safe (the cool way to do surgery) and a bug
from the old traitor objective that doesn't do jack but can probably
still get you thrown in perma.
Construction Garbage
Tools and construction materials here, including a cool hammer that fits
in a tool belt and can function as a crowbar. There's also a drug lab
with plenty of weird pills to eat, cigarettes to eat and an angry
russian drug dealer who will stab you if he sees you. He has a badass
lighter and a flamethrower you can take after you kill him. Setting fire
to things in here is not recommended because of all the welding fuel.
Mall Trash
Action figures, trading cards, Christmas crackers and other trash the
local mall tossed out. Also a mothman used to live here but he got eaten
by giant spiders so you can grab his stuff, including snacks and a
civilian modsuit with no mods (wow). You can cut through the webs to
kill the spiders or let them eat you too if you want.
## Why It's Good For The Game
More content for space explorers.
More variety to the potential dangers of space, now u can get sick and
die or get eaten by rats (this is hobo RP)
Better environmental storytelling. Now instead of players left asking
"what happens to the garbage when it goes into space" they can rest
assured that there's busted ass garbage trucks in space. All their
questions are answered.
Loot that encourages working with people on the station. Raw food for
the kitchen, rats for genetics, organs for the coroner, etc
## Changelog
🆑
add: 4 new space ruins
/🆑
* Adds garbage dumpster ruins
* Update belt.dmi
* Fixes Jacked Up LF/CRLF issuess
---------
Co-authored-by: DaCoolBoss <142358580+DaCoolBoss@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
* Fixing merge skew
* Icon reset
* Fixes nonmodular skyrat edits
* Update prim_fun.dmi
* Update mineral.dm
* These were updated within the lifetime of this pr
* Cuts down on unnecessary non-TGUI stuff (#79590)
## About The Pull Request
Removes INTERACT_MACHINE_SET_MACHINE on machines that don't use a
non-TGUI UI.
Removes set_machine from TGUI things that forgot to remove them
previously.
Decouples advanced camera consoles from UI procs since it doesn't
actually use one.
## Why It's Good For The Game
TGUI machines don't need to be using these procs and vars, and this
makes it more clear what does and doesn't use a TGUI menu from a glance.
I explain it a bit better
[here](https://hackmd.io/XLt5MoRvRxuhFbwtk4VAUA) if you're interested.
## Changelog
No player-facing changes.
* Cuts down on unnecessary non-TGUI stuff
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
* Targeting Datums Renamed (and global) (#79513)
## About The Pull Request
[Implements the backend required to make targeting datums
global](6901ead12e)
It's inconsistent with the rest of basic ai for these to have a high
degree of state, plus like, such a waste yaknow?
[Implements
GET_TARGETING_STRATEGY](d79c29134d)
Regexes used:
new.*(/datum/targetting_datum[^,(]*)\(*\)* -> GET_TARGETING_STRATEGY($1)
Renamed all instances of targetting to targeting (also targetting datum
-> targeting strategy)
I've used GET_TARGETING_STRATEGY at the source where the keys are
actually used, rather then in the listing. This works out just fine.
## Why It's Good For The Game
Not a misspelled name through the whole codebase, very slightly less
memory load for basically no downside (slight cpu cost maybe but not a
significant one.
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>
* Targeting Datums Renamed (and global)
* Update dogs.dm
* Modular
* Modular
* Modular
* Merge skew?
* Revert "Merge skew?"
This reverts commit 0889389ab5cb5c56655f1860d9173ba87efe9a22.
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* Changes to the lore of Knock (#79542)
## About The Pull Request
This PR renames Knock to Lock, and changes most of the knowledge gain
lore.
## Why It's Good For The Game
The Knock Lore, is based on the Knock Principle from Cultist Simulator,
with the path description being copied from the wiki. Many other
keywords and concepts are fully lifted from that game (Locksmith's
Secret, Mother Of Ants, etc). In my vision, if a heretic path has to be
based on a principle from cultist simulator, it should have its own
spin, and also, the knowledge gain texts should tell a story. For
example, Ash tells the story of a watchman burning down their city after
being betrayed, and Cosmic is a love story between a knowledge seeker
and a monster from the beyond.
So I have decided to reflavour Knock. I have changed the name to Lock,
so at least it would feel similar, just like how Blade is akin to Edge.
Many powers also block people or confuse their paths instead of opening
new ways, and thus, I feel a path whose name implies that it *both*
opens and closes would be more self describing.
I have changed most of its lore to be about the Locked Labyrinth, where
knowledge seekers willingly trap themselves and submit themselves to
servitude to find ultimate freedom by progressing through its trials.
These are the Stewards, who are basically workers in an infinite and
malicious hotel in their dreams. Consider them assistants if you will
(this wasn't my intention when I wrote the lore, but thinking about it
in retrospect, it honestly fits). In the implied story, the heretic
joins their ranks, but keeps getting closer to the more corrupt members,
along with parasitic spirits. Ultimately, they manage to open the
Labyrinth's core, letting out the Stewards, allowing them to manifest in
the forms of heretic summon creatures.
The side path spells and the lock knowledge ritual I have not touched,
they were fine. Some items have been renamed and repathed.
I have kept the distinctive sound effect for using the Grasp, as its
unique enough. Though if someone did have a nice sound effect for
turning a lock and added some filters, I would add it.
**DB Issue**
I have renamed the achievement's define to MEDAL_LOCK_ASCENSION but kept
the value as "Knock", as I don't know how trigger a change in the DB. If
this is a blocking change, I'll try to figure out how to make a
migration file.
**Future improvements**
I would also come back later with another PR, that hands out names to
the eldritch beings spawned by the portal, based on the Stewards in the
knowledge gain lore that I added, along with some new ones that fit the
theme, and some jokey ones like Minotaur.
## Changelog
🆑
spellcheck: Renamed Knock to Locks, and changed most of the flavor text
of knowledge gain, and renamed some items and knowledges from the path.
/🆑
* Changes to the lore of Knock
---------
Co-authored-by: Profakos <profakos@gmail.com>
* Examining circuit boards now displays their detailed names correctly if required (#79577)
This and every other issue related to examining circuit boards. Just
cleaned up a lot of code & everything works. yeah!!
* Examining circuit boards now displays their detailed names correctly if required
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
* Bandolier quality of life and minor buff (#79518)
Gives the bandolier the ability to quick gather, adds .357 ammo to the
items it can carry and increases the capacity from 18 to 24
The bandolier feels a bit underwhelming to use with how it currently is,
Giving it quick gather and a higher carry capacity will make it worth
the belt slot, Also carrying .357 on it for a revolver is cool.
* Bandolier quality of life and minor buff
---------
Co-authored-by: starrm4nn <139372157+starrm4nn@users.noreply.github.com>
* Plonts takke2 (#79484)
## About The Pull Request
Okay; Take two at this ~~because I totally didn't delete my sprites and
set myself back when all I had to do was fix a few merge issues and
instead decided to entangle myself in adding another plant.~~
This PR aims to add THREE new plants; Pepper-Corn, Saltcane and
Butterbeans.
Peppercorn can be ground for black pepper.
Saltcane can be ground for salt or dried into a seaweed sheet
replacement.
Butterbeans can be pressed into a small slice of butter, or ground for a
small amount of milk/cream and fermented for yoghurt.
I have also added fermentation of Soybeans to produce soysauce... since
that's literally how authentic soysauce is made.
## Why It's Good For The Game
I personally feel this will be good for the game as it means the kitchen
can rely on their botanists to produce higher quality ingredients and
don't have to harass other places or hemorraghe money to make good food
for the crew. Easier access to condiments allows for easier production
of a varied amount of food.
* Plonts takke2
---------
Co-authored-by: xXPawnStarrXx <53197594+xXPawnStarrXx@users.noreply.github.com>
* Adds engi improvised weapon - rebar crossbow + Engi Exclusive Tot Shop Variant (#78777)
<!-- 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

Engi now has access to a Half Life 2 Inspired rebar crossbow! Made of
rods, wire, and an inducer, it shoots sharpened iron rods at a high
velocity. High damage and good embed chance, but requires you to reload
every shot which requires you to stand still for three seconds to pull
the string back. You can also Use a wrench on it to force it to store
more rods (read: more than one), but risks it exploding and shooting you
instead.
The syndicate variant, avaliable to traitor engis, can fire three rounds
before needing a reload, and features a scope and better armor piercing
ammpo, but costs 10TC. I see it as a sidegrade to the revolver - quieter
and has much more widespread ammuniton, but holds less ammo and doesnt
have the same burst stopping power. And, to those concerned about the
balance of a non-traitor with this item - the AP ammo can only be made
by the traitor who bought it, and anyone else has to use normal ammo.
GUN STAT JUNK
Normal one has 60% embed chance and does 40 damage (against unarmored
targetd), but requires you to wait at least 3 seconds not moving to pull
the string back. Good alpha strike but not sustainable in a long fight.
Its akin to a pipegun.
Lacks any AP qualities besides piercing a jumpsuit, because any wound
chance it has is due to a bare skin bonus. Generally not a great weapon
to fight sec with.
Syndie version is generally the above but better. Takes less to pull the
string back, slightly higher damage, better fire rate, etc. Doesnt fare
well against any armor thats equivalent to sec gear or better due to
most having low (relatively) AP and wound chance, but good bare wound
bonus.
STATS TLDR: Its good against unarmored chumps and greyshirts but anyone
in armor that protects against bullets will kick your teeth in.
Also, Ammo is crafted from an iron rod. I wanted to have it just fire
rods as is, but theyre stacked items which you cant define projectiles
or ammo from.
## Why It's Good For The Game
I've always felt engi, for as big of a department as it is, is lacking
in the "fun weapons" area. Sci has mechs and xenobio, med has chem nades
and syringe guns, and cargo has anything the QM will buy - but other
than the flamer and shocked doors, engi doesnt have much. Thats why I
made this pr. it was originally just a traitor item, as they lacked many
traitor items in their shop, but I felt like a worse, bootleg version
would suit them.
## 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. -->
🆑
add: Enginenering rebar crossbows + tot kit
add: Added a bunch of ammos and crafting junk to make the ammo exist
image: added icond for all the above
/🆑
<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@ gmail.com>
* Adds engi improvised weapon - rebar crossbow + Engi Exclusive Tot Shop Variant
---------
Co-authored-by: KingkumaArt <69398298+KingkumaArt@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@ gmail.com>
* Flightpotion/health analyzer balance tweak (#79396)
## About The Pull Request
I was asked by a maintainer to split this off from my other PR (#79360),
so here it is. Basically, health analyzers are hard-coded to list you as
a mutant if you have wings from a flightpotion. This only applies to
flightpotion wings; no other organ, internal or external, not even moth
wings, work in the same way. So this PR just removes that check for
consistency.
I'd also like to note that I'm not opposed to the flightpotion being
made to _actually_ change your species again, as long as someone else
does the work. In fact, if someone were to do that this change would
still make just as much if not more sense.
## Why It's Good For The Game
As far as I can tell, there is no reason for this check to exist. At one
point, the flight potion did actually change your species, and it seems
like this check is just an old, unneeded relic of that. I'm not aware
for any balance reason for this check, unlike the hulk mutation.
Although you can argue that policy lists people with angel wings as
being nonhuman, that is specifically because the health analyzer lists
them as mutants, so it makes no sense for health analyzers to do so
because of policy.
## Changelog
🆑
balance: Flightpotion wings will no longer make health analyzers list
you as nonhuman.
/🆑
* Flightpotion/health analyzer balance tweak
---------
Co-authored-by: GPeckman <21979502+GPeckman@users.noreply.github.com>
* Adds wibbles to certain anomalous entities (#79549)
## About The Pull Request
Adds wibble animation to portals, some anomalies, and bluespace rifts.
https://github.com/tgstation/tgstation/assets/51863163/9355dc53-590e-4558-82a3-15145829ce16
## Why It's Good For The Game
It looks kinda cool.
Helps cement these as anomalous, wacky things that don't necessarily fit
in our plane of existence.
## Changelog
🆑 Melbert
add: Anomalies, portals, and bluespace rifts will now wibble a bit.
/🆑
* Adds wibbles to certain anomalous entities
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Locker deconstruction message spellcheck (#79512)
## About The Pull Request
Fixes a couple typos when deconstructing lockers.
## Why It's Good For The Game
Better spelling, better game.
## Changelog
🆑 Bumtickley00
spellcheck: You no longer hear weaponelding when deconstructing a
closet.
/🆑
Co-authored-by: bumtickley00 <pebis@ lol.com>
* Locker deconstruction message spellcheck
---------
Co-authored-by: Jay <19880843+AdmiralPancakes1@users.noreply.github.com>
Co-authored-by: bumtickley00 <pebis@ lol.com>
* Fix nuclear operative induction implants (#79554)
## About The Pull Request
Fixes#79547#78597 broke induction implants by replacing the "has antag datum" check
with a "does not have a fake antag datum" check which passes on a null
case. I added an `isnull()` check to cover this.
The introduced `antag_flags` var was by default set to
`FLAG_FAKE_ANTAG`, presumably in error as the only antag datums to
override this are ERT and Valentines and they just set it to
`FLAG_FAKE_ANTAG` anyways. This also means the induction implants ONLY
worked on non-antags and anybody with any antag datum would fail the
implant. I changed the default to `NONE`. This may have some knock-on
effects as `is_special_character()` was returning `FALSE` with any antag
datum (unless allow_fake_antags was passed) but no special role which
this also fixes.
## Why It's Good For The Game
Non-antags can no longer self-antag their way onto a nuclear operative
team and antags can now antag their way onto a nuclear operative team.
## Changelog
🆑
fix: Nuclear operative induction implants now work correctly on
antagonists and fail on non-antagonists
/🆑
* Fix nuclear operative induction implants
---------
Co-authored-by: Isratosh <Isratosh@hotmail.com>
* Being drunk gives a chance to harm yourself when working out (#79548)
## About The Pull Request
Working out when sufficiently drunk (around the amount that drunk
resilience begins to heal you) now has a scaling chance to cause you to
fail and harm yourself (similar to how clumsy works) when using an
exercise machine
None of these values are final and I'm open to making the failure it
more severe (bone wounds)
## Why It's Good For The Game
Partly cause its funny, partly cause realism, really cause I felt like
expanding on interactions for the exercise equipment
## Changelog
🆑
add: Being sufficiently drunk now has a chance to cause working out to
fail and harm you
/🆑
* Being drunk gives a chance to harm yourself when working out
---------
Co-authored-by: D4C-420 <75496851+D4C-420@users.noreply.github.com>
* Fixes Shaving Beards + Mirror Code Improvement (#79529)
## About The Pull Request
Fixes#79519
Basically we did a lot of assumptions that we really shouldn't do in the
whole magical mirror framework (like having a boolean value for magical
mirrors, what?). Anyways, I just made the UX experience a lot better
when it came to bearded persons with feminine physiques to easily shave
off their beard with an additional confirmatory prompt + details as well
as keeping the nature of the magical mirror (giving you a swagadocious
beard due to magic™️) intact.
## Why It's Good For The Game
There was a lot of convoluted code that skipped through the quality
filter checks (it was me i think) so let's both make the code far easier
to grasp as well as ensure that people who legitimately acquire beards
and wish to keep them, keep them.
We were also doing some FUCK shit on attack_hand and the like
(overriding a FALSE return signal to return TRUE is not what we should
be doing there)- so that's also cleaned up.
## Changelog
🆑
fix: Both magic mirrors and regular mirrors are far better at respecting
the choice of the beard you wish to wear (within reason, of course).
/🆑
* Fixes Shaving Beards + Mirror Code Improvement
* Update mirror.dm
---------
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Adds a sleeve of tiling colors for several holidays. (#79188)
## About The Pull Request
Inspired by #79108. This concerns Christmas, many national holidays and
a few gimmicky ones where it'd make sense.
Oh, yeah, I've also added "Sacrebleu" to the list of possible station
prefixes for the Bastille day, since "Merde" is already there.
<details>
<summary>some screenshots (got tired of restarting the server over and
over halfway through)</summary>
### St. Patrick (Ireland) :

### Bastille Day (France) :

### Waitangi Day (Union Jack colors, New Zealand) :
**No, it isn't the french flag again, it's the tram tiles that always
display the pattern in vertical stripes...**

### Christmas (Before I realized it looks like the italian flag so I've
removed the white) :

</details>
## Why It's Good For The Game
Implemeting a smidge of festivity and/or celebration to several
holidays. Open to suggestions and thoughts.
## Changelog
🆑
image: Several holidays now have themed floor and tram tiling.
/🆑
* Adds a sleeve of tiling colors for several holidays.
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>