Skip to content

Commit

Permalink
Batch of TG PRs 11/14 (#4649)
Browse files Browse the repository at this point in the history
* fixes borgs linking to ais in mechs cards and modsuits (#87737)

* Automatic changelog for PR #87737 [ci skip]

* Living Flesh limbs won't try to grab underfloor objects (#87736)

There were checks in living limbs that were checking the wrong thing, at
least one of which was introduced by a feature change in a PR I merged
but didn't notice.
Notably:
- We were checking if the person with the limb was invisible, not the
thing they were trying to touch.
- We were checking if the person with the limb was anchored, not the
thing they were trying to grab.

Now your arm will no longer reach out and grab wires that are under the
floor.

Additionally to this:
- I made all of the output say "Your left arm" or "Your left leg"
instead of "Your flesh left leg" because it sounded stupid.
- I removed an unused argument from `can_be_pulled` because it was
confusing me when I looked at the proc.
- I reworded some of the user feedback messages because "the thing
pretending to be your left arm feels funny" just isn't very evocative.

The diff is long because I reversed the order of arm/leg operations
because the leg block is much smaller :clueless:

Fixes bug.
I like it more.

:cl:
fix: Living Limbs no longer try to grab things that are under the floor.
spellcheck: Living Limb feedback messages now don't redundantly specify
that they are flesh arms.
/:cl:

---------

Co-authored-by: Ghom <[email protected]>

* Automatic changelog for PR #87736 [ci skip]

* Fix oil slime making vegetable oil instead of corn oil (#87730)

Fixes bug caused by
https://github.com/tgstation/tgstation/commit/b1c5e5e0f6a1edf58b49b238af7d3094da76c69b#diff-aedb81aab354c31e90007bd0ad4e8babf347ac7d6003c3b01da14021ff5a10f4R387

The wiki and code prior both say oil slimes should make corn oil, but
they currently make vegetable oil. Since corn oil is needed for
nitroglycerin and oil slimes are explosive-centric, it makes sense they
should be making corn oil.
Fixes: #81036
:cl:
fix: Fixes oil slimes making vegetable oil instead of corn oil
/:cl:

* Automatic changelog for PR #87730 [ci skip]

* Moved the big slapping parts from the misc section to weapons (#87637)

* fix blade ascension not giving you the ring of blades (#87744)

fix blade ascension not giving you the ring of blades
Bugfix
Closes https://github.com/tgstation/tgstation/issues/87344
Closes https://github.com/tgstation/tgstation/issues/85635
:cl:
fix: fix blade ascension not giving you the ring of blades
/:cl:

* Automatic changelog for PR #87744 [ci skip]

* Fixed fishing rod duping with poly belts and shapeshift spells. (#87706)

It turns out the "shapeshifted from spell" status ejects everything
inside the shapeshifted mob when removed. That's been causing a little
issue with the fishing rod from the profound_fisher component, which a
few mobs have. This PR fixes just that.

![immagine](https://github.com/user-attachments/assets/b664ffa6-567f-4332-b7dc-a5d2badb43d3)

![immagine](https://github.com/user-attachments/assets/4c453f91-2852-40c0-8f54-c5d66f28fdb1)

:cl:
fix: Fixed fishing rod duping with poly belts and shapeshift spells.
spellcheck: Fixed a small typo when examining fishing rods.
/:cl:

* Automatic changelog for PR #87706 [ci skip]

* Chem master validates selected container in UI (#87780)

* Automatic changelog for PR #87780 [ci skip]

* fixes missing icons in abductor console (#87759)

grabs the icon for the item correctly. also typescripts the interface
because blessed type safety would've prevented it being missing in the
first place. and clears some random deprecations

pretty icons 👍
loading icons 👎

![image](https://github.com/user-attachments/assets/ec524a52-fff5-4c67-b3fb-88fbfd5988af)

:cl:
fix: the abductor console now correctly loads images of equipment
/:cl:

closes #87565

* Add unit test tag to your PR title (#87757)

You can now add `unit test` anywhere in your PR title to specify if you
are adding/modifying unit tests for your code. It's worth 6 GBP (It
Always has and wasn't changed here)

For when you want some extra GBP for your unit tests that sometimes go
un-noticed by maintainer's when reviewing large changes. It will
encourage people to write unit tests so they can get the extra points

N/A
/:cl:

* Add `TRAIT_EVIL` to admin tooling (#87749)

Let's admins add/remove `TRAIT_EVIL` from mobs.

Useful for debugging.

:cl:
admin: Admins can now add/remove TRAIT_EVIL from mobs.
/:cl:

* Use native BYOND `isnan` and `isinf` for math defines (#87748)

`// Remove these once we have Byond implementation.`

Well guess what we have now?

Altho sadly we still lack a native `isfinite`, so we still use a define
for that.

Native BYOND impls have better performance usually, due to them
compiling down to instructions, avoiding proc overhead.

No user-facing changes.

* [NO GBP] Fixes wings and jetpacks sometimes preventing you from opening doors (#87741)

I hate this timeline. What title says, makes jetpacks and wings allow
you to bump into things you're moving into.

This feels awful and requires you to stop pressing movement keys for a
moment before resuming movement to get out of the "stuck" state

:cl:
fix: Fixed wings and jetpacks sometimes preventing you from opening
doors
/:cl:

* Drinking Glass sprite updates (#87756)

This was meant to be just fixing the missing pixel... then it turned to
redoing all the glasses in all the basic sprites so they'd match... then
redoing sprites that were outdated...
And THEN I realized that drinking glasses can be using the same
auto-sprite system beakers have and oh man it's spiraling.

As for the (hopefully) full list of changes:
- Removes all `glass_[color]` icons. Any drink that fell under these
will now use the fill_icon and their reagent color. As such, a lot of
reagent colors have been tweaked for readability/realism/lemons don't
have red juice what the hell man
(Some colors shown are outdated. It is very annoying to tweak these. I
don't know how to in-game, if I even can. Relaunching several times is
painful.)

![image](https://github.com/user-attachments/assets/7edae6b4-13ec-4d1e-827c-fb7da1b2013a)

- Resprites the base `glass_empty`; now it is very visibly empty. The
overlay being slightly transparent actually works pretty well with this.
(Old / New)

![image](https://github.com/user-attachments/assets/e262c510-93d7-44b0-b4cc-cf498362b05b)

- Full resprite of Curaçao (now it's actually its beautiful blue instead
of gray)

![image](https://github.com/user-attachments/assets/3447c226-8f78-4fa3-bb55-4cb223a7e991)

- Minor resprites Beer/Green Beer/Iced Beer/Ale
(Yes, Beer/Green Beer have little animated bubbles)

![dreamseeker_Z1U2qBxRlx](https://github.com/user-attachments/assets/43903b24-2053-4571-b17b-f3ad80fa4150)

![image](https://github.com/user-attachments/assets/25327706-3207-4d3f-9ea8-ead29d3a0db0)
- Minor resprite of Monkey Energy
(It's animated now too but otherwise about the same sprite)

![dreammaker_lSqopANAXX](https://github.com/user-attachments/assets/7f797080-ae16-42c3-a1f1-e769506e31fd)

- Minor resprites to Pina Olivida, Banana Juice, Lemon Juice, Carrot
Juice - mostly just color tweaks so that they look more believable and
the banana juice is less green
- Fixes small nits in the sodas so that they are all consistent
Sprite maintenance and (hopefully) improvements - we've got a lot of
drinks in the Bars and the base foundation of that whole system deserves
a bit of love as well
:cl:
image: redid most basic drinking glass sprites, and moved several drinks
to use the same color system as beakers. Please bug report any incorrect
colored drinks or juices!
/:cl:

* Update README.md of unit tests folder for VS code support (#87758)

Turns out using dream daemon isn't the only way to run unit tests.

You can do it from VS code itself & can see the output of each test in
the fancy chat window.
![Screenshot
(448)](https://github.com/user-attachments/assets/33aca6b5-3414-4560-9cc4-dd90fe80e2d1)

With the added advantage of using your debugger to step through each
line of code this should be the preferred way so I've updated the read
me file of the unit tests folder to specify that

You can also check the runtimes log in your game to see the output of
each unit test

:cl:
N/A
/:cl:

* Automatic changelog for PR #87759 [ci skip]

* Automatic changelog for PR #87749 [ci skip]

* Automatic changelog for PR #87741 [ci skip]

* Automatic changelog for PR #87756 [ci skip]

* the glove sounds are now only on some gloves [no gbp] (#87489)

mistakes were made
god it's horrible, not only is it happening way too often because it's
every glove, but also it doesn't fit any other glove other than insuls
really, maybe nitriles but gosh just get rid of it for now, maybe later
I will make a better sound for other gloves.
:cl: grungussuss
sound: only insulated,nitrile, enhanced retrieval, latex, boxing,
improvised gripper gloves have an equip sound
/:cl:

* Automatic changelog for PR #87489 [ci skip]

* hunting behaviors no longer share a cooldown (#87670)

all hunting subtrees were sharing a singular cooldown. this makes it so
each subtree has its own cooldown

fixes hunting subtree cooldowns affecting other subtrees.

:cl:
/:cl:

* [NO GBP] Renames mob/camera to mob/eye and makes everything follow suit (#87684)

Clarity and consistency regarding DM's systems.
Internally, `eye` is used for anything that controls the client's view.

![image](https://github.com/user-attachments/assets/7d1291e1-7a6a-4736-a14b-97834e89846f)
How `eye` is used in DM is consistent with how we use the term, so I
figured this would add clarity.

Being named mob/camera also makes it unclear exactly what it's doing.
The name implies that it would function similar to how mob/camera/ai_eye
does, but most of the time it's only used as... an eye.

My ulterior reason for this PR is that I want to clean up
mob/camera/ai_eye and it's subtypes after this.

:cl:
server: mob/camera has been renamed to mob/eye, which may break
downstreams
/:cl:

---------

Co-authored-by: Ghom <[email protected]>

* Automatic changelog for PR #87684 [ci skip]

* Clarify locations for getting started in README (#87739)

This is a `README.md` update to more efficiently point potential
contributors to the appropriate documentation for configuring their dev
environment.

It is typically best practice to make it easy for developers to quickly
contribute a change to a project by making things as clear as possible.

* [NO-GBP] Fixes a minor fuckup that made cigarettes contain up to double the intended amount of nicotine (#87733)

See name, also fixes them not being injectable

Sorry guys, this is my fault.

Fixes a bug that was brought upon us when I thought 500 cigarettes was
funny

:cl:
fix: Cigarettes can be injected again and have the right amount of
nicotine
/:cl:

---------

Co-authored-by: Fikou <[email protected]>

* Automatic changelog for PR #87733 [ci skip]

* Teleporting while buckled to something will take you with it (#87725)

closes #35872 (this bug is 6+ years old)

`/proc/do_teleport(...)` now has extra checks for atoms with buckled
mobs attempting to pass through it, assuring that they also pass through
with the vehicle

`/atom/movable/proc/is_buckle_possible(...)` will skip density checks if
the bucklable and the target share the same tile, because at that point
it doesn't really matter (it also interfered with density checks when
teleporting)

![fucked-up-dog-geeble](https://github.com/user-attachments/assets/6ef814c2-d8f2-48fc-82a3-98517bf6a492)

:cl:
fix: Teleporting while buckled to something now works as expected
fix: You can buckle to anything if you share the same tile (cause at
that point it doesn't matter if there's a wall, right?)
/:cl:

* Automatic changelog for PR #87725 [ci skip]

* you can loosen straps of a sec helmet to show hair (#87533)

title
gives more customization options for security players
:cl: grungussuss
qol: security helmet straps can be loosened to show hair
/:cl:

---------

Co-authored-by: Fikou <[email protected]>

* Automatic changelog for PR #87533 [ci skip]

* Fix issues when creating Discord Discussions on PRs with dummy long titles (#87768)

* Blob/Blob minion say logging (#87767)

The `/datum/component/blob_minion` component now properly logs spoken
messages before relaying them.

![image](https://github.com/user-attachments/assets/f89b3e61-379c-4851-a571-fc31bf8a1ddc)

Radical.

Closes #86904.
:cl: Rhials
fix: Blob Overmind/Minion/Blobbernaut speech is now logged. Beware.
/:cl:

* Automatic changelog for PR #87767 [ci skip]

* SM sliver dusts fishing hooks (#87784)

- Fixes #87514

:cl:
fix: Super matter sliver dusts fishing hooks & cannot be picked up by
them
/:cl:

* Automatic changelog for PR #87784 [ci skip]

* Abstract nullrods cannot burn/melt. Monk staff fixes (#87775)

* Automatic changelog for PR #87775 [ci skip]

* Losing malf no longer wipes nonmalf abilities (#87762)

Just a small thing I noticed whilst looking into some other malf related
stuff.

Unrelated, the silicon code is so horrible but I can't be bothered
rewriting it. So have this small fix

Fixes a small nuisance nobody even noticed. Probably

:cl:
fix: Losing malf no longer wipes nonmalf AI abilities
/:cl:

* Automatic changelog for PR #87762 [ci skip]

* Refactors for grinding & juicing (#87735)

- Grinding & juicing are now recursive operations (grind the item & all
its contents) not just for reagent grinder but also for mortar pedestal
& plumbing grinder so you can get all them juices
- Fixes #87719. Plumbing grinder won't destroy slime extracts after
grinding
- Mortar pedestal now grinds & juices more items since it correctly
checks if that object has more reagents to offer
- Reagent grinder, plumbing grinder & mortar pedestal now respect
`blend_requirements()` so you get consistent behaviour across them

:cl:
fix: mortar pedestal now grinds & juices items that previously could not
be processed
fix: plumbing grinder won't destroy slime extracts after grinding
refactor: grinding & juicing code has been refactored overall. Please
report bugs on github
/:cl:

* Automatic changelog for PR #87735 [ci skip]

* Chem dispenser droplets colored (#87576)

![image](https://github.com/user-attachments/assets/35492711-3ba9-4c5e-b013-ef8d39ac633f)

Made the droplets show the reagent color (or PH color if ph display is
enabled)

Better UX when you know your colors.

:cl:
qol: chem dispenser droplets in UI colored as their reagent
/:cl:

* Automatic changelog for PR #87576 [ci skip]

* prevents sending messages to newscaster channels without permission (#87783)

* Automatic changelog for PR #87783 [ci skip]

* Improves code for recycling circuits in component printer (#87787)

* Automatic changelog for PR #87787 [ci skip]

* Fixes the randomizer fishing portal not working as intended. (#87794)

* Automatic changelog for PR #87794 [ci skip]

* Tiny spellcheck (#87801)

* Automatic changelog for PR #87801 [ci skip]

* fixes some rand() loops (#87795)

i in rand(x,y) doesnt work

i in 1 to rand(x,y) does

bugggs

ghommie stole my gbp

:cl:
fix: fixed random dm modifiers & some life-like reagent reactions
/:cl:

* evidence bag sounds (#87790)

completes
https://github.com/orgs/tgstation/projects/19/views/1?pane=issue&itemId=84398285

https://github.com/user-attachments/assets/5f4e92eb-3d65-4da7-ba76-24d30f1eddc3
immershun
:cl: grungussuss
sound: evidence bags have more sounds now
/:cl:

* Automatic changelog for PR #87795 [ci skip]

* Automatic changelog for PR #87790 [ci skip]

* Writing sound (#87772)

completes
https://github.com/orgs/tgstation/projects/19/views/1?pane=issue&itemId=85235611

https://github.com/user-attachments/assets/087c88bd-9ddd-4e57-972d-fe66084d19bc
maybe now someone will notice you wrote something
:cl: grungussuss
sound: writing something now produces sound
/:cl:

* Automatic changelog for PR #87772 [ci skip]

* AI-controlled mobs can now cross open space if they won't fall. (#87821)

* Automatic changelog for PR #87821 [ci skip]

* Lowers the price of the energy sword. (#87738)

E-sword uplink price has been lowered from 8 to 6 TC.

It's no secret that the E-sword has fallen out of flavor over the last
year or so.

Its purchase rate is so low it doesn't even show on the MRP chart.

https://superset.moth.fans/superset/dashboard/4/?native_filters_key=gJDhU4Ug60OlqSjRelTSMUWlVWVPGZRQr16s6OFMNXTqcUaVO8-O0yCX1cjJJK9y

Part of the reason I feel is that on its own the weapon doesn't really
offer much.

It's a decent melee weapon but not as good as the powerfist, which is
less expensive, hits twice as hard, stuns, and is unblockable.

It offers decent protection, but again a shield is so easy to steal
these days you might just save your tc for something better

And when you really think about it, his bigger sister, the desword, is
only 5 TC more expensive and offers way more damage and block chance.

(Also you can get one for free if you space explore for a few minutes,
but that's besides the point).

Now I'm not saying the energy sword is a bad weapon, it being 1handed
opens you up for a few nasty combos.

But for what it represents, i.e a shield with some decent damage
strapped on top , it could probably receive a small discount.

I don't really have any strong attachments to the weapon or anything, so
If you can provide a good reason why this is a bad idea by all means.

:cl:
balance: The Uplink cost of the energy sword has been lowered from 8 to
6 TC.
/:cl:

* Automatic changelog for PR #87738 [ci skip]

* More accessibility options and pref menu (#87549)

- added accessibility tab in prefs menu
- put darkened flashes option into this menu
- added `darken screen shake` pref, for motion sick people, darkens your
screen when experiencing screen shake.

<details>
OUTDATED

![image_2024-10-29_023038297](https://github.com/user-attachments/assets/db9cfe23-74f7-413a-8d84-496384b3d3bf)

</details>

https://github.com/user-attachments/assets/e3fd43ad-a65c-47dc-add2-6c93048e8b61

makes it easier for people with disabilities to play the game.
:cl: grungussuss
qol: you can now mitigate motion sickness from screen shake by enabling
"darken screen shake" in preferences
/:cl:

---------

Co-authored-by: MrMelbert <[email protected]>

* Automatic changelog for PR #87549 [ci skip]

* Makes dust animation look less 2006 (#87435)

This was inspired by an effect I saw on Paradise but I sprited my own

https://github.com/user-attachments/assets/2130053c-a6ea-48e6-8b62-4c08563fd154

(Todo, make the skeleton appearing less jank)

1. Looks less 2006.
2. The dust sprite will reflect the mob being dusted, since it's
literally just Your Sprite. Your clothes, species, etc.
3. All species and all mob types now animate being dusted - from corgi
to xenos, from borgs to lizards -, and we can even reuse this effect for
items being dusted if we so desire

:cl: Melbert
image: The animation for being dusted now takes into account your
sprite, rather than being a normal nude spaceman
/:cl:

* Automatic changelog for PR #87435 [ci skip]

* Datumizes heretic paths (#87432)

Replaces the previous system of manually linking each and every heretic
knowledge with eachother with an elegant solution to the problem,
additionally places further restrictions on heretic tree, ensuring that
noone can singlehandledly make it really hard to understand.

There were 2 holes in the heretic knowledge tree, which I removed with
temporary dummy linkings (till someone adds something there, or I may
yet add something there in this PR, so if someone wants to add something
there better do it quickly). The dummy linkings are necessary as the new
system is rigid in this regard in that it does not allow for these
connections to *not* exist, the heretic tree is a directional graph and
while it handles one or mroe connections, it cannot handle having no
connections by design.

* Automatic changelog for PR #87432 [ci skip]

* [NO GBP] Fixed special DNA infusions from squids and pufferfish (#87818)

that. And also a runtime error.

Fixing what I've broken.

:cl:
fix: Fixed special DNA infusions from squids and pufferfish.
/:cl:

* Automatic changelog for PR #87818 [ci skip]

* Omen component no longer tries to crush you from inside of a vent (#87847)

* Automatic changelog for PR #87847 [ci skip]

* Makes goliath cloak not override digitigrade legs (#87840)

* Automatic changelog for PR #87840 [ci skip]

* Tramstation Barber Disposals Fix (#87835)

* Automatic changelog for PR #87835 [ci skip]

* Xenobio console puts sucked up slimes into stasis (#87832)

Closes #87715
Also fixes potential issues that slimes could cause by atmos processing
while inside

:cl:
fix: Xenobio console puts sucked up slimes into stasis so they no longer
split up inside
/:cl:

* Automatic changelog for PR #87832 [ci skip]

* Gives Runtimestation a bounty pad and event spawnpoints (#87839)

* Automatic changelog for PR #87839 [ci skip]

* Fix auto-reel fishing line item catching logic (#87855)

So while working on a frog tongue concept, I realized the auto-reel
fishing line was... always hitting you with the items you reeled in.
Looking into the code, that seemed weird, because it seemed like it had
an entire segment of code dedicated to avoiding just that: catching
those items with your offhand.
But apparently this code never actually ran, because it registers
`COMSIG_ATOM_PREHITBY` on the reeled in item, which only gets sent to
the atom that gets hit.

So in this pr we just shift it to using `COMSIG_MOVABLE_PRE_IMPACT`
instead, which is the equivalent signal sent to the thrown movable.
This fixes our issues.

Fixes the auto-reel fishing line always smacking you in the face with
whatever you reel in, rather than going through its "catch this" checks.
:cl:
fix: Fixed auto-reel fishing line item catching logic.
/:cl:

* Automatic changelog for PR #87855 [ci skip]

* [NO GBP] Fixes hat stabilizer ignoring clothing worn_y_offset (#87851)

Closes #87487

![image](https://github.com/user-attachments/assets/d7b501e2-b026-4254-bbd5-919a3e18259b)

:cl:
fix: Fixed hat stabilizer ignoring clothing worn_y_offset
/:cl:

* Automatic changelog for PR #87851 [ci skip]

* Fixes four unlinked APCs in DeltaStation maint rooms (#87850)

Fixes unlinked APCs in the `Electronic Marketing Den`, `Abandoned
Garden`, `Security Maintenance`, and `Private Investigator's Office`

Specifically:
<details><summary>Moves the wires for the Den to the current
APC...</summary>

![image](https://github.com/user-attachments/assets/ee754ebe-2f3c-41ea-856b-ec21af079f22)

</details>

<details><summary>Moves the APC for the Garden to the current Wires
(yes, it's the inverse, but it's much nicer beside the air alarm AND
removes it from being hidden by the poster...)</summary>

![image](https://github.com/user-attachments/assets/bc07084b-4599-4b81-bc2a-ec6d8b250627)

</details>

<details><summary>Adds the 1 missing wire to the APC in Sec Maints
(under the table)</summary>

![image](https://github.com/user-attachments/assets/f2a0024c-061d-4db2-9bff-a7d025814ff7)

</details>

<details><summary>Moves the wires to the APC in the PI Office</summary>

![image](https://github.com/user-attachments/assets/3e9513a2-0fc7-45fa-84b2-31c994ff2e0e)

</details>

These are, theoretically, meant to be wired to the station. They all
have single lines of wires in the rooms going to walls. Just not to the
walls with the APCs.
:cl:
fix: (DeltaStation) Fixed unwired APCs in the Electronic Marketing Den,
Abandoned Garden, Security Maintenance, and Private Investigator's
Office
/:cl:

* Automatic changelog for PR #87850 [ci skip]

* Fix holymelon armor not inheriting magic resistance (#87849)

- Fixes #87621

Holymelon armor had a missing antimagic flag that did not stop magic
attacks. The holymelon plant gene has
`MAGIC_RESISTANCE|MAGIC_RESISTANCE_HOLY` but the armor only had
`MAGIC_RESISTANCE_HOLY` so this is just making it consistent.

Consistency.

:cl:
fix: Fix holymelon armor not inheriting magic resistance
/:cl:

* Automatic changelog for PR #87849 [ci skip]

* Add screentips to hat stabilizer component (#87845)

Initially this was added in:

- #87285

And then removed in:

- #87305

Not sure if @SmArtKar was aware that screentips can be added to
components.

Consistency.

:cl:
fix: Fix missing screentips plasmaman helmets and MOD suit hat
stabilizer helmets.
/:cl:

---------

Co-authored-by: MrMelbert <[email protected]>

* Fix airlock shell for circuit camera component (#87837)

This PR resolves an issue relating to circuit cameras and airlock
shells.

Fixes #84650

This is a bug fix, and makes airlock shells actually usable.

:cl:
fix: Airlock shells are properly assigned circuit cameras modules
/:cl:

* Automatic changelog for PR #87845 [ci skip]

* fixes tgui DraggableControl not focusing on first click (#87834)

closes #86536

we were attempting to focus a hidden element, which appears to just fail
silently. if we wait until it should be rendered in the dom, it'll be
focused correctly

i'm not 100% just throwing a `setTimeout(() => {}, 0)` is appropriate -
this is a scary class component that i can't throw a useEffect at. it
works, though

i'll pr it over to tgui-core ifff this is all good

clicky buttons clicky click working click

:cl:
fix: certain tgui inputs no longer require 2 clicks to open
/:cl:

* Automatic changelog for PR #87837 [ci skip]

* Labeller now tells you how many labels are left. (#87836)

New `examine` proc for hand labellers so you can tell how many labels
are left on examine.

It's vital to know how many more times I can ~~spam labels~~ organize my
paperwork.

:cl: Goat
qol: You can now examine labelers to tell how many more labels it has.
/:cl:

* Automatic changelog for PR #87834 [ci skip]

* Automatic changelog for PR #87836 [ci skip]

* Examine fixes and documentation touchup (#87838)

Fixes and stuff I noticed from when I was porting examine stuff from
here to TGMC.
- Uses regex so that if you include `and ` in the tooltip of an examine
tag but not main text, `examine()` will not think you said `and ` in the
main text
- The morbid tooltip doesn't try to use HTML for the tooltip now
- Updates documentation for `examine_tags`

Here's my cat.

![image](https://github.com/user-attachments/assets/080235e2-2c73-4875-a22e-acb808496541)
:cl:
fix: examine tags now use regex for checking if a tag has "and" in it
spellcheck: the tooltip for the morbid examine tag doesn't try to use
html anymore
/:cl:

* Automatic changelog for PR #87838 [ci skip]

* Makes curator inventory update when buttons are pressed. (#87841)

Adds two calls for `update_static_data_for_all_viewers()` so the UI will
update when a player switches pages or removes an item in the inventory
screen.
Responsive UI good. When I click button UI should respond accordingly.
fix #82733
:cl: Goat
qol: Curator console's inventory screen will now update when you change
pages or remove items.
/:cl:

* Automatic changelog for PR #87841 [ci skip]

* Deletes misleading infinite define, adds defines for clearer status effect durations (#87842)

1. Deletes `INFINTIE`, it is misleading and not at all a big number and
causes bugs
2. Adds `STATUS_EFFECT_PERMANENT` and `STATUS_EFFECT_NO_TICK` to make it
clearer what infinite status effects are

* Make roundstart book publishing on bird possible. (#87843)

Adds a book binder to the birdshot library in the spot the book scanner
used to be and moves the scanner right next to the library computer on
the desk.

Curator shouldn't have to wait for research to be able to put books into
the archive.
:cl: Goat
map: The library's scanner on Birdshot is now close enough to connect to
the computer and was also given a book binder.
/:cl:

* Automatic changelog for PR #87843 [ci skip]

* Fixes basic mob performance impact created by the factorio PR (#87852)

the peak change. This was done to exclusively snowflake chasms but in
reality *did not do anything whatsoever* because chasms override
CanAllowThrough to always return TRUE anyways. Yesh.

is_blocked_turf is relatively hot in basic mob AI so this was really
bad.

:cl:
fix: Fixed basic mob performance impact created by the factorio PR
/:cl:

* Fix broken link to issue manager guide (#87846)

There was a malformed markdown link in the contributor guide.

Nothing player facing.

:cl:
fix: Fix broken link to issue manager guide in Github contributor guide
/:cl:

* Automatic changelog for PR #87852 [ci skip]

* Automatic changelog for PR #87846 [ci skip]

* Fixing a small, crucial, fish reproduction issue. (#87825)

This PR should fix fishes not being able to reproduce with others of the
same type, simply because the list of **types** to check was
instantiated with the first key being src instead of src.type.

I should really make a second fish reproduction unit test that doesn't
involve crossbreeding, self-reproducing and sterile fishes, all of which
are edges cases that are actually working unlike the main thing.

Yeah, sorry if this took so long to get to this. I hadn't really notice
it until now. I have indeed played with the aquarium a few times but
with other goals in mind, and when I had seen that fish could indeed
reproduce with different yet compatible fish (e.g. clownfish and
lubefish, goldfish and three-eyed goldfish) I thought the feature was
working as intended. I was simply wrong.

* Automatic changelog for PR #87825 [ci skip]

* [NO GBP] Fixes some item interactions (#87856)

- Fixes #87854

:cl:
fix: flatpacker accepts circuitboards with left click
fix: rcd can deconstruct tables
fix: you can open panels of destructive analyzers with screwdriver right
click. Use right click or combat mode with items for default
interactions
fix: flatpacker & machines with local storage can be RPED'd again
/:cl:

* Automatic changelog for PR #87856 [ci skip]

* [NO GBP] Fixed fish still being hungry when fed if in aquarium with the 'growth and reproduction' option disabled (#87827)

See title.

That's a bug.

* Automatic changelog for PR #87827 [ci skip]

* [NO GBP] Fixed bombing non-turfs fishing spots not spawning loot correctly. (#87819)

Found another small issue with fishing, this one pertaining explosive
fishing spawning the loot inside objects.
Also bottled messages should no longer spawn from explosions. They're
one-time events and shouldn't be spent by explosive fishing, which can
quickly empty the pool of stored messages and photos.

Fixing issues with the feature.

* Automatic changelog for PR #87819 [ci skip]

* Fixes borg to ai connection (#87773)

fixes #87651 which was caused by #87597
it is
:cl:

fix: fixed roundstart borgs not being synced to ai

/:cl:

* Automatic changelog for PR #87773 [ci skip]

* fix clicking other ghosts' screen alerts (#87830)

closes #87572

usr does not necessarily mean owner for screen alerts, thanks Observe

shouldn't be teleporting other ghosts around

* Automatic changelog for PR #87830 [ci skip]

* Holosign creators interact with storage correctly (#87824)

- Fixes #87539

Racks, bags & basically anything that stores stuff will interact with
all holosign creator's correctly

:cl:
fix: holosign creators interact with storage items correctly
/:cl:

* Automatic changelog for PR #87824 [ci skip]

* small slime ai tweaks (#87871)

* party popper doesn't make sloshing sounds (#87872)

closes https://github.com/tgstation/tgstation/issues/87330
:cl: grungussuss
sound: party popper no longer makes reagent sloshing sounds
/:cl:

* Automatic changelog for PR #87872 [ci skip]

* Fix infinite metal holodeck exploit (#87806)

This stops people from using chairs to create free metal. It was
possible to pick up a chair or place it down and it would lose it's
hologram status since a new object is created.

Now anyone that attempts to place down or pick up a chair will have it
vanish.

No more free metal.

:cl:
fix: Fix using chairs in holodeck to create infinite metal
/:cl:

* Automatic changelog for PR #87806 [ci skip]

* Rewrites the code in beserk.dm (#87820)

Does as the title says, cleans up the code a bit and modernizes it, as
well as making it call its parent.
It's more readable this way, plus it properly calls its parent proc now.

* Automatic changelog for PR #87820 [ci skip]

* Fixes stingbangs using wrong sprites (#87812)

Stingbangs (and much rarer rotfrags) used their disassembled sprite
until primed this entire time. Yeah.

Handle appearing out of nowhere looks very jarring

* Fixes detective action palette being invisible (#87814)

Closes #87809

* Automatic changelog for PR #87812 [ci skip]

* Automatic changelog for PR #87814 [ci skip]

* Reduces required crayons for crayon bounty (#87848)

This reduces the bounty size of the crayon civilian pack.

Instead of 24 crayons, it only needs 8. Same payout, less quantity.

Crayons are not easily produced or scavenged. Even if a map contains 2
full crayon packs in the Library, it still isn't enough to fulfill a
single bounty for crayons.

This new deal will get you a full payout with a full pack plus one
_mystery crayon._ Go rob the clown or detective or something if you need
the last one. Get that money!

* Automatic changelog for PR #87848 [ci skip]

* Include the map vote config file (#87867)

Includes the map_vote.txt config file created in
https://github.com/tgstation/tgstation/pull/86788 so that it gets read
when the server starts.

Reads whatever value is set in the config file.

* Automatic changelog for PR #87867 [ci skip]

* meatlovers flatbread no longer tastes raw (#87853)

fixes #87844

* Automatic changelog for PR #87853 [ci skip]

* fixes meteor heart AI runtimes (#87813)

fixes a few runtimes with the meteor heart's sleep behavior, mostly
because it was trying to add an element to a blackboard key list,
eventhough said key wasnt a list.

fixes meteor heart AI runtimes

* [no gbp] fixes manulathe and manucrafter interaction (#87880)

fixes #87874
also fixes an unintentional sprite change

:cl:
fix: the manucrafter now properly receives resources, also fixed
unintentional manulathe sprite change
/:cl:

* Disable hauntium teleporting during unit tests (#87878)

Disable the idle teleporting behavior in
`/datum/idle_behavior/idle_ghost_item` during unit testing.

I've seen two instances now of the mapping nearstation tests failing
because something made of hauntium spawned near the edge of the station
and then teleported outside into space. This will fix that flaky
behavior.

No player-facing changes.

* Chem Dispenser icon shadow [NO GBP] (#87868)

![image](https://github.com/user-attachments/assets/5220c8ce-5f75-4a4a-944b-66ac5f458c53)

Didn't manage to processs the last suggestion under
https://github.com/tgstation/tgstation/pull/87576 by @Iamgoofball
Even though it was so obvious and brilliant idea.

Now no need to have a separate highlight color for buttons on PH color
mode.

Nice UI

:cl:
qol: Chem dispenser UI droplets now have a shadow to not blend with the
background
/:cl:

* increases volume of shoes pickup sound (#87875)

closes https://github.com/tgstation/tgstation/issues/87538
:cl: grungussuss
sound: shoes pickup volume is louder now
/:cl:

* Automatic changelog for PR #87868 [ci skip]

* Automatic changelog for PR #87875 [ci skip]

* Improves code for remote materials (#87870)

- Moves remote materials attack chain to item interaction level. Another
step in moving away from `attackby()`
- Fixes #40070. Though the timer subsystem maybe affected by FPS, round
start trigger is always done after everything is set up which is now
used by remote materials

:cl:
fix: silo connection on some machines won't time out when changing FPS
settings
code: improved attack chain code for silo connection
/:cl:

* Automatic changelog for PR #87870 [ci skip]

* spellecheck: existence not existance (#87862)

existance doesnt exist so i changed it to existence

existance dosent exist

:cl:
spellcheck: spellecheck: existence not existance
/:cl:

* Automatic changelog for PR #87862 [ci skip]

* Fixes scanner gates saying both bypass and detection lines when malfunctioning (#87816)

Closes #87542
:cl:
fix: Fixed scanner gates saying both bypass and detection lines when
malfunctioning
/:cl:

* Automatic changelog for PR #87816 [ci skip]

* [no gbp] fixes seedling ai getting stuck (#87885)

fixes seedling AI's getting stuck when trying to refill water from water
tanks that have been emptied!

fixes seedling ai getting stuck

:cl:
fix: fixes seedling ai getting stuck when trying to refill water from
emptied water tanks
/:cl:

* Automatic changelog for PR #87885 [ci skip]

* fixes parriable projectiles runtimes (#87899)

* Admin deleting a mob now ghostizes it beforehand, preventing a runtime (#87887)

* Automatic changelog for PR #87887 [ci skip]

* Refactors some more UIs to use DmIcon (#87886)

Upstream port of
https://github.com/Monkestation/Monkestation2.0/pull/4215

This changes some tgui UIs that used icon2base64/getFlatIcon to display
items to instead use DmIcon, just passing the icon/icon_state instead.

To be specific: the ORM, the "ore container", and the order console
(produce, mining, and bitrunning vendors)

<details>
<summary><h3>UI screenshots / proof of testing</h3></summary>

![2024-11-12 (1731458275) ~
dreamseeker](https://github.com/user-attachments/assets/b1c60677-b117-4c23-8076-8b5072130d55)
![2024-11-12 (1731458281) ~
dreamseeker](https://github.com/user-attachments/assets/b64d3c2f-4754-4e5d-991a-2df69d86eb2a)
![2024-11-12 (1731458286) ~
dreamseeker](https://github.com/user-attachments/assets/287d8db1-8acb-4c4c-a2f0-66227a477d19)
![2024-11-12 (1731458388) ~
dreamseeker](https://github.com/user-attachments/assets/f69f5d51-5cdc-442c-971d-a4abedd4a3d2)
![2024-11-12 (1731458391) ~
dreamseeker](https://github.com/user-attachments/assets/53a95e88-ac41-4f97-a409-10b19d130376)

</details>

gfi bad, especially in ui(_static)_data, dmicon good.

:cl:
refactor: The ORM, "ore container", and order console UIs (produce,
mining, bitrunner vendors) now load icons in a more efficient manner.
/:cl:

* Tenacious element no longer prints a wear off message when added outside of soft crit and properly removes its effects when detached (#87901)

Wear off message is only printed if the user actually had the effect
active before, and speed modifier is removed alongside the element.

:cl:
fix: Fixed tenacity effect printing its messages when it shouldn't be,
and not removing its' effects when it should've.
/:cl:

* Fixes Mech Spin Sounds (#87900)

Mechs were playing spin sound effects (_on top_ of normal step sounds)
every time they'd take a step while strafing. Additionally, they would
not play the spin sound effect when actually turning. This fixes both.
Bugfix. Also, cleaner sounding mechs.
:cl:
Fix: Fixed the triggering of mech turn sound effects
/:cl:

* sandstone blocks have the correct sound now (#87896)

closes https://github.com/tgstation/tgstation/issues/87611
it makes sense
:cl: grungussuss
sound: sandstone blocks have the correct sound now
/:cl:

* Lower singularity beacon cost and time  (#87891)

This lowers the cost of the singularity beacon to 4 crystals. Right now
this item never gets used due to the high cost and niche requirements.
According to the statistics it is not even on the list:

https://superset.moth.fans/superset/dashboard/4/?native_filters_key=Gd84-_rrITStPTkyo7BlqnE5aYcHmofhLU2GjWEiWdqY-ZaK2WVxrq1eG6qS0bNa

Before we had the SM, the singularity engine was often sabotaged with
this beacon since all you needed to do was disable an emitter or cut a
wire and the singularity would break loose. It was a relatively easy
process.

The criteria to achieve a singularity now is very difficult. You either
have to overload the SM and fight off anyone who tries to fix it OR
purchase one from cargo and make a pipe setup to feed it a ton of gas.
All the crew has to do to prevent it, is leak the gas by opening an
airlock, breach the floor, or a window. If there is an AI or cyborgs,
your job is now ten times harder.

Then you have another problem. The beacon requires powered wires and if
the SMESs gets destroyed by the singularity it's useless. This is
guaranteed to happen if using the SM from engineering since it's so
close to the SMESs. So now you have to either rely on solars or a
generator to power the device.

The hassle of spending 10 crystals on this item is not worth it. Too
many things can go wrong and it would be a waste of points.

This item never gets picked due to it's high cost and difficulty. By
lowering the cost, it would make it a more reasonable choice.

:cl:
balance: Lower the telecrystal price of the singularity beacon from 10
to 4 and reduce the timer to 20 minutes before it can be purchased.
/:cl:

* Speeds up part of the dust animation by a frame or so, makes remains/dust spawn aligned lower on the tile (#87858)

- Speeds up the torso part of the dust animation by a few frames, as was
requested but I didn't do before merge
- Makes remains/dust spawn from being dusted towards the bottom of the
tile

Videos (take before the remains/dust change)

https://github.com/user-attachments/assets/7e9fe699-a44b-49d5-a4d0-2304e09283d5

https://github.com/user-attachments/assets/7b426340-5d3d-49fa-91f1-52b2fc3a560c

Should help sell the effect a bit more

:cl: Melbert
image: Speeds up some frames of the dust animation slightly
image: Dust/remains spawned after being dusted are now aligned towards
the bottom of the tile
image: Bigger mobs now produce bigger piles of ash
image: Plasmamen now dust into plasma bones
/:cl:

* Fixes cigarettes not fitting in gas masks (#87817)

You couldn't put cigarettes in gas masks due to a check for if the masks
mouth is covered
You can now filter the air through your cigarettes as was intended.
:cl:
fix: removes the gas mask check for if the gas mask mouth is covered.
Now it only checks for filters and other cigs
/:cl:

* Automatic changelog for PR #87886 [ci skip]

* Automatic changelog for PR #87901 [ci skip]

* Automatic changelog for PR #87896 [ci skip]

* Automatic changelog for PR #87891 [ci skip]

* Automatic changelog for PR #87858 [ci skip]

* Automatic changelog for PR #87817 [ci skip]

* Fixes SSWardrobe stealing a camera from the camera app when on a dummy, causing a harddel (#87903)

See name, if a dummy somehow gets hold of a PDA with the camera app
installed (This just so happens to be a default PDA program in the case
on Nova, Skyrat, and Bubber), and the delete_equipment proc is called,
the camera inside the PDA gets sent to the wardrobe because of
`/datum/outfit/job/assistant/gimmick/hall_monitor` having one, and then
qdelled with the PDA, leaving a hanging ref

This causes a harddel during tests that has caused me great pains to
locate. Turns out a single example holodisk with the clown holds a
magical key to trigger all this: a single PDA

Fixes a harddel. There might be other similar ones hiding in the dark
like cameras in other objects.

:cl:
fix: Fixes SSWardrobe stealing a camera from the camera app when on a
dummy, causing a harddel
/:cl:

* Automatic changelog for PR #87903 [ci skip]

* Rebuild plane masters after client login if switching between 515 and 516 (#87889)

This makes `/datum/player_details` properly track BYOND version and
build separately, as opposed to just the full version string.

Whenever a client logs in, and their BYOND version is 516, while their
previous version was 515, or vice versa, it'll set a newly added client
var, `rebuild_plane_masters`, to TRUE.

During the `COMSIG_MOB_LOGIN` signal handler of a mob's HUD
(`/datum/hud/proc/client_refresh`), it will check to see if
`rebuild_plane_masters` is TRUE - if so, it will set the appropriate
`relay_loc` of (based on client BYOND version) of its plane master
groups, and rebuild their plane masters.

Makes testing stuff across 515 and 516 easier, as your screen won't
break when switching between the two.

516 is _still_ in private alpha, so no user-facing changes.

* a few tiny birdshot tweaks and fixes (#87785)

1st SM filter is now set to N2 by default
A random hallway apc that started unwired is now wired
Chef gets a dehydrator
Surgery theatre now has a surgery tray instead and surplus prosthetic
limbs to fill in the empty space
Greater central maintenance owns all of its walls
The chemical closet in pharmacy now has multiver, formaldehyde,
epinephrine, basic buffer and the other kind of buffer to compensate for
not having a chemstorage room
atmos distro air mixer now mixes correctly

closes #87729
also maintenance is supposed to own all of its walls

:cl:
fix: Added dehydrator to birdshot kitchen. Surgery theatre now has a
surgery tray and surplus prosthetics. An unwired hallway APC is now
wired. 1st SM filter is now set to Nitrogen. Chemistry closet in
pharmacy now contains extra chemicals to compensate for not having a
chemical storage. Atmos air for distro mixer now mixes correctly
/:cl:

* floor lights have the same light range during nightshift (#87786)

floor lights have the same light range during nightshifts

theyre horrendously bad at lighting up stuff in nightshift and birdshots
bar looks horrendous as a result

:cl:
fix: floor lights have the same light range during nightshift, so you
can actually see the bar during a night shift on birdshot
/:cl:

* Fixes storage & evidence bag pre attack (#87793)

- Fixes #87788

Usually when you force move an item anywhere `obj/item/doMove()` is
responsible for removing the item from the players hand & updating the
visuals. When you move that item from say your pocket to your hand we
call `attempt_pickup()` which also updates visuals.

The one case where these 2 procs don't help is when that item is
equipped from anywhere else but the hand(pockets for e.g) into a storage
medium that is held in hand. For this edge case we have to drop the item
to ground to update the visuals of whatever inventory slot it was
attached to

Now evidence bag uses the storage pre attack mode rather than
implementing its own item interaction thus fixing the visual glitch not
just for it but for all items that have `allow_quick_gather = TRUE`

:cl:
fix: Fixed visual glitches when inserting items from an slot other than
the hands into evidence bags & other storages that have quick gather
mode enabled
/:cl:

* Fixes nooartrium having no downsides (#87798)

Having a non-organic heart ignored the heart damage, so you could just
be immortal forever

:cl:
fix: Nooartrium heart damage can no longer be bypassed with non-organic
hearts
/:cl:

Balance maybe? I don't feel this was ever intended and an oversight in
not setting the correct flag

---------

Co-authored-by: MrMelbert <[email protected]>

* cuffsnapping is on right click (#87634)

title

OOC: Blard of Jard: I was trying to cut a cargo tech's leg off for a spy
bounty, but instead of just cutting his leg with it targetted on harm
intent, it immediately cut his ties and he mag dumped me with his laz
gun.

:cl:
fix: you now snip cuffs with right click to prevent accidental cuts
/:cl:

---------

Co-authored-by: Ghom <[email protected]>

* Guncode Agony 4.1: Portal Intermission (#87803)

Closes #75447 by allowing projectiles to pass through portals. This does
not allow for infinite loops for sanity (including host's) reasons.

Can safely be merged before #87740

:cl:
fix: Many years later, projectiles finally can pass through portals -
this time without crashing the server.
/:cl:

* Automatic changelog for PR #87785 [ci skip]

* Automatic changelog for PR #87798 [ci skip]

* Automatic changelog for PR #87793 [ci skip]

* Automatic changelog for PR #87634 [ci skip]

* Automatic changelog for PR #87803 [ci skip]

* Buffs the Anomalock modules (#87743)

Significantly buffed the anomalock modules.

Anomalock modules can be used with eachother.

Antigravity module costs 2 complexity.

Teleporter module is thrice as fast at teleporting with a slightly
reduced cooldown, but has a much larger power cost.

Changed how teleporter tracks maximum range to be less painful to the
end user.

Kinesis module's default range has been extended to 8.

Kinesis module can drag around people in critical condition or worse.

These modules have historically been, well, kind of a complete joke.
They seem to have been crippled out of fear of them being overpowering
with the end result of being unusable.

Anomaly items are allowed and meant to be fun, strong, and wild, so I
really don't see why these need to be so weak. The amount of times I'd
rather make a teleporter that takes 3 seconds to get you anywhere
instead of an instant portal gun or a bag of holding is roughly zero.

People hate modsuits, and in part that hate is because of modules which
do very, very little due to severe undertuning. Let's fix that with the
anomaly ones here.

> Anomalock modules can be used with eachother.

Let people get a buncha anomaly modulse together if they want to. An
antigravity user with teleporting and kinesis could be something to
fear, but not so much as to strike it from existence altogether without
even letting people mess around with it first.

> Antigravity module costs 2 complexity.

Antigravity module is glorified wittel -> gravitum, but it takes a core
and 3 complexity. At least let it be somewhat cheap.

> Teleporter module is thrice as fast at teleporting with a slightly
reduced cooldown, but has a much larger power cost.

Teleporter module is a big damn joke ATM, as stated above being
effectively overshadowed in every way by the portal gun. This now gives
it a fun niche instead, of being able to teleport around everywhere at
the cost of a massive power draw.

> Changed how teleporter tracks maximum range to be less painful to the
end user.

view() was working weirdly when I was using it. It was failing to
register tiles somewhat near the end of the screen, so I just ditched it
for a get_dist check that I threw 9 in as a somewhat arbitrary value
for.

> Kinesis module's default range has been extended to 8.

There's this bug on live where when you kinesis someone it flies all the
way to the SW corner of the screen for seemingly no reason. I don't know
why it happens but it drives me mad.

Even without that bug, 5 tiles is extremely frustrating to handle - it's
super, super annoying to find a middleground between 'not slapping you
in the face', 'not losing your grip'. 8 tiles is a lot more forgiving
and makes the module actually fun to use.

> Kinesis module can drag around people in critical condition or worse.

This one might be a bit nuts, but I really want to see this ingame, it's
kind of the best part of the module yet is unobtainable. Maybe some
stuff would need to be tuned for it, like making human throws flimsy.
:cl:

balance: Significantly buffed the anomalock modules.
balance: Anomalock modules can be used with eachother.
balance: Antigravity module costs 2 complexity.
balance: Teleporter module is thrice as fast at teleporting with a
slightly reduced cooldown, but has a much larger power cost.
code: Changed how teleporter tracks maximum range to be less painful to
the end user.
refactor: Refactored LoS checks to be a proc on atom, los_check
balance: Kinesis module's default range has been extended to 8.
balance: Kinesis module can drag around people in critical condition or
worse.
/:cl:

* Automatic changelog for PR #87743 [ci skip]

* gives mulebot wires some messages when cut (#87895)

closes https://github.com/tgstation/tgstation/issues/87640
feedback is cool
:cl: grungussuss
qol: added feedback for cutting mulebot wires
/:cl:

* Automatic changelog for PR #87895 [ci skip]

* Hello I would like to order one unit test please

* Hi can I get a replacement unit test this one broke

* we don't need these anymore

---------

Co-authored-by: Fikou <[email protected]>
Co-authored-by: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Co-authored-by: Jacquerel <[email protected]>
Co-authored-by: Ghom <[email protected]>
Co-authored-by: thegrb93 <[email protected]>
Co-authored-by: Xander3359 <[email protected]>
Co-authored-by: SyncIt21 <[email protected]>
Co-authored-by: harryob <[email protected]>
Co-authored-by: Tim <[email protected]>
Co-authored-by: Lucy <[email protected]>
Co-authored-by: SmArtKar <[email protected]>
Co-authored-by: OrionTheFox <[email protected]>
Co-authored-by: grungussuss <[email protected]>
Co-authored-by: Ben10Omintrix <[email protected]>
Co-authored-by: tonty <[email protected]>
Co-authored-by: elricsfate <[email protected]>
Co-authored-by: Waterpig <[email protected]>
Co-authored-by: Jordan Dominion <[email protected]>
Co-authored-by: Rhials <[email protected]>
Co-authored-by: necromanceranne <[email protected]>
Co-authored-by: Andrew <[email protected]>
Co-authored-by: Dawnseer <[email protected]>
Co-authored-by: carlarctg <[email protected]>
Co-authored-by: EnterTheJake <[email protected]>
Co-authored-by: MrMelbert <[email protected]>
Co-authored-by: Djiq <[email protected]>
Co-authored-by: Alice Garfieldfan <[email protected]>
Co-authored-by: sqn <[email protected]>
Co-authored-by: _0Steven <[email protected]>
Co-authored-by: tmyqlfpir <[email protected]>
Co-authored-by: Goat <[email protected]>
Co-authored-by: Neocloudy <[email protected]>
Co-authored-by: Holoo <[email protected]>
Co-authored-by: Alexis <[email protected]>
Co-authored-by: LT3 <[email protected]>
Co-authored-by: jimmyl <[email protected]>
Co-authored-by: Roxy <[email protected]>
Co-authored-by: zxaber <[email protected]>
Co-authored-by: Time-Green <[email protected]>
  • Loading branch information
Show file tree
Hide file tree
Showing 472 changed files with 2,762 additions and 2,115 deletions.
2 changes: 1 addition & 1 deletion .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ Things you **CAN'T** do:
* [Close PRs](https://imgur.com/w2RqpX8.png): Only maintainers are allowed to close PRs. Do not hit that button.
* Close issues purely for breaking a template if the same information is contained without it.

For more information reference the [Issue Manager Guide](.github/guides/ISSUE_MANAGER.md).
For more information reference the [Issue Manager Guide](./guides/ISSUE_MANAGER.md).

</details>

Expand Down
8 changes: 4 additions & 4 deletions .github/guides/ISSUE_MANAGER.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ When examining new issues you should immediately notify a maintainer if you see
- **Server Lagging** [[1]](https://github.com/tgstation/tgstation/issues/60193) [[2]](https://github.com/tgstation/tgstation/issues/51927) [[3]](https://github.com/tgstation/tgstation/issues/32762) - Something that is causing a _severe_ amount of lag during the game

#### Runtime Issue Reports
If an issue reports a runtime, it must have the actual runtime call stack provided by round logging or in-game debug menu (https://github.com/tgstation/tgstation/issues/70329#issuecomment-1279853883).
If an issue reports a runtime, it must have the actual runtime call stack provided by round logging or in-game debug menu (https://github.com/tgstation/tgstation/issues/70329#issuecomment-1279853883).
<details>
<summary>Example runtime call stack</summary>

```
[2022-10-15 16:12:38.902] runtime error: Cannot execute null.add().
- proc name: visibility (/datum/cameranet/proc/visibility)
Expand All @@ -28,8 +28,8 @@ If an issue reports a runtime, it must have the actual runtime call stack provid
- usr.loc: the floor (150,25,4) (/turf/open/floor/circuit)
- call stack:
- Camera Net (/datum/cameranet): visibility(/list (/list), null, /list (/list), 1)
- AI (/mob/living/silicon/ai): camera visibility(Inactive AI Eye (/mob/camera/ai_eye))
- Inactive AI Eye (/mob/camera/ai_eye): setLoc(the floor (150,25,4) (/turf/open/floor/circuit), 0)
- AI (/mob/living/silicon/ai): camera visibility(Inactive AI Eye (/mob/eye/ai_eye))
- Inactive AI Eye (/mob/eye/ai_eye): setLoc(the floor (150,25,4) (/turf/open/floor/circuit), 0)
- AI (/mob/living/silicon/ai): create eye()
- AI (/mob/living/silicon/ai): Initialize(0, null, TagGamerGame2 (/mob/dead/new_player))
- Atoms (/datum/controller/subsystem/atoms): InitAtom(AI (/mob/living/silicon/ai), 0, /list (/list))
Expand Down
11 changes: 8 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,15 @@ Find `BUILD.bat` here in the root folder of tgstation, and double click it to in

**[How to compile in VSCode and other build options](tools/build/README.md).**

## Contributors
[Guides for Contributors](.github/CONTRIBUTING.md)
## Getting started

[/tg/station HACKMD account](https://hackmd.io/@tgstation) - Design documentation here
For contribution guidelines refer to the [Guides for Contributors](.github/CONTRIBUTING.md).

For getting started (dev env, compilation) see the HackMD document [here](https://hackmd.io/@tgstation/HJ8OdjNBc#tgstation-Development-Guide).

For overall design documentation see [HackMD](https://hackmd.io/@tgstation).

For lore, [see Common Core](https://github.com/tgstation/common_core).

## LICENSE

Expand Down
92 changes: 57 additions & 35 deletions _maps/map_files/Birdshot/birdshot.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -2854,6 +2854,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/hallway/primary/port)
"bfe" = (
Expand All @@ -2875,6 +2876,7 @@
/obj/structure/disposalpipe/junction/flip{
dir = 8
},
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/hallway/primary/port)
"bfU" = (
Expand Down Expand Up @@ -6754,6 +6756,7 @@
/area/space/nearstation)
"cCM" = (
/obj/structure/cable,
/obj/structure/sink/kitchen/directional/east,
/turf/open/floor/iron/kitchen/small,
/area/station/service/kitchen)
"cCP" = (
Expand Down Expand Up @@ -10747,15 +10750,12 @@
/turf/open/floor/iron/white,
/area/station/medical/medbay/aft)
"dZa" = (
/obj/structure/table/reinforced,
/obj/machinery/camera/directional/west,
/obj/effect/decal/cleanable/cobweb,
/obj/item/retractor,
/obj/item/hemostat,
/obj/item/cautery,
/obj/machinery/camera/autoname/directional/north,
/obj/structure/sign/poster/official/random/directional/north,
/obj/machinery/status_display/ai/directional/west,
/obj/item/surgery_tray/full/deployed,
/turf/open/floor/iron/showroomfloor,
/area/station/medical/surgery/theatre)
"dZk" = (
Expand Down Expand Up @@ -14030,13 +14030,13 @@
/turf/open/floor/iron/small,
/area/station/security/office)
"fhp" = (
/obj/structure/table,
/obj/effect/spawner/random/food_or_drink/donkpockets{
pixel_y = 6
},
/obj/effect/turf_decal/siding{
dir = 8
},
/obj/structure/table,
/turf/open/floor/iron/dark/textured_large,
/area/station/service/kitchen)
"fhT" = (
Expand Down Expand Up @@ -15014,6 +15014,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/hallway/primary/port)
"fyZ" = (
Expand Down Expand Up @@ -15896,6 +15897,7 @@
dir = 1
},
/obj/machinery/power/apc/auto_name/directional/south,
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/hallway/primary/port)
"fMg" = (
Expand Down Expand Up @@ -17909,10 +17911,6 @@
pixel_y = 8
},
/obj/item/clothing/mask/surgical,
/obj/item/surgical_drapes{
pixel_x = -1;
pixel_y = 4
},
/obj/machinery/status_display/evac/directional/west,
/turf/open/floor/iron/showroomfloor,
/area/station/medical/surgery/theatre)
Expand Down Expand Up @@ -20103,6 +20101,11 @@
name = "Pharmacy Shutters Control";
req_access = list("pharmacy")
},
/obj/item/reagent_containers/cup/bottle/multiver,
/obj/item/reagent_containers/cup/bottle/epinephrine,
/obj/item/reagent_containers/cup/bottle/formaldehyde,
/obj/item/reagent_containers/cup/bottle/acidic_buffer,
/obj/item/reagent_containers/cup/bottle/basic_buffer,
/turf/open/floor/iron/dark,
/area/station/medical/pharmacy)
"hdT" = (
Expand Down Expand Up @@ -21861,9 +21864,9 @@
/turf/open/floor/iron/smooth,
/area/station/command/gateway)
"hIm" = (
/obj/machinery/libraryscanner,
/obj/machinery/camera/autoname/directional/north,
/obj/machinery/airalarm/directional/north,
/obj/machinery/bookbinder,
/turf/open/floor/wood/parquet,
/area/station/service/library)
"hIE" = (
Expand Down Expand Up @@ -24221,6 +24224,7 @@
pixel_y = 18
},
/obj/structure/extinguisher_cabinet/directional/east,
/obj/item/circuitboard/mecha/ripley/main,
/turf/open/floor/iron/dark,
/area/station/science/robotics/lab)
"ivC" = (
Expand Down Expand Up @@ -25630,6 +25634,16 @@
},
/turf/open/floor/iron/dark,
/area/station/ai_monitored/security/armory)
"iPx" = (
/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
dir = 1;
filter_type = list(/datum/gas/nitrogen)
},
/obj/effect/turf_decal/bot{
dir = 1
},
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
"iPy" = (
/obj/structure/cable,
/turf/open/floor/iron,
Expand Down Expand Up @@ -26363,6 +26377,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/hallway/primary/port)
"jab" = (
Expand Down Expand Up @@ -35546,7 +35561,7 @@
"mae" = (
/obj/structure/cable,
/turf/closed/wall,
/area/station/service/bar)
/area/station/maintenance/central/greater)
"maf" = (
/turf/closed/wall/rust,
/area/station/hallway/primary/fore)
Expand Down Expand Up @@ -40713,6 +40728,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/hallway/primary/port)
"nSd" = (
Expand Down Expand Up @@ -43703,6 +43719,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/hallway/primary/port)
"oYj" = (
Expand Down Expand Up @@ -44211,6 +44228,11 @@
},
/turf/open/floor/iron,
/area/station/cargo/storage)
"phk" = (
/obj/structure/table/wood,
/obj/machinery/libraryscanner,
/turf/open/floor/carpet,
/area/station/service/library)
"phm" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
Expand Down Expand Up @@ -46111,6 +46133,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/cable,
/turf/open/floor/iron/small,
/area/station/hallway/primary/port)
"pOQ" = (
Expand Down Expand Up @@ -51218,10 +51241,10 @@
pixel_y = 2
},
/obj/item/holosign_creator/robot_seat/restaurant,
/obj/structure/table,
/obj/effect/turf_decal/siding{
dir = 9
},
/obj/structure/table,
/turf/open/floor/iron/dark/textured_large,
/area/station/service/kitchen)
"rya" = (
Expand Down Expand Up @@ -52580,7 +52603,7 @@
/turf/open/floor/iron/white,
/area/station/medical/medbay/lobby)
"rVI" = (
/obj/machinery/atmospherics/components/trinary/mixer/airmix/flipped{
/obj/machinery/atmospherics/components/trinary/mixer/airmix/flipped/inverse{
dir = 8
},
/turf/open/floor/iron,
Expand Down Expand Up @@ -54598,13 +54621,7 @@
/turf/open/misc/sandy_dirt,
/area/station/security/tram)
"sGt" = (
/obj/structure/table/reinforced,
/obj/item/scalpel{
pixel_y = 12
},
/obj/item/blood_filter,
/obj/item/circular_saw,
/obj/item/bonesetter,
/obj/structure/closet/crate/freezer/surplus_limbs,
/turf/open/floor/iron/showroomfloor,
/area/station/medical/surgery/theatre)
"sGE" = (
Expand Down Expand Up @@ -61583,6 +61600,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/hallway/primary/port)
"uQT" = (
Expand Down Expand Up @@ -62423,15 +62441,12 @@
/turf/open/floor/iron/smooth_large,
/area/station/science/robotics/mechbay)
"vfI" = (
/obj/machinery/microwave{
pixel_y = 5
},
/obj/machinery/light_switch/directional/north,
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/table,
/obj/effect/turf_decal/siding/end,
/obj/machinery/smartfridge/drying,
/turf/open/floor/iron/dark/textured_large,
/area/station/service/kitchen)
"vfK" = (
Expand Down Expand Up @@ -65146,9 +65161,15 @@
/turf/open/floor/iron/dark,
/area/station/command/corporate_dock)
"vTP" = (
/obj/structure/sink/kitchen/directional/east,
/obj/machinery/firealarm/directional/west,
/turf/open/floor/iron/kitchen/small,
/obj/structure/table,
/obj/machinery/microwave{
pixel_y = 5
},
/obj/effect/turf_decal/siding/end{
dir = 4
},
/turf/open/floor/iron/dark/textured_large,
/area/station/service/kitchen)
"vTV" = (
/turf/closed/wall/r_wall,
Expand Down Expand Up @@ -67830,7 +67851,7 @@
/obj/effect/spawner/random/maintenance,
/obj/structure/rack,
/turf/open/floor/plating,
/area/station/service/bar)
/area/station/maintenance/central/greater)
"wKO" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/camera/directional/east,
Expand Down Expand Up @@ -69562,6 +69583,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/hallway/primary/port)
"xiT" = (
Expand Down Expand Up @@ -90220,7 +90242,7 @@ jNV
guh
cBl
fJe
aJb
iPx
cay
fMB
maK
Expand Down Expand Up @@ -94930,7 +94952,7 @@ sXD
qSa
feR
aZh
jdx
phk
pOQ
wKr
wKr
Expand Down Expand Up @@ -98007,8 +98029,8 @@ xRV
jVM
xjQ
jVM
tGq
tGq
jVM
jVM
xmt
xmt
xmt
Expand Down Expand Up @@ -100320,7 +100342,7 @@ jVM
jVM
jVM
jVM
vkh
jVM
lnD
fzw
bKO
Expand Down Expand Up @@ -101348,7 +101370,7 @@ jgb
hRc
jVM
kXC
vkh
jVM
dxV
jDT
fOq
Expand Down Expand Up @@ -101605,7 +101627,7 @@ vGe
xno
jVM
kXC
vkh
jVM
vkh
kWF
wtw
Expand Down Expand Up @@ -102119,7 +102141,7 @@ xHD
xHD
jVM
jBu
vkh
jVM
vkh
vkh
vkh
Expand Down
Loading

0 comments on commit 98650c4

Please sign in to comment.