Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

No roundstart playable MULEs / Trampling requires hacking #76837

Merged
merged 8 commits into from Jul 19, 2023

Conversation

Jacquerel
Copy link
Contributor

@Jacquerel Jacquerel commented Jul 14, 2023

About The Pull Request

Prevailing feedback has been:

  • The player base cannot be trusted to control MULEbots.
  • It should be clearer what bots can and can't do.

The former is easy to fix.
The latter is sort of a matter for policy but I'm going to investigate giving bots a rudimentary laws system. Plus that sounds much more controversial than this so I am going to atomise this outside of that PR.

MULEbots can still be set to allow sentience by cargo technicians, but don't start that way.

ADDITIONALLY this PR just changes it so that MULEbots do not crush people unless:

  • They have been emagged.
  • Their safety wire has been cut.
    Either means works, so it's not too hard to access for nefarious purposes, but hard to do to yourself.
    Otherwise they just slow down for a few seconds instead.

Also fixed an unrelated name bug while I was there.

Closes #76926

Why It's Good For The Game

Players would take them, not deliver any cargo, and repeatedly ask people to lie down in front of them.
Plus Tram has 5 of the things which is frankly too many to be wandering around the bar.

Changelog

🆑
balance: You can't possess a MULE as soon as the round starts, someone will have to give you permission.
balance: MULEbots no longer crush prone characters unless they have been hacked (or emagged).
fix: Bots can put numbers in their names, what with being robots.
admin: Adds attack logging when certain wires are cut (for instance: MULEbot safeties)
/:cl:

@tgstation-server tgstation-server added Balance Changes to functionality that modifies how effective certain methods are at powergaming Fix Rewrites a bug so it appears in different circumstances labels Jul 14, 2023
@carlarctg
Copy link
Contributor

Base sentient MULEbots should have their crushing significantly nerfed, something closer to clown car flattening. Make it funny and not broken. Unless it's emagged, then you can go wild again.

Here's my ideal table:

MULEbot: No Crush
Sapient MULEbot: No Crush
Sapient Hacked MULEbot: Flatten
Hacked MULEbot: Crush
Emagged MULEbot: Crush
Sapient Emagged MULEbot: Crush

@SomeoneYouProbablyKnow
Copy link
Contributor

SomeoneYouProbablyKnow commented Jul 14, 2023

MULEbot: No Crush Sapient MULEbot: No Crush Sapient Hacked MULEbot: Flatten Hacked MULEbot: Crush Emagged MULEbot: Crush Sapient Emagged MULEbot: Crush

Occam's razor : it's just less complicated to make em not sentient shiftstart.

But fear not, any QM worth their salt (me obviously) will activate them all (which conveniently places the blame on the QM should those bots decide to run people over)

@carlarctg
Copy link
Contributor

carlarctg commented Jul 14, 2023

MULEbot: No Crush Sapient MULEbot: No Crush Sapient Hacked MULEbot: Flatten Hacked MULEbot: Crush Emagged MULEbot: Crush Sapient Emagged MULEbot: Crush

Occam's razor : it's just less complicated to make em not sentient shiftstart.

But fear not, any QM worth their salt (me obviously) will activate them all (which conveniently places the blame on the QM should those bots decide to run people over)

You are misusing occams razor. You said it yourself, that this wouldnt actually solve any problems, just shift blame (which isnt even accurate anyways as those mulebots aren't solo antagonists or beholden to you)

The problem with MULEbots, needing to be activated roundstart or not, is that their crushing is a passive ability, that can't be disabled, that activates automatically and instantly cripples anyone with injuries that need both someone else to fix (Brought to crit) and a hefty recovery period (Broken bones).

And this is the ONLY thing they have. And they can get it extremely easily and for free by harassing people until they get hacked, which will work if not on the QM, then the CT, or the roboticist, or the assistant.

TL;DR People pick MULEbots for crushing, not for cargoing. This won't change until the former is restricted from sapients.

@ExcessiveUseOfCobblestone
Copy link
Contributor

if someone wants to be a package transport bot i see no problem with that.

This really should be on the admins to enforce that bots dont just use the role to play as calvary for sec/validhunters if not to be the validhunter themselves. Id rather help facilitate that route (IE laws) versus remove the role wholesale because of bad actors.

@github-actions github-actions bot added the Merge Conflict Adding upstream files to your repo via drag and drop won't resolve conflicts label Jul 15, 2023
@JohnFulpWillard
Copy link
Member

we should remove mules being able to run over people unless emagged or something so they fit in with every other bot, maybe

@Capsandi
Copy link
Contributor

if someone wants to be a package transport bot i see no problem with that.

The thing is that nobody actually wants to be a package transport bot and the only interest in these roles is to grief or to metagrudge. The moment that the policy and code scaffolding is set up to support the popular new(no longer gated behind robotics cooperating so effectively new) bot roles, the people playing it will either leave due to a lack of ability to grief or because the role is knowingly designed to have less impact than even maintenance drones. Separating bots from PAIs was a good move but there's no future in regularly playable bots.

@tgstation-server tgstation-server removed the Merge Conflict Adding upstream files to your repo via drag and drop won't resolve conflicts label Jul 15, 2023
@Jacquerel
Copy link
Contributor Author

we should remove mules being able to run over people unless emagged or something so they fit in with every other bot, maybe

Probably true, I am still making the initial change on top of that though due to general dereliction of duty by mulebot players.

@SomeoneYouProbablyKnow
Copy link
Contributor

SomeoneYouProbablyKnow commented Jul 16, 2023

You are misusing occams razor.

Well, i'm slightly twisting it for emphasis but sure. You DO get what i'm saying though.

Honestly running people over is kinda nuts and is an unhealthy ability for a cargo runner bot to just have, but that's out of scope. To fix mulebots causing havoc it's best to first do this then figure out crushing.

If you do decide to change crushing, don't lock it behind an emag so that it's avaliable to other antags (i'm mostly thinking about revs here, mulebots ARE the proletariat). Probably not emp tho, we know how defibs turned out.

And i DO love running deliveries as a mule.

@ATH1909
Copy link
Contributor

ATH1909 commented Jul 16, 2023

And this is the ONLY thing they have.

mulebots can also strap other bots to themselves to sort of approximate their roles (e.g. picking up a medibot and carrying it to people), which I think is neat

or do deliveries, although I admit that that's not what most players pick mulebot for

@Jacquerel
Copy link
Contributor Author

If you do decide to change crushing, don't lock it behind an emag so that it's avaliable to other antags (i'm mostly thinking about revs here, mulebots ARE the proletariat). Probably not emp tho, we know how defibs turned out.

I've locked it to emag or the usual wire hacking you would use to remove the safeties, so it is reasonably accessible to any cargo tech who can easily print tools.

@github-actions github-actions bot added the Merge Conflict Adding upstream files to your repo via drag and drop won't resolve conflicts label Jul 17, 2023
@ExcessiveUseOfCobblestone
Copy link
Contributor

The thing is that nobody actually wants to be a package transport bot and the only interest in these roles is to grief or to metagrudge. The moment that the policy and code scaffolding is set up to support the popular new(no longer gated behind robotics cooperating so effectively new) bot roles, the people playing it will either leave due to a lack of ability to grief or because the role is knowingly designed to have less impact than even maintenance drones. Separating bots from PAIs was a good move but there's no future in regularly playable bots.

people used to play cargo tech when it was just package transport, if people rarely take the role thats fine but I dont see a problem with the option being available. Laws and policy around using the role outside of the intent would equally fix this, if it goes largely unused its not a problem since we agree its a very minimal impact role.

@tgstation-server tgstation-server removed the Merge Conflict Adding upstream files to your repo via drag and drop won't resolve conflicts label Jul 17, 2023
@Jacquerel Jacquerel changed the title You can't become a MULEbot at round start No roundstart playable MULEs / Trampling requires hacking Jul 17, 2023
@TheVekter
Copy link
Contributor

TheVekter commented Jul 17, 2023

If you do decide to change crushing, don't lock it behind an emag so that it's avaliable to other antags (i'm mostly thinking about revs here, mulebots ARE the proletariat). Probably not emp tho, we know how defibs turned out.

I've locked it to emag or the usual wire hacking you would use to remove the safeties, so it is reasonably accessible to any cargo tech who can easily print tools.

If we're doing this, can we make it explicitly log to admin logs when someone's hacked that wire, assuming it isn't already? It'd make our lives a lot easier.

E: He did it, the madman

@optimumtact
Copy link
Member

I'm blocking this until you remove the emag requirement for trampling.

@optimumtact optimumtact added the Do Not Merge You must have really upset someone label Jul 17, 2023
@TheVekter
Copy link
Contributor

I'm blocking this until you remove the emag requirement for trampling.

It requires either emagging or hacking, not only emagging.

@optimumtact optimumtact removed the Do Not Merge You must have really upset someone label Jul 17, 2023
@Time-Green Time-Green merged commit 14aef72 into tgstation:master Jul 19, 2023
19 checks passed
comfyorange added a commit that referenced this pull request Jul 19, 2023
github-actions bot added a commit that referenced this pull request Jul 19, 2023
Jolly-66 added a commit to TaleStation/TaleStation that referenced this pull request Jul 19, 2023
…es hacking (#6891)

Original PR: tgstation/tgstation#76837
-----
## About The Pull Request

Prevailing feedback has been:
- The player base cannot be trusted to control MULEbots.
- It should be clearer what bots can and can't do.

The former is easy to fix.
The latter is sort of a matter for policy but I'm going to investigate
giving bots a rudimentary laws system. Plus that sounds much more
controversial than this so I am going to atomise this outside of that
PR.

MULEbots can still be set to allow sentience by cargo technicians, but
don't start that way.

ADDITIONALLY this PR just changes it so that MULEbots do not crush
people unless:
- They have been emagged.
- Their safety wire has been cut.
Either means works, so it's not too hard to access for nefarious
purposes, but hard to do to yourself.
Otherwise they just slow down for a few seconds instead.

Also fixed an unrelated name bug while I was there.

Closes #76926

## Why It's Good For The Game

Players would take them, not deliver any cargo, and repeatedly ask
people to lie down in front of them.
Plus Tram has 5 of the things which is frankly too many to be wandering
around the bar.

## Changelog

:cl:
balance: You can't possess a MULE as soon as the round starts, someone
will have to give you permission.
balance: MULEbots no longer crush prone characters unless they have been
hacked (or emagged).
fix: Bots can put numbers in their names, what with being robots.
admin: Adds attack logging when certain wires are cut (for instance:
MULEbot safeties)
/:cl:

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: Jolly-66 <70232195+Jolly-66@users.noreply.github.com>
@Jacquerel Jacquerel deleted the calm-down-donkey branch July 19, 2023 20:15
Sealed101 added a commit to Sealed101/tgstation that referenced this pull request Jul 22, 2023
commit 0d769e0ffaaa2b0f2be2edb9659c233860420ec1
Author: Jacquerel <hnevard@gmail.com>
Date:   Fri Jul 21 13:51:56 2023 +0100

    Removes two redundant components (#76866)

    We're starting to get to have enough components that people don't
    realise that what they want already exists but doesn't have the name
    they expect 🙃

    I recently added `track_hierarchical_movement` which is similar enough
    to `connect_containers` that it shouldn't independently exist, even if I
    like sending a new signal more than the ugly setup pattern for
    `connect_loc`.

    `trait_loc` is actually older than `give_turf_traits` but
    `give_turf_traits` covers more edge cases than `turf_loc` so seems like
    the better one to maintain.
    HOWEVER `give_turf_traits` held a list of references to atoms in it,
    which isn't great in an element. I couldn't think of a way to completely
    eliminate the list, but it isn't a list of references any more so it
    shouldn't cause any hard deletions.

    Having two components which do the same thing but marginally differently
    is confusing and going to cause us trouble down the line.

    Not player facing

commit decdf51a90b45ea61ea1fe3ece85638d99731081
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Sat Jul 22 00:43:13 2023 +1200

    Automatic changelog for PR #76948 [ci skip]

commit ab4db732260922019ebc302ad20a9a0395c98742
Author: SapphoQueer <94389951+SapphoQueer@users.noreply.github.com>
Date:   Fri Jul 21 14:42:50 2023 +0200

    Fixes a bug where borgs effectively break IDs when removing them from modular consoles (#76948)
    Fixes a bug where borgs effectively break IDs when removing them from
    modular consoles. Previously when they did this it would cause the ID to
    be unretrievable.
    Fixes a stinky bug!!
    :cl:Sapphoqueer
    fix: fixes a bug where borgs and TK users could effectively break ID's
    by removing them from modular computers.
    /:cl:

commit 65a4a0f29c9883d9861d9ac2f918276bd65209d3
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Sat Jul 22 00:39:53 2023 +1200

    Automatic changelog for PR #76962 [ci skip]

commit 2f3b186e216abbd5a2f38395e692ccb6ce956fc1
Author: Nick <42454181+Momo8289@users.noreply.github.com>
Date:   Fri Jul 21 08:39:30 2023 -0400

    Removes the hat whitelist from the hat stabilizer mod (#76962)
    This PR allows you to use any hat with the hat stabilizer module.
    Before, it was limited to a pretty small, very arbitrary list of hats
    (captain's hats, centcom hats, and a few gimmicky hats), making it
    disappointingly limited to both the captain, and anyone who finds the
    thing in maints. I'm guessing this limit was put in place to avoid janky
    looking hats, but plasmamen get the exact same thing without the
    restriction, and there haven't really been any complaints there. While I
    did not test this with every single hat, I *did* test it with every hat
    currently in the autodrobe, and there wasn't any jank there, even with
    things like wigs, and hats that cover the entire head.
    There was also a bug/oversight where the MOD eating apparatus module
    didn't properly disable pepper spray protection like it was supposed to.
    It was literally just a matter of missing parentheses, so i fixed that
    too.

    Not super sure what to mark this change as btw (qol? balance? removal?)
    so if I should change it, let me know.
    Allows both the captain and anyone who finds/steals the module to
    actually wear the hats they want to wear, instead of being limited to a
    small, mostly arbitrary list of hats, and having less outfit choice that
    a plasmaman.
    :cl:
    qol: You can now use any hat with the hat stabilizer MOD
    fix: The MOD eating apparatus module now properly disables pepper spray
    protection
    /:cl:

commit 8539452cd645d714bb320364f6e94877f70d1cd1
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Sat Jul 22 00:17:06 2023 +1200

    Automatic changelog for PR #76966 [ci skip]

commit 7e1d97af9e4b6b7f90fbacc754fae939b6d16e49
Author: Justice <42555530+Justice12354@users.noreply.github.com>
Date:   Fri Jul 21 13:16:44 2023 +0100

    Removes the word "chemical" from "chemical patch" (#76966)
    In #76011, I bitched and moaned about how the ChemMaster gives patches a
    huge ass name. I've talked to other Medical Doctor mains and I also
    heard bitching about the word "chemical", which is just a pain in the
    ass. It seems many of us just end up removing it because it's so
    repetitive and makes the patch's name long fnr. I don't think the word
    "chemical" is really needed in there since you can clearly tell it's a
    chemical patch just by looking at the word "patch" and the sprite.

    I don't think this should affect anything else in the game in a negative
    way. In that same issue, it was suggested that the cap for names was
    increased instead, but this also solves the issue of the word "chemical"
    taking up so much space in the patch's name without touching unknown
    lands.
    Less words, more healing!
    :cl:
    qol: The word "chemical" has been removed from "chemical patch" when
    printing patches
    /:cl:

commit e3d68c0236a97e5bf3f71c2a14632a656c609b19
Author: Tim <timothymtorres@gmail.com>
Date:   Fri Jul 21 05:55:29 2023 -0500

    Robotic organ and disease improvements (#76766)

    In the code description for the `ORGAN_ROBOTIC` flag, it says that
    robotic organs are not supposed to decay or regenerate health. I went
    and fixed this and added some more "robotic" behavior.

    New changes for robotic organs:
    - No longer heal damage passively
    - No longer gain health from revival
    - No longer heal in the smart organ fridge
    - No longer heal from pluoxium
    - Robotic ears no longer heal from ear healing items (earmuffs, etc.)
    - Robotic eyes are immune to changeling blind stings
    - Robotic eyes no longer heal from occuline

    New changes for diseases:
    - Some diseases now require an organ to work. A robotic organ will give
    immunity to the disease symptom unless the disease has "Inorganic
    Biology".
    - The transmission methods for diseases require organs to work but
    robotic organs are immune. (except inorganic biology) Airborne disease
    transmission require lungs. Ingested (drunk or eaten) disease
    transmission requires a stomach. Blood (inject or patch) disease
    transmission requires a heart.
    - Organs removed from a mob that is afflicted with a disease will be
    infectious while handling or transplanting it. (again, robotic organs
    are immune unless inorganic biology is present) Certain admin spawned or
    special diseases are exempt from this transmission method.
    - A stomach is required for nebula nausea, gastritium, carpellosis,
    metabolic boost, vomit, weight loss, death sandwich poisoning,
    - Lungs are required for choking, asphyxiation, cough, cold9, oxygen
    restoration, sneezing, flu, cold, spanish flu, tuberculosis
    - A liver is required for tissue hydration, plasma fixation, parasitic
    infection
    - Ears are required for deafness, sensory restoration
    - A heart is required for toxolysis, heart failure
    - Eyes are required for sensory restoration, hyphema
    - A tongue is required for voice change, parrot possession, pierrot
    throat
    - Wizarditis no longer requires a head (wtf?) to function

    Robotic organs should behave as intended. Not naturally healing (like
    organic organs) was supposed to be their downside to counteract their
    their ability to not decay upon death.

    :cl:
    fix: Fix robotic organs to not gain health passively, from revival,
    smart organ fridge, pluxium, occuline, and earmuffs.
    add: Some diseases now require the appropriate internal organ to work. A
    robotic organ will give immunity to the disease symptom unless the
    disease has "Inorganic Biology".
    add: Disease transmission methods now require an internal organ to be
    successful. Robotic organs give immunity. (except inorganic biology)
    Airborne disease transmission require lungs. Ingested (drunk or eaten)
    disease transmission requires a stomach. Blood (inject or patch) disease
    transmission requires a heart.
    add: Organs removed from a mob that is afflicted with a disease will be
    infectious while handling or transplanting it. (again, robotic organs
    are immune unless inorganic biology is present) Certain admin spawned or
    special diseases are exempt from this transmission method.
    add: A stomach is required for nebula nausea, gastritium, carpellosis,
    metabolic boost, vomit, weight loss, death sandwich poisoning
    add: Lungs are required for choking, asphyxiation, cough, cold9, oxygen
    restoration, sneezing, flu, cold, spanish flu, tuberculosis
    add: A liver is required for tissue hydration, plasma fixation,
    parasitic infection
    add: Ears are required for deafness, sensory restoration
    add: A heart is required for toxolysis, heart failure
    add: Eyes are required for sensory restoration, hyphema
    add: A tongue is required for voice change, pierrot throat
    bal: Remove head requirement for wizarditis disease
    /:cl:

    ---------

    Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>

commit ec3e5582044eeba9c7a4cc58cb3e14f41db8bcd2
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Fri Jul 21 20:08:31 2023 +1200

    Automatic changelog for PR #76955 [ci skip]

commit f46c2ff75ca2b142355ac2eb930aab7596abf927
Author: scriptis <scriptif@proton.me>
Date:   Fri Jul 21 03:08:06 2023 -0500

    add pony (#76955)

commit 0527330e0a4d49f95c8b43a6ec384cb04a5982f3
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Fri Jul 21 17:58:30 2023 +1200

    Automatic changelog for PR #76704 [ci skip]

commit 88f259980bac7825416524f5036ab02893c077c2
Author: itseasytosee <55666666+itseasytosee@users.noreply.github.com>
Date:   Fri Jul 21 00:58:05 2023 -0500

    The Leaning Update (and Density Refractor) (#76704)
    WHAT HAS CHANGED MECHANICALLY
    You can now lean up against walls.

    https://github.com/tgstation/tgstation/assets/55666666/bf81b7b5-6cab-4fc3-9887-075351511505

    To lean against a wall, simply face opposite to it and drag your sprite
    onto it.
    Doing so makes you non-dense, just like if you were laying down. This
    means people can walk through you, but you are still susceptible to
    melee and ranged attacks. Leaning up against a wall also mitigates your
    FOV loss by 30 degrees, as you can have a better look at your
    surrounding when you put more of your surroundings infront of you.
    Because it seemed thematic to lean up against the wall while smoking and
    then flick a cigarette away, cigarettes will now say they where
    "flicked" instead of thrown when you toss them, I also took the time to
    add a bit of variation into the throw text.

    A few bugs where you could become non dense and then run straight
    through people has been patched.

    NOT PLAYER FACING
    So basically I've implemented a system that keeps effects that manage a
    mob's density consistent with eachother.
    An example of some of the situations that could occur
    Effect A would render a spaceman undense and turn the player dense again
    once it was concluded
    Effect B would render a spaceman undense and then after a timer revert
    the spaceman to whatever state the spaceman was in before effect B
    started.
    Thus if you enabled effect A and then Effect B, setting your previous
    state of denseness to undense, and then concluded effect A, when Effect
    B would finish it would put you back into the state of density you were
    in when you started. This would render the spaceman permanently undense.

    To solve this, the system has been updated so that all instances of
    density adjustment to mobs are handled by traits from unique sources
    (with the exception undensity gained by laying down due to its
    prevalence.) All effects that handle density will no longer step on each
    others toes and can now be rain simultaneously without fear.
    Leaning is cool. Bugs are bad.
    :cl: itseasytosee
    add: You can now lean against walls! Simply turn your back to the wall
    and clickdrag yourself onto it.
    fix: There should no longer be any instances of spacemen being able to
    run straight through eachother as if they weren't even there.
    spellcheck: Added more variance to item throwing text.
    refactor: Mob density has been refactored
    /:cl:

commit 0fd34466820253d4d982b56cd44166218a821435
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Fri Jul 21 14:45:20 2023 +1200

    Automatic changelog for PR #76970 [ci skip]

commit 6023f471d6ca27bbc6436df1eed3c226981747cf
Author: Senefi <20830349+Peliex@users.noreply.github.com>
Date:   Thu Jul 20 19:02:58 2023 -0700

    Chemical storage area for station maps (#76970)

    creates a new area, /area/station/medical/chem_storage, to split the
    room away from the hallway on stations where it has an air alarm and
    atmospherics systems.

    Having more areas on maps is not generally something that I would think
    is a bad thing, if a good reason can be given though I'll close the PR,
    I was encouraged to make the change, as I think it would help split away
    the primary medical firelock from that room, which could trigger an air
    alarm and lock down the entire hall.

    *updated MetaStation Chem storage:*

    ![image](https://github.com/tgstation/tgstation/assets/20830349/21866dc7-c0f1-48f3-82be-088479b0dd7d)

    :cl:Senefi
    add: MetaStation Chemical Storage now has its own APC
    add: MetaStation Chemical Storage is slightly larger than before
    add: Ice Box Station Chemical Storage now has its own APC
    /:cl:

commit 7375cb6c025fb3362d1cbdb340325d6588f70d08
Author: Changelogs <action@github.com>
Date:   Fri Jul 21 00:22:36 2023 +0000

    Automatic changelog compile [ci skip]

commit 68184a2e507fa923c6f35bd1df8535cc68b0d8fa
Author: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Date:   Thu Jul 20 12:00:52 2023 -0700

    Stabilizes code that flicks overlays to view/all clients (#76937)

    Rather then using images and displaying them with client.images, we can
    instead simply make an object, give it the passed in image/MA's
    appearance, and then vis_contents it where we want.

    If you want to animate things, you can just use the atom we return from
    the proc call.

    This ends up costing about 25% of the best case scenario (one guy
    online)
    It will save more time with more users, but it also allows us to avoid
    the hypersuffering that is passing GLOB.clients into the flick proc. So
    I think I'm happy enough with this.

    For context, here's average per call cost for flick_overlay_view() right
    now.
    It winds between 5e-5 and 1e-4. With these changes we should pretty
    consistently hit the low end of this, because none of our work really
    varies all that much.

    ![flick_avg](https://github.com/tgstation/tgstation/assets/58055496/3483e022-9cc5-490a-be5e-eb79f4e2110b)

    (I was using sswardrobe for this, but it ends up being a lot slower so
    like, why yaknow)
    ```
    /atom/movable/flick_visual
            New: 3.65625ms
            Provide: 7.4375ms
            Qdel: 9.4375ms
            Stash: 9.46875ms
    ```

    Using our tools should not make your code eat cpu time for no reason.
    Hearers is expensive, iterating clients is expensive, let's not be
    expensive.

commit 2baf9dbf5720b8ffffc1d7961153491dd3a2630e
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Fri Jul 21 03:07:05 2023 +1200

    Automatic changelog for PR #76951 [ci skip]

commit 42eef0c34bf5416dca1d951e34d31be54a39a1e2
Author: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Date:   Thu Jul 20 10:58:15 2023 -0400

    Fixes the xeno pen being immediately broken out of (#76951)

    Turns out on Birdshot, Xenos can spit out of the xenobio pen through
    this

    ![image](https://github.com/tgstation/tgstation/assets/53777086/3c1c8a0b-b0e1-4094-9822-4bbeb52d705a)

    Making it incredibly easy to break out of.

    I moved it up a tile, and to keep it consistent, I moved the bottom one
    down a tile as well, giving some more space to the xenobio pen as well

    ![image](https://github.com/tgstation/tgstation/assets/53777086/3b9da43b-1b6f-43d6-8b8b-11bd0cf9e86f)

    Xenos cant break out of  the xenobio pen immediately, again.

    :cl:
    fix: [Birdshot] Xenos can no longer immediately destroy the shield wall
    generator to break out.
    /:cl:

commit 0fff30d8122286f62251626eb7c8364d02f79e25
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Fri Jul 21 01:25:12 2023 +1200

    Automatic changelog for PR #76908 [ci skip]

commit 5c0ffa31a8a029d15792b0c10fa7df0400a3ba58
Author: Blockaboo <139035652+Blockaboo@users.noreply.github.com>
Date:   Thu Jul 20 09:01:23 2023 -0400

    Tin man no longer causes you to drop all of your regular organs when you spawn in (#76908)

    People using the tin man trait will no longer spawn with all their
    biological organs on the floor.

    Fixes https://github.com/tgstation/tgstation/issues/76700

    Bugs are bad.
    :cl:
    fix: Tin man no longer causes you to drop all of your organs.
    /:cl:

    ---------

    Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>

commit 62e5a5058073c219e62eab2141001f7bad6ec77a
Author: Changelogs <action@github.com>
Date:   Thu Jul 20 00:22:49 2023 +0000

    Automatic changelog compile [ci skip]

commit 170b551243f10c3310de59453dfd8f1cf3ff55a9
Author: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Date:   Wed Jul 19 14:55:49 2023 -0700

    Ensures our linter and dreammaker agree on file extension ordering (#76947)

    Dreammaker will sort files by folder, then extension, then name We
    however lint only by folder and name, which leads to needing to play go
    between manually. this is dumb. let's not be dumb

commit 9c05cfb8270ed362a744470ecd934802bdcb5103
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Thu Jul 20 08:17:28 2023 +1200

    Automatic changelog for PR #76668 [ci skip]

commit 446f8591384543c6189495b3988447de94369c9e
Author: nikothedude <59709059+nikothedude@users.noreply.github.com>
Date:   Wed Jul 19 16:17:07 2023 -0400

    Adds an extra siphon mode using vents (locked behind emagging) (#76668)

    Vent siphon: Disables pressure checks of vents, disables scrubbers, and turns vent to siphon

    Useful for people extracting gas from a room - but also valuable for bad actors liking to fill distro with some bad atmosphere

commit 67b132199891c6d06dc3ab5cc49c73ad40338e7b
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 23:09:29 2023 +1200

    Automatic changelog for PR #76909 [ci skip]

commit 92795be8ace46c36088d5810dc2b36103c2b1550
Author: Nerevar <12636964+Nerev4r@users.noreply.github.com>
Date:   Wed Jul 19 05:09:08 2023 -0600

    Makes Spacers Taller (#76909)
    _Oye kowmang! Xídawang ting mi did owta we da beltalowda code fo tenye
    us tubik. Milowda gonya leva xox! Du ferí da Belte!_

    Or in other words, this Pull Request makes it so that people with the
    Spacer-Born quirk are now a lot taller.

    ![image](https://github.com/tgstation/tgstation/assets/12636964/6f18ab86-461b-44f6-9b06-88a5aeb7908a)
    About this tall, to be precise.

    ![image](https://github.com/tgstation/tgstation/assets/12636964/54ee324a-6018-4046-9394-c1d6f2514b96)
    It's accurate to the show, I swear.
    This makes spacers more visually identifiable and unique stand-outs
    among normal humans, ensuring that you're always well-aware of who is
    and isn't a spacer; which allows both finer group roleplay, and for
    out-group discrimination against the mf skinnies. The Belt will not be
    freed.
    :cl:
    add: Due to increased exposure to low-gravity due to constant generator
    failures, Spacer-Born have been showing up with increasingly tall
    statures.
    /:cl:

    Co-authored-by: Snakebittenn <12636964+Snakebittenn@users.noreply.github.com>

commit 78eefdf5d14a2bf93a12d58e2cf0502c9c73cd90
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 20:47:14 2023 +1200

    Automatic changelog for PR #76713 [ci skip]

commit 63c20c769d54423fce91f972a28abbc3f4e764c3
Author: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Date:   Wed Jul 19 14:08:40 2023 +0530

    [NO GBP] Minor Turbine Patches (#76713)
    If the turbine compressor input turf or the stator output turf was
    destroyed while the turbine is running(say the turf was bombed or
    deconstructed with an RCD) then the turbine would runtime as it would
    attempt to dump gases on the deleted turf.

    This fixes that.

    Also adds a warning examine for the rotor if its parts are not
    connected, to let you know if something is off which is useful when you
    don't have the turbine computer to tell you that.
    :cl:
    fix: turbine does not runtime when its input or output turf is destroyed
    while its running
    qol: add warning examine for rotor when its parts are not connected
    /:cl:

commit 9795a9a0238cb714b189b6e17a91e9ef614a62b5
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 20:36:59 2023 +1200

    Automatic changelog for PR #76931 [ci skip]

commit 46457938826718802d979420fc654efab29b71a8
Author: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Date:   Wed Jul 19 04:33:43 2023 -0400

    Fixes a handful of cult issues w/ mind transfer (#76931)

    Makes cult spells spawn in the mind, which is required for spells to
    transfer between bodies
    Moves bloodsense and the trait to heal from pylons from ``on_gain()``
    (the proc that is called once when the antag is given) to
    ``apply_innate_effects`` (the proc that is called one time per body),
    basically this means bloodsense and pylon healing follows the cultist
    instead of remaining solely on their original body.
    Adds a check to cult master vote, because it runtimes when transferring
    body.

    Closes https://github.com/tgstation/tgstation/issues/76746
    Fixes part of https://github.com/tgstation/tgstation/issues/76671

    :cl:
    fix: Cult spells, bloodsense, and pylon healing now follow cultists
    through mind transfer (such as body swapping)
    /:cl:

commit 6e9433e569462ee5214ccbd78f070c28fed8d9b8
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 20:32:54 2023 +1200

    Automatic changelog for PR #76933 [ci skip]

commit 0fc86885d1f71c5c9bf29aa54e22be748541c196
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 20:32:32 2023 +1200

    Automatic changelog for PR #76784 [ci skip]

commit 4626de9980e37d97fdc0849fdcfc4eda05ecb778
Author: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Date:   Wed Jul 19 04:31:37 2023 -0400

    Fixes cryo cells being on at roundstart (#76933)

    Fixes a minor oversight in cryo cell's update overlays which gave the
    exact same overlay regardless of being on/operational, now they have the
    proper 'off' overlay when necessary.

    Fixes a minor visual bug with cryo cells.

    :cl:
    fix: Cryo cells no longer appear on when off.
    /:cl:

commit 472924a848776e33c309c28729a7d1a31e551753
Author: A miscellaneous Fern <80640114+FernandoJ8@users.noreply.github.com>
Date:   Wed Jul 19 10:31:07 2023 +0200

    Terminals will be on the same layer as their APC/SMES by default & Selecting a layer when constructing an APC terminal now works. (#76784)

    Terminals built on APCs and SMES units using left click will now be on
    the same layer as the machine they're being built for, instead of the
    first layer.

    They can still be built on other layers using right click and that
    feature will now work for APCs, not just SMES units (it was seemingly
    forgotten to actually use the argument of the make_terminal() function.)

    It is far more intuitive this way, and makes building terminals
    generally more convenient.
    The fix in the case of APCs is good simply by virtue of being a fix.
    :cl:
    qol: terminals built by left-clicking on SMES and APC units will now be
    on the same layer as the machine.
    fix: constructing a terminal on a specific layer with right-click now
    works for APCs, not just SMES units
    /:cl:

commit 75b2f5d179e6062ce8f08fc86e2b8f6410cfb455
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 20:24:43 2023 +1200

    Automatic changelog for PR #76755 [ci skip]

commit 3e834560a104a869d1fef216182977eada1cee80
Author: SirNooben <132080629+SirNooben@users.noreply.github.com>
Date:   Wed Jul 19 11:13:57 2023 +0300

    Fixes limbgrower and mining order console UI (#76755)

    Fixes the alien limbgrower UI from repeating itself
    Fixes mining order console UI preventing you from ordering more than 20
    items and ordering negative numbers of items by using the buttons for
    remove_one and add_one

    Closes #74875
    Closes #76767

    Makes it easier to use and look at
    Fixes being able to order more items or get them for free from the
    mining order conso;e

    :cl:
    fix: Fixed the alien limbgrower UI
    fix: Fixed being able to order negative or more than 20 items in mining
    order console
    /:cl:

commit 24bc03a6d7b7e71c0400abbd578c723b8457bc92
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 20:13:02 2023 +1200

    Automatic changelog for PR #76782 [ci skip]

commit d56d5a62319f7a30117c925161d6957e1d788ca7
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 20:12:46 2023 +1200

    Automatic changelog for PR #76764 [ci skip]

commit dfa319caefc764a97b32d58984618badae82f9b6
Author: Helg2 <93882977+Helg2@users.noreply.github.com>
Date:   Wed Jul 19 11:11:20 2023 +0300

    Adds sprite for .50 incendiary magazine. (#76782)
    It was just invisible which wasn't quite cool.
    Its mostly coder sprite so suggestions accepted.

    ![image](https://github.com/tgstation/tgstation/assets/93882977/5fdef820-ac54-4f91-a69e-2798ff4e5022)

    ![image](https://github.com/tgstation/tgstation/assets/93882977/61951d02-6cb0-474d-8148-0ad7a7cd9b46)

    ![image](https://github.com/tgstation/tgstation/assets/93882977/246af956-e079-4127-8780-39a61c0d27c8)
    It wont be invisible.
    :cl:
    image: .50 incendiary magazine now has sprite.
    /:cl:

commit 1a0a8e6e9af0679649e5e5151bc8e60d1f897c14
Author: Bloop <13398309+vinylspiders@users.noreply.github.com>
Date:   Wed Jul 19 04:10:49 2023 -0400

    Attempts to fix an issue with gravity generators triggering CI failures (#76764)
    bug. EDIT: Just kidding, that turned out to not be it either.

    The issue:

    During init, when the gravity generator is being set up and creating its
    proximity field, a turf can get the `COMSIG_ATOM_HAS_GRAVITY` signal
    registered to it multiple times. It seems like it shouldn't be possible
    for this to happen due to the `HAS_TRAIT(TRAIT_FORCED_GRAVITY)` check,
    but it can.

    I've only seen this happen during CI and have not been able to reproduce
    it during runtime, but it comes up often enough to be a nuisance when
    testing PRs.

    As seen below, causing CI failures. The problem turf is directly below
    the `gravity_generator/main` object.

    ![firefox_D4BgPpRbW6](https://github.com/tgstation/tgstation/assets/13398309/d41355de-d05b-4f9d-8305-524408c93022)

    I spent too much time trying to figure out the cause of this duped
    signal when it really does not matter if this signal gets overridden
    here, since it's always going to be from the same proximity field.
    Suppressing the warning will stop the CI failures without any ill
    effects in this case.

    So let's just do that.

    Less CI failures for something trivial.

    :cl:
    fix: fixes gravity generators causing CI failures from overriding a
    signal
    /:cl:

commit f9818f2ef59f2e511ae44169c79084637dcc36e5
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 20:09:41 2023 +1200

    Automatic changelog for PR #76779 [ci skip]

commit 2eb0c65743ef0cdc47d6ac5e77815b54bfa3fa42
Author: Lufferly <40921881+Lufferly@users.noreply.github.com>
Date:   Wed Jul 19 01:09:17 2023 -0700

    balloon alerts for storage failures (#76779)

    Adds some balloon alerts for when you fail to put something in storage
    items (when there is not enough room, item is too big, etc.)
    Also adds some balloon alerts for when you fail with a duffelbag (if
    it's zipped it will say "closed!", and failure alerts if you move when
    zipping/unzipping)

    Balloon alerts are immediately obvious and leave no residue, which is
    good for failing to put something into a bag, as you probably don't
    really care to look back on it in the future, and want to immediately
    know why you cant put it in. I chose not to add balloon alerts for
    putting things in storage successfully for a couple reasons. For balloon
    alerts, they would be too long, but they hold fairly useful information
    so I don't want to cut down the messages. Also just having something
    like "placed" looked really bad in my opinion. I also can see what you
    or others put in their bag theoretically being useful to look back on. I
    think the compromise of storage failures and successes being held in
    different places (balloon alerts vs in chat) is fine, but if others
    disagree I can change it or just close this.

    :cl: Seven
    qol: Added some balloon alerts for failing to place items in storage
    containers
    /:cl:

    ---------

    Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

commit 9cf99b9b34d1d107569fd2f9a602e90ada6457fe
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 20:02:21 2023 +1200

    Automatic changelog for PR #76837 [ci skip]

commit 14aef72a4a078ccc25b55b94e41ab8573d32ee4a
Author: Jacquerel <hnevard@gmail.com>
Date:   Wed Jul 19 09:01:58 2023 +0100

    No roundstart playable MULEs / Trampling requires hacking (#76837)

    Prevailing feedback has been:
    - The player base cannot be trusted to control MULEbots.
    - It should be clearer what bots can and can't do.

    The former is easy to fix.
    The latter is sort of a matter for policy but I'm going to investigate
    giving bots a rudimentary laws system. Plus that sounds much more
    controversial than this so I am going to atomise this outside of that
    PR.

    MULEbots can still be set to allow sentience by cargo technicians, but
    don't start that way.

    ADDITIONALLY this PR just changes it so that MULEbots do not crush
    people unless:
    - They have been emagged.
    - Their safety wire has been cut.
    Either means works, so it's not too hard to access for nefarious
    purposes, but hard to do to yourself.
    Otherwise they just slow down for a few seconds instead.

    Also fixed an unrelated name bug while I was there.

    Closes #76926

    Players would take them, not deliver any cargo, and repeatedly ask
    people to lie down in front of them.
    Plus Tram has 5 of the things which is frankly too many to be wandering
    around the bar.

    :cl:
    balance: You can't possess a MULE as soon as the round starts, someone
    will have to give you permission.
    balance: MULEbots no longer crush prone characters unless they have been
    hacked (or emagged).
    fix: Bots can put numbers in their names, what with being robots.
    admin: Adds attack logging when certain wires are cut (for instance:
    MULEbot safeties)
    /:cl:

commit 090c2348de5d1fe2735a94d7975c73ea7203f6be
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 19:52:12 2023 +1200

    Automatic changelog for PR #76873 [ci skip]

commit 2b117e5d2f08e7ec21588f32d617defc80360b63
Author: Lufferly <40921881+Lufferly@users.noreply.github.com>
Date:   Wed Jul 19 00:51:52 2023 -0700

    Alien acid no longer eats through reinforced walls and floors (#76873)

    Fixes #76473
    Title, This was broken cause I made xenos directly apply the acid
    component
    Makes the acid component a bit safer to directly add to something

    Bug fixes good, cleaning my own mess. Surely now we can safely contain
    xenos, right?

    :cl: Seven
    fix: Xeno's corrosion ability no longer breaks reinforced walls and
    floors
    /:cl:

commit cb7e5906a2ac5de17e4e46f7e483d146648deb1a
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 19:50:55 2023 +1200

    Automatic changelog for PR #76861 [ci skip]

commit 1108af52c3c9af9ef2d2226640f05df37b55a0e2
Author: Helg2 <93882977+Helg2@users.noreply.github.com>
Date:   Wed Jul 19 10:50:30 2023 +0300

    Adds circuit for bank machine. (#76861)
    Bank machine now has a circuit so you can repair it.
    You can steal it from the secure tech storage.
    You can research it and print in the same node as comms console.
    Also i messed around with start_siphon proc by making check for
    unauthorized before siphoning sets to TRUE so supposedly that should
    prevent incorrect messages when someone starts to siphon.
    Added gps signal to it because of possibility of creating custom area
    and building machine there.
    You can distract people with it, you can rob cargo with it, you can
    repair it when someone breaks it.
    :cl:
    add: Bank machine now has a circuit for it. Spawns in secure tech
    storage and researchable in the same nod as comms console.
    balance: Due to possibility of creating area and making there bank
    machines that aren't roundstart will have gps signals.
    fix: Bank machine now doesn't yell about unauthorized credit withdrawal
    when its authorized.
    /:cl:

    ---------

    Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>

commit a6c68ece4f7f81adf9cf9308daa4e7ea278107b9
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 16:40:17 2023 +1200

    Automatic changelog for PR #74365 [ci skip]

commit 41f20bc3ced4e7853a09f2d5e1dcf46346f2e51f
Author: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Date:   Tue Jul 18 21:39:55 2023 -0700

    [MDB IGNORE] Angled Lights & Lighting Prototyping Tool  (#74365)

    Hello friends, I've been on a bit of a lighting kick recently, and I
    decided I clearly do not have enough things to work on as it is.
    This pr adds angle support to static lights, and a concepting/debug tool
    for playing with lights on a map.

    Let's start from first principles yeah?

    Mappers, since they can't actually see a light's effect in editor, tend
    to go off gut.
    That gut is based more off what "makes sense" then how things actually
    work
    This means they'll overplace light sources, and also they tend to treat
    lights, particularly light "bars" (the bigger ones) as directional.
    So you'll have two lights on either sides of a pillar, lights inside a
    room with lights outside pointing out, etc.

    ![image](https://user-images.githubusercontent.com/58055496/228785032-63b86120-ea4c-4e52-b4e8-40a4b61e5bbc.png)

    This has annoying side effects. A lot of our map is overlit, to the
    point that knocking out a light does.... pretty much nothing.
    I find this sad, and would like to work to prevent it. I think dark and
    dim, while it does not suit the normal game, is amazing for vibes, and I
    want it to be easier to see that.

    Angled lights bring how lights work more in line with how mappers expect
    lights work, and avoids bleedover into rooms that shouldn't be bled
    into, working towards that goal of mine.

    This is more complex then you'd first think so we'll go step by step

    ![image](https://user-images.githubusercontent.com/58055496/228786117-d937b408-9bc2-4066-9aee-aae21b047151.png)

    Oh before we start, some catchup from the last time I touched lighting
    code.
    Instead of doing a lighting falloff calculation for each lighting corner
    (a block that represents the resolution of our lights) in view we
    instead generate cached lightsheets. These precalculate and store all
    possible falloffs for x and y distances from a source.

    This is very useful for angle work, since it makes it almost totally
    free.

    Atoms get 2 new values. light_angle and light_dir
    Light angle is the angle the light uses, and light_dir is a cardinal
    direction it displays in

    We take these values, and inside sheetbuilding do some optional angle
    work. getting the center angle, the angle of a pair of coords, and then
    the delta between them.
    This is then multiplied against the standard falloff formula, and job
    done.

    We do need some extra fenangling to make this all work nicely tho.

    We currently use a pixel turf var stored on the light source to do
    distance calculations.
    This is the turf we pretend the light source is on for visuals, most
    often used to make wall lights work nice.
    The trouble is it's not very granular, and doesn't always have the
    effect you might want.

    So, instead of generating and storing a pixel turf to do our distance
    calculations against, we store x and y offset variables.
    We use them to expand our working range and sheet size to ensure things
    visually make sense, and then offset any positions by them.

    I've added a way for sources to have opinions on their offsets too, and
    am using them for wall lights.
    This ensures the angle calculations don't make the wall behind a light
    fulldark, which would be silly.

    In the interest of helping with that core problem, lights being complex
    to display, I've added a prototyping tool to the game.
    It's locked behind mapping verbs, and works about like this.

    Once the verb is activated, it iterates over all the sources in the
    world (except turfs because those are kinda silly), outlining and
    "freezing" them, preventing any future changes.
    Then, it adds 3 buttons to the owners of a light source.

    ![image](https://user-images.githubusercontent.com/58055496/228776539-4b1d82af-1244-4ed6-8754-7f07e3e47cda.png)
    The first button toggles the light on and off, as desired.
    The third allows you to move the source around, with a little targeting
    icon replacing your mouse
    The second tho, that's more interesting.

    The second button opens a debug menu for that light

    ![image](https://user-images.githubusercontent.com/58055496/228777811-ae620588-f08a-4b50-93a0-beea593aea77.png)
    There's a lot here, let's go through it.

    Bit on the left is a list of templates, which allow you to sample
    existing light types (No I have no idea why the background is fullwhite,
    need to work on that pre merge)
    You can choose one by clicking it, and hitting the upload button.

    This replaces your existing lighting values with the template's,
    alongside replacing its icon and icon state so it looks right.
    There are three types as of now, mostly for categorization. Bar, which
    are the larger typically stronger lights, Bulb, which are well, bulbs,
    and Misc which could be expanded, but currently just contains floor
    lights.

    Alongside that you can manually edit the power, range, color and angle
    of the focused light.
    I also have support for changing the direction of the light source,
    since anything that uses directional lighting would also tie light dir
    to it.
    This isn't *always* done tho, so I should maybe find a way to edit light
    dir too.

    My hope is this tool will allow for better concepting of a room's
    lights, and easier changing of individual object's light values to suit
    the right visuals.

    Ok so I applied angle lights to bars and bulbs, which means I am
    changing the lighting of pretty much every map in the codebase.
    I'm gonna uh, go check my work.

    Alongside this I intend to give lighting some depth. So if there's room
    to make a space warmer, or highlight light colors from other sources, I
    will do that.

    (Images as examples)

    ![image](https://user-images.githubusercontent.com/58055496/228786801-111b6493-c040-4199-ab99-ac1c914d034c.png)

    I also want to work on that other goal of mine, making breaking lights
    matter. So I'll be doing what I can to ensure you only need to break one
    light to make a meaningful change in the scene.

    This is semi complicated by one light source not ever actually reaching
    fullbright on its own, but we do what we must because we can.

    ![image](https://user-images.githubusercontent.com/58055496/228786483-b7ad6ecd-874f-4d90-b5ca-6ef78cb70d2b.png)

    I'm as I hope you know biased towards darker spaces, I think contrast
    has vibes.
    In particular I do not think strong lights really suit maintenance.

    Most of what is used there are bulbs, so I'm planning on replacing most
    uses with low power bulbs, to keep light impacts to rooms, alongside
    reducing the amount of lights placed in the main tunnels

    ![image](https://user-images.githubusercontent.com/58055496/228786594-c6d7610c-611e-478b-bcba-173ebf4c4b12.png)

    **If you take issue with this methodology please do so NOW**, I don't
    want to have to do another pass over things.
    Oh also I'm saving station maps for last since ruins are less likely to
    get touched in mapping march and all.

    Light templates support mirroring vars off typepaths using a subtype,
    which means all the templates added here do not require updating if the
    source type changes somehow. I'd like to expand the template list at
    some point, perhaps in future.

    I've opened this as a draft to make my intentions to make my changes to
    lights known, and to serve as motivation for all the map changes I need
    to do.

    I'm unhappy with how we currently configure lights. I would like a
    system that more directly matches the idea of drawing falloff curves,
    along with allowing for different falloffs for different colors,
    alongside extending the idea to angle falloff.
    This would make out of engine lighting easier, allow for nicer looking
    lights (red to pink, blue to purple, etc), and improve accessibility by
    artists.

    This is slightly far off, because I have other obligations and it's
    kinda complicated, but I'd like to mention it cause it's one of my many
    pipedreams.
    :cl:
    add: Added angle lighting, applies it to most wall lights!
    add: Adds a lighting prototyping tool, mappers go try it out (it's
    locked behind the mapping verb)
    /:cl:

    ---------

    Co-authored-by: MMMiracles <lolaccount1@hotmail.com>

commit c881f2a34bd49366493ac729287966e2bc491bdb
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 15:50:44 2023 +1200

    Automatic TGS DMAPI Update (#76845)

    This pull request updates the TGS DMAPI to the latest version. Please
    note any changes that may be breaking or unimplemented in your codebase
    by checking what changes are in the definitions file:
    code/__DEFINES/tgs.dm before merging.

    Co-authored-by: tgstation-server <tgstation-server@users.noreply.github.com>

commit d6dfbfb60a30ec7974389e830f500f87d33e8e41
Author: Kylerace <kylerlumpkin1@gmail.com>
Date:   Tue Jul 18 20:17:07 2023 -0700

    ports Kapu's optimization of get_hearers_in_view() (#76902)
    ports https://github.com/DaedalusDock/daedalusdock/pull/421
    @Kapu1178 pointed out that get_hearers_in_view() could be improved by
    replacing view() with hearers() since 1. hearers only looks for mobs
    (this is the same as what view() was already doing in this case since it
    used the for(var/primitive_type/name in view(...)) optimization) and 2.
    unlike view(), hearers() doesnt need to set and unset the center turf's
    luminosity
    profiled it for a bit and the results are:

    ![Figure_3_no_mega](https://github.com/tgstation/tgstation/assets/15794172/00d23458-d8ef-478b-9e37-d20fa6254970)
    about a microsecond per call across all ranges for the area i tested. so
    not much but its a hot proc

commit b1ca8e4b3b734090fbe879884769b8be3e20085f
Author: Changelogs <action@github.com>
Date:   Wed Jul 19 00:38:28 2023 +0000

    Automatic changelog compile [ci skip]

commit 2ab48b5bcb789e47e11957b03c90632a13f172ec
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 10:07:38 2023 +1200

    Automatic changelog for PR #76867 [ci skip]

commit f08a2350383ea467740047bc7513e752034c441d
Author: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Date:   Tue Jul 18 17:07:17 2023 -0500

    Removes side effects in Destroy from cyborgs, misc related code cleanup (#76867)

    - Removes side effects from cyborg `Destroy`
    - Right result in more cyborgs getting dusted... Will have to check this
    out.

    - General AI / cyborg code cleanup

    Fixes #76855

    Some more consistent, clean code

    :cl: Melbert
    fix: Cyborgs no longer drop their radio key when deleted, only when
    deconstructed first
    fix: Cyborgs no longer drop their MMI on deletion, only prior to
    deletion. This may result in bad code rearing its ugly head, open an
    issue report on the github if you're a cyborg and get ghosted when you
    feel like you shouldn't
    fix: Runtime from syndie cyborgs spawning
    fix: AI deaths are reported to black box
    /:cl:

    ---------

    Co-authored-by: Jacquerel <hnevard@gmail.com>

commit e34ee9d16aac5065f5f95f48516af0105251bfe3
Author: DATAxPUNGED <44149906+DATA-xPUNGED@users.noreply.github.com>
Date:   Tue Jul 18 18:57:05 2023 -0300

    Fixes a typo in a Tip of the Round message (#76941)

commit a8cee55dc86cbd9fa59b8cfd88e43972fd3e416f
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 09:54:07 2023 +1200

    Automatic changelog for PR #76930 [ci skip]

commit 6184c4d2ed29e7c1ccc987e49d156adb7b303d4d
Author: Bloop <13398309+vinylspiders@users.noreply.github.com>
Date:   Tue Jul 18 17:53:45 2023 -0400

    Fixes ethereals' hair. Separates fixed hair color from the 'fixed_mut_color' var (#76930)

    The series of "species nuking" prs made it so that the `fixed_mut_color`
    also applies to hair. The problem with that is you may not want that in
    some cases. It also introduced a bug where that var prevents ethereals'
    hair from changing colors when they die.

    So I have moved hair out of the things that gets `FIXED_MUT_COLOR` trait
    applied to it in favor of its own thing.

    `FIXED_HAIR_COLOR` trait is now used for ethereals to get a fixed hair
    color.

    Ethereals' hair should go out now when they die again, and it comes back on when they are revived.

commit 30080d4d3dbfbab2632cddc2e6f51757425542db
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 09:40:53 2023 +1200

    Automatic changelog for PR #76870 [ci skip]

commit 3be145c26b6c5a75a5092ac729ba3aa7eb3c482a
Author: scriptis <scriptif@proton.me>
Date:   Tue Jul 18 16:40:32 2023 -0500

    Protolathe UI QoL tweaks + mechfab UI fix (#76870)

    ![image](https://github.com/tgstation/tgstation/assets/12202230/54bbb7ef-4ff0-4a4b-bc57-ecfacbd49761)

    - All quantities are now in *sheets of material.*
    - Fixes mechfab quantities always being inactive

    you can stop dividing by fifty
    :cl:
    qol: techfabs now use sheets(TM) as the default unit of measurement
    fix: mechfab icons aren't perpetually gray
    /:cl:

    Co-authored-by: Scriptis <me@scriptis.net>

commit fccdb31e43041168d7f0f60b7e0db5a4708e235a
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 09:01:21 2023 +1200

    Automatic changelog for PR #76905 [ci skip]

commit d5c158c04e47fb3bea2a4a811da8bfaf310ff2fe
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 09:00:56 2023 +1200

    Automatic changelog for PR #76927 [ci skip]

commit 808b6892071ebf3d69d0459ec1592b26c1082135
Author: RICK IM RI <77305289+tommysalami3@users.noreply.github.com>
Date:   Tue Jul 18 16:54:41 2023 -0400

    Creates an ambience global list for icebox and adds 10 new tracks to the exterior! (THANK YOU JOHN WILLARD!) (#76905)

    Creates an ambience global list for icebox and adds ten new tracks to
    the exterior. Among the tracks are 5 instrumental stings, 4 microsong
    melodies, and 1 thematic song.

    HUGE thanks to John Willard for managing the coding aspect of this. All
    the music is my creation, but without him, it'd just be sitting on my
    hard drive. Love the guy.

    Differentiates lavaland and icebox stylistically in their tones, key,
    and musical instrumentation. Makes the world feel more alive!
    If you want to add more ambient tracks for the zone, all of the tracks
    come in the following keys:
    G# HARMONIC MINOR
    G# NATURAL MINOR
    Db NATURAL MINOR

    :cl:
    add: Ambient tracks for icebox.
    add: Independent global_list for icebox.
    /:cl:

    ---------

    Co-authored-by: JohnFulpWillard <53777086+JohnFulpWillard@users.noreply.github.com>

commit 223e47b4ca665c515e4509af7f255197cecfc085
Author: DaydreamIQ <62606051+DaydreamIQ@users.noreply.github.com>
Date:   Tue Jul 18 21:54:15 2023 +0100

    Fixes mini-fridge name (#76927)
    mini_fridge becomes mini-fridge. Shrimple as that
    Closes: #76890
    Minor grammatical mistake 💀
    :cl:
    spellcheck: Maints fridge doesn't have _ in its name anymore
    /:cl:

    Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>

commit b3146687f4edaaa01b2ba3c716464655af6fadbd
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 07:03:23 2023 +1200

    Automatic changelog for PR #76790 [ci skip]

commit b06e940341ec3d548da7f69b726bf0eebceb0c36
Author: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Date:   Tue Jul 18 22:03:00 2023 +0300

    makes the pinguin a basic animal (#76790)
    the penguin now is a basic animal and also now he can go and layed
    penguin eggs to make penguin babys also the baby have a new behavier he
    will now go and looked for his mom and when he found his mom he will
    went to her and be happy when he close to his mom or if he mom is died
    he will went to her body and he will be sad and also i putted this
    behavier in the baby chicken. also now the pinguen mom will go and
    looked for her eggs and when she find a egg she will putted it in the
    middile of her legs and walked with it
    ![penguin with a
    eggs](https://github.com/tgstation/tgstation/assets/138636438/e5f3d741-edc0-438f-b1b3-9e4ed2280532)
    the pinguen now is a advance ai
    the pinguen now have a more advance

    :cl:
    refactor: the penguin is a basic animal
    add: the penguin now layed eggs
    add: the penguin and the chicken babys will go look for adult penguin or
    chicken and be happy when he is near the adult
    /:cl:

commit 12102ae0a6e0760add56491b82e6b2d4ba7145a0
Author: Jordan Dominion <Cyberboss@users.noreply.github.com>
Date:   Tue Jul 18 14:14:07 2023 -0400

    Fix raciness in TGS test (#76929)

    Recent update added a 409 response if two or more configuration accesses
    were attempted simultaneously.

commit dcc1f9754305ce108f5b83be28ebde512c07f427
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 02:42:43 2023 +1200

    Automatic changelog for PR #76872 [ci skip]

commit fcf726f27f099a23ee902b0aa6033354ad9d66b4
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 02:42:09 2023 +1200

    Automatic changelog for PR #76882 [ci skip]

commit dc454eda707c6f8c26a10f9ed128df62791f109c
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 02:41:47 2023 +1200

    Automatic changelog for PR #76883 [ci skip]

commit 6c8dc4bd742391aba272be418baa9c1103fe1895
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 02:40:43 2023 +1200

    Automatic changelog for PR #76904 [ci skip]

commit 1edf8a2e75ab6ce6d552f0b5c036a3b918eec7d9
Author: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Date:   Tue Jul 18 09:33:18 2023 -0500

    Wizard Spellbook QoL (#76872)

    Second verse, same as the first

    Alphabetizes the wizard spellbook, adds a search bar.

    ![image](https://github.com/tgstation/tgstation/assets/51863163/5c94aed6-8010-435e-8c37-a7d24d6b9ab6)

    ![image](https://github.com/tgstation/tgstation/assets/51863163/5bd3b004-a4ad-4904-b76c-958e473f1e25)

    Makes it easier to buy stuff

    :cl: Melbert
    qol: Wizard Spellbook is now alphabetized
    qol: Wizard Spellbook now has a search bar!
    /:cl:

commit 4b8e066b146d3a868a32da7d00817b7de6405169
Author: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
Date:   Wed Jul 19 00:31:12 2023 +1000

    [GBP: NO UPDATE] Reduces the sniper scope range to something that allows smoother aiming (#76882)

    Tragically this distance causes massive mouse move latency. The new
    value is still decently long and smoother to aim.

    I think it would be nice if people told me that shit is unusable from
    time to time.
    :cl:
    fix: Sniper rifles have a range that allows them to aim more smoothly
    (and still decently long ranged)
    /:cl:

commit cd3d317ffb79b9c42d7ef3b86c528f2f37737360
Author: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
Date:   Wed Jul 19 00:30:49 2023 +1000

    Cleans up the lavaland exports to be properly consistent with their sources, readds missing items to their appropriate spots (#76883)

    This list has probably needed some work for a bit.

    Missing items and incorrect items bad. Fixes
    https://github.com/tgstation/tgstation/issues/76829
    :cl:
    fixes: Cleans up the lavaland exports to the modern loot table lists.
    /:cl:

commit 064447d76a6fb37d512d5f161917d3299aaa9ee0
Author: Bloop <vinylspiders@gmail.com>
Date:   Tue Jul 18 10:29:07 2023 -0400

    Fixes a likely copy paste error in the APC update_icon_state() proc (#76904)

    https://github.com/tgstation/tgstation/pull/76788 introduced this.

    I don't think it was intentional. Probably a copy paste error, which is
    bound to happen when you clean so many files! My goodness.

    Keep up the good work though @YesterdaysPromise!!

    Downstreams can have different filepaths for sprites, and this would
    override them.

    :cl:
    code: apc's update_icon_state proc will no longer set the icon file path
    /:cl:

commit 174c7c30e76409c5c0b206bf8965c28be01a602f
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 02:28:37 2023 +1200

    Automatic changelog for PR #76913 [ci skip]

commit a7323e74a8ce10498fca20121656ab7d7f10d6bb
Author: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
Date:   Wed Jul 19 00:27:15 2023 +1000

    [GBP: NO UPDATE] Fixes a runtime from inserting the vorpal scythe (#76913)

    Uses the correct proc to add the Morbid trait to chaplains who use the
    scythe.

    Nyoops.
    :cl:
    fix: Fixes a runtime on inserting the vorpal scythe into your arm. You
    should now gain the Morbid trait, as expected.
    /:cl:

commit 0d9d89228c5f97666d0edac72b19437c925a0ec3
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Wed Jul 19 02:27:03 2023 +1200

    Automatic changelog for PR #76914 [ci skip]

commit b730d1ab75a4684e4558a3d426dbaa6f103f65f7
Author: Lamb <110322848+CoiledLamb@users.noreply.github.com>
Date:   Tue Jul 18 09:26:37 2023 -0500

    resprites most tanks (#76914)
    i resprited a bunch of various tanks to have nicer shading using
    imaginos' base
    you can see the before and after for each tank here:

    ![image](https://github.com/tgstation/tgstation/assets/110322848/866317e4-03e9-4d8a-91b7-cb64cd897ad4)
    (now includes plasmatank)
    the previous tank sprites held up for a while, but they have dark grey
    outlines and their shading has become a bit dated, so it's nice to
    freshen them up. this brings them closer to some of the nicer sprites in
    the game, while preserving their shape, as the bases for them were quite
    good.

    :cl:
    image: updated most tank sprites.
    /:cl:

commit c0f7db40ee6e94b66aea1c27602e62ca8179b1aa
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Tue Jul 18 17:56:20 2023 +1200

    Automatic changelog for PR #76910 [ci skip]

commit dfd4801122ee550f17691767231ab1d9763c51e3
Author: tattle <66640614+dragomagol@users.noreply.github.com>
Date:   Mon Jul 17 22:55:58 2023 -0700

    Adds p_They (and friends) for capitalized pronoun helpers (#76910)

    ![image](https://github.com/tgstation/tgstation/assets/66640614/f8afe149-85cf-40d2-a5c1-4c96a3ccdfe4)

    Basically replaces p_they(TRUE) with p_They
    Fewer ambiguous parameters (what does TRUE mean when passed to p_they?)
    More comprehensive helper functions.
    :cl: Tattle
    spellcheck: Fixed the grammar on a few revenant messages
    /:cl:

    ---------

    Co-authored-by: tattle <article.disaster@gmail.com>

commit 1fbdddce69af17f46d0fafe9cf42f08315a9c8d7
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Tue Jul 18 17:32:00 2023 +1200

    Automatic changelog for PR #76384 [ci skip]

commit ad43eece560277286dac3c60ee315dc9845c51e3
Author: OrionTheFox <76465278+OrionTheFox@users.noreply.github.com>
Date:   Mon Jul 17 23:31:39 2023 -0600

    Standardizes a majority of the GAGS configs for Clothing (#76384)
    Yikes this stuff is messy to work with...

    Fairly comprehensive changelist:
    - Removed a LOT of redundant .json files, huzzah!
    - Moves the Large Scarf into the normal Scarves .json since they're both
    2 component states and can thus share a file
    - Renamed almost every single config to have the same naming schemes
    ("Name (Type)")
    - Subtyped a majority of the configs to related ones, inheriting where
    possible
    - Renamed some icons to account for now-inherited .jsons where needed

    ---

    **A relevant question for coders/maintainers:**
    As of now, the .json configs are structured with a few rules in place:
    - a .json config's states MUST have the same amount of colored component
    states
    - a .json config can not have states that are not buildable via a linked
    .dmi

    The second one is proving troublesome; namely, for toggleable clothing.
    The object sprites of a majority of these don't change, but the worn
    sprites have _d added to the end. For a majority of the cases I've been
    able to just share a .json for the object and worn GAGS configs, but for
    every toggleable item (such as jumpsuits) they need to keep their own
    separate .json just to add a new state.
    I'm not knowledged in coding proper systems like this, so I was just
    wanting to ask, is there a way that GAGS's .json configs can have
    toggle-states without assembling one for the objects?
    Code standardization and legibility yahoo
    :cl:
    refactor: refactored some code relating to greyscale clothing - please
    report relevant issues on github!
    /:cl:

commit 25deef2c862542d6129cd892027bd80d625b4759
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Tue Jul 18 16:02:49 2023 +1200

    Automatic changelog for PR #76906 [ci skip]

commit f16206c5e07872a57897b210bbd5f42b44ee66c4
Author: coldud13 <coldud13@users.noreply.github.com>
Date:   Tue Jul 18 14:02:27 2023 +1000

    allows surgery caps to toggle hair visibility (#76906)
    Allows doctors to choose between looking like a baldie and letting their
    hair peek out.

    ![dreamseeker_habQTXtLxo](https://github.com/tgstation/tgstation/assets/6972764/25ee7931-c3a4-437c-bbd9-c08c8ce8e4b7)

    **By default** the original behaviour of hiding all hair remains. Using
    the cap in your hands you can "loosen" the strings which toggles the
    visibility of the hair.

    ![dreamseeker_wRz9kTLe4i](https://github.com/tgstation/tgstation/assets/6972764/d42d0066-2dc6-4694-827c-0b494ba03752)
    (Outdated image, now uses a balloon alert instead of a to_chat)

    It's also on a short do_after so you can't just spam flip it back and
    forth, plus you have to actually take it off to fiddle with it.
    We can already wear uniforms "casually" by alt clicking them, this is
    just something similar but for caps.
    Creates opportunities for CMO's to yell at their doctors for not keeping
    their uniforms up to scratch.

    Also fashion idk.
    :cl:
    add: You can now toggle the visibility for hair on your noggin when
    wearing surgery caps.
    /:cl:

    ---------

    Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>

commit 9d26cf1fdec8d1fc716bdf61bcf8e90ff502a5c4
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Tue Jul 18 16:02:01 2023 +1200

    Automatic changelog for PR #76915 [ci skip]

commit 46130473960497485d0ea5f91892aa9b27575f4f
Author: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
Date:   Tue Jul 18 14:01:40 2023 +1000

    Adds a more descriptive explanation for the Vorpal Scyhe/Sinister Shard (#76915)

    This should help explain exactly what you're taking when you choose this
    null rod type.

    Someone asked me to fix this.
    :cl:
    spellcheck: More elaborate explanation for what exactly the sinister
    shard does when you look at the explanation in the null rod selection
    UI.
    /:cl:

    ---------

    Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>

commit 2bb1c0858a2b821caa1b679903ea8c93b6a39902
Author: san7890 <the@san7890.com>
Date:   Mon Jul 17 19:54:59 2023 -0600

    Fixes Linters by Bumping PyYAML To Latest (#76932)

    This was broken because we weren't on the latest PyYAML, they released a
    minor version today which presumably fixes this bug
    https://pypi.org/project/PyYAML/6.0.1/#history . Can't find any release
    notes but it works on my repo:tm: -
    https://github.com/san7890/bruhstation/actions/runs/5582227521/jobs/10201285675?pr=29

commit b384277044dbc6a5e298252ed4ef2209a24739d1
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Tue Jul 18 13:31:01 2023 +1200

    Automatic changelog for PR #76891 [ci skip]

commit a9c36b80a0f78e928f430a7edb6f5a4788761f6e
Author: Vekter <TheVekter@users.noreply.github.com>
Date:   Mon Jul 17 20:24:25 2023 -0500

    Adds 2 new brain trauma lines (#76891)

    A couple of new classics from the admin forums.

    The first one gave me brain rot and I can't stop saying it, the second
    one made me make a long noise so it goes in too

commit 565fd08f85fb8243ebdca9b1822700728c521fef
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Tue Jul 18 13:04:34 2023 +1200

    Automatic changelog for PR #76839 [ci skip]

commit c15e5800925685b0ee2223cf07edaaf8f1af99d4
Author: Changelogs <action@github.com>
Date:   Tue Jul 18 00:57:13 2023 +0000

    Automatic changelog compile [ci skip]

commit c571335c33fd7613a0f5de53d7a07873bff66df4
Author: Donglesplonge <120208006+Donglesplonge@users.noreply.github.com>
Date:   Mon Jul 17 19:50:30 2023 -0500

    Fixes birdshots cannonballs not spawning by replacing the cannonballs with a stack (#76839)

    pretty much just as the Title says, birdshot used the
    obj/projectile/bullet/cannonball path instead of having its own stack of
    4 cannonballs, this made it so that it couldn't load the cannonballs as
    bullet types don't load as actual items to use.

    i have added a 4 stack of cannonballs to the obj/item/stack/cannonball
    tree so that way they can get slotted in birdshot to replace 'em, also
    for use later by whomever else wants a smaller amount of cannonballs as
    the only other amount for regular cannonballs is 14 as used by the
    skeletal pirate ship.

    with birdshots intention to have originally been overrun by pirates i
    assume it was meant to actually spawn because the cannon and gunpowder
    barrels also spawn for usage, but the cannonballs themselves didn't.
    allows players to find 'em in the area in maints they're supposed to be
    found in so you can get up to some hijinks as i assume the creator
    intended for all you maint dwellers.

    :cl:

    fix: replaces the unspawnable cannonballs in birdshot maintenance with a
    stack so that the 4 cannonballs properly spawn, make sure to point them
    away from medical!

    /:cl:

commit cf07cfb7bdc7b6f98109d81cd6f08bc44dd267c5
Author: orange man <61334995+comfyorange@users.noreply.github.com>
Date:   Tue Jul 18 10:20:15 2023 +1200

    Automatic changel…
LikeLakers2 pushed a commit to LikeLakers2/Monkestation2.0 that referenced this pull request Jan 7, 2024
…76837)

Prevailing feedback has been:
- The player base cannot be trusted to control MULEbots.
- It should be clearer what bots can and can't do.

The former is easy to fix.
The latter is sort of a matter for policy but I'm going to investigate
giving bots a rudimentary laws system. Plus that sounds much more
controversial than this so I am going to atomise this outside of that
PR.

MULEbots can still be set to allow sentience by cargo technicians, but
don't start that way.

ADDITIONALLY this PR just changes it so that MULEbots do not crush
people unless:
- They have been emagged.
- Their safety wire has been cut.
Either means works, so it's not too hard to access for nefarious
purposes, but hard to do to yourself.
Otherwise they just slow down for a few seconds instead.

Also fixed an unrelated name bug while I was there.

Closes tgstation#76926

Players would take them, not deliver any cargo, and repeatedly ask
people to lie down in front of them.
Plus Tram has 5 of the things which is frankly too many to be wandering
around the bar.

:cl:
balance: You can't possess a MULE as soon as the round starts, someone
will have to give you permission.
balance: MULEbots no longer crush prone characters unless they have been
hacked (or emagged).
fix: Bots can put numbers in their names, what with being robots.
admin: Adds attack logging when certain wires are cut (for instance:
MULEbot safeties)
/:cl:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Balance Changes to functionality that modifies how effective certain methods are at powergaming Fix Rewrites a bug so it appears in different circumstances
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Possessed MULEbots can run over living players