Commit Graph

9043 Commits

Author SHA1 Message Date
SkyratBot
8f3d1036c8 [MIRROR] Refactor icemoon wolves into basic mobs and add taming + pack behavior [MDB IGNORE] (#25126)
* Refactor icemoon wolves into basic mobs and add taming + pack behavior (#79736)

## About The Pull Request

Ports icemoon wolves over to the basic mob framework with a bit of extra
stuff:

- Wolves call for help when attacked within a decently large radius.
Because you know, pack animals.
- Wolves can now be tamed with a slab of meat
- When tamed, wolves can be ridden like goliath mounts. Ride wolf, life
good. Pretend you're playing ARK and start shivering to death in thatch
huts for that High Roleplay experience.
- Tamed wolves have access to a bunch of pet commands (following, point
fetching, point attacking, play dead, etc) and will also defend their
owners vehemently if they're attacked.

You can probably tame multiple if you wanted to.

## Why It's Good For The Game

What part about riding wolves isn't entertaining? I don't really play
/tg/ that much so I can't argue too much about the balance implications
this might pose, but it's undoubtedly a stupid little gimmick and is
likely to be used by bored assistants and miners with too much time on
their hands.

Especially robust individuals will probably find a million things to do
with a basic mob capable of fetching, attacking on command and generally
being able to defend themselves decently well.

## Changelog

🆑 yooriss
refactor: Icemoon wolves now use the basic mob framework and should act
more intelligently, defending their pack.
add: Icemoon wolves can be tamed with slabs of meat and can be ridden as
mounts once friendly. Being rather large dogs, they also have access to
most of the pet commands you'd expect, such as fetching things, and
violently mauling people their owners point at.
/🆑

---------

Co-authored-by: san7890 <the@ san7890.com>

* Refactor icemoon wolves into basic mobs and add taming + pack behavior

---------

Co-authored-by: Ephemeralis <Ephemeralis@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
2023-11-19 14:56:37 -05:00
SkyratBot
0edf5c1f70 [MIRROR] Fixes a race condition in mutations code [MDB IGNORE] (#25116)
* Fixes a race condition in mutations code (#79829)

## About The Pull Request

One of the timers has a callback to the `modify()` proc which also
doesn't check whether the mutation owner has been deleted since the
timer began, potentially resulting in a runtime.

![image](https://github.com/tgstation/tgstation/assets/13398309/1e41c48b-2620-4473-9278-702d490871cc)

## Why It's Good For The Game

Fixes bugs

## Changelog

🆑
fix: fixed a race condition with mutations
/🆑

* Fixes a race condition in mutations code

---------

Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-11-19 17:14:48 +00:00
SkyratBot
b557e89855 [MIRROR] More standardization for ghost notifications (READY) [MDB IGNORE] (#25104)
* More standardization for ghost notifications (READY) (#79596)

## About The Pull Request
I'm still not satisfied with how ghost notifications work. This gives
every notification with a source (99% of all notifications, in other
words) a link to jump/orbit. Currently, notifications with "play"
interactions would only get the interact link, so jumping to the source
was pretty annoying.

It removes posting the entire message in the alert tooltip, as some got
pretty lengthy and it didn't seem to fit. To replace this, they will
always use headers

After:

![image](https://github.com/tgstation/tgstation/assets/42397676/debfce52-3627-4a43-8663-33d61d893161)

![image](https://github.com/tgstation/tgstation/assets/42397676/01f299ae-dc6a-45f8-a97a-cb2c815088b2)

![image](https://github.com/tgstation/tgstation/assets/42397676/99567376-063e-458e-af2a-2dd4306747cc)

NOTIFY_JUMP and NOTIFY_ORBIT have been merged, since the only difference
seems to be whether it's a turf. The result shaves off some redundant
lines of code, since most-every usage of notify_ghosts uses
NOTIFY_ORBIT.
## Why It's Good For The Game
More standardization for the ghost notification system. Adds a few alert
headers that never had them. All in all, makes it easier for creators to
throw alerts at ghosts
## Changelog
🆑
qol: Nearly every ghost alert should now feature a "VIEW" button, even
those with click interaction.
del: Ghost alerts no longer show the entire message in the tooltip,
instead have been replaced with titles.
/🆑

* More standardization for ghost notifications (READY)

* Modular

* Update outpost_of_cogs.dm

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-11-19 11:25:32 -05:00
SkyratBot
558c466b81 [MIRROR] Splits placeontop proc [MDB IGNORE] (#25103)
* Splits placeontop proc (#79702)

## About The Pull Request
I find the proc hard to read honestly. There's no reason we can't split
this into two functions - the secondary functionality is used only once,
in reader.dmm.
## Why It's Good For The Game
Code improvement
Glorious snake case
## Changelog
N/A nothing player facing

---------

Co-authored-by: san7890 <34697715+san7890@ users.noreply.github.com>

* Splits placeontop proc

* Update brass_spreader.dm

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: san7890 <34697715+san7890@ users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-11-19 10:28:18 -05:00
SkyratBot
c045caebae [MIRROR] Fixes sending stuff to "Old" Chat [MDB IGNORE] (#25088)
* Fixes sending stuff to "Old" Chat (#79819)

## About The Pull Request

This functionality was removed in #79479
(e1c6cfdce8), and we should still be
supporting the old chat anyways because it contains a plethora of useful
BYOND information that we still can really leverage (such as the
built-in profiler and stuff like that) and it's going to be painful to
do that if you have to keep spamming `fix-chat` to see OOC/ASAY while
alternating every damn time.
## Why It's Good For The Game

It's ugly but we still need it. There's a reason why we still have it.
## Changelog
🆑
fix: "Old Chat" (AKA: The old-styled non-TGUI raw-HTMLesque chat that
you might see when it prods you with the "Failed to load fancy chat!"
issue) should now get all text messages as expected.
/🆑

* Fixes sending stuff to "Old" Chat

---------

Co-authored-by: san7890 <the@san7890.com>
2023-11-18 10:13:39 -05:00
SkyratBot
b237afa316 [MIRROR] Mob attackedby / check_block refactor, plus some minor cleanup of attack_x procs [MDB IGNORE] (#25079)
* Mob `attackedby` / `check_block` refactor, plus some minor cleanup of `attack_x` procs

* Fix the race condition

* Modular

* Ooops

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-11-18 02:19:31 -05:00
SkyratBot
293f12a424 [MIRROR] Fixes some fried food exploits [MDB IGNORE] (#25083)
* Fixes some fried food exploits (#79789)

## About The Pull Request

I would've been content to leave these, but you guys just haaaad to
overdo it

- Plates now respect weight class of items on top
- Fried food now respect volume of existing items

## Why It's Good For The Game

These exploits are not intended and have potential and, if abused, can
severely detract from rounds.

## Changelog

🆑 Melbert
fix: Plates now respect the weight class of items on top.
fix: Fried items now respect existing volume cap.
fix: Smartfridges now don't accept bulky food items, good thing we have
none of those right guys?
/🆑

* Fixes some fried food exploits

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-11-18 02:03:18 -05:00
SkyratBot
56b232827e [MIRROR] Fixes tram electrocuting law abiding crosswalk users [NO GBP] [MDB IGNORE] (#25077)
* Fixes tram electrocuting law abiding crosswalk users [NO GBP] (#79780)

## About The Pull Request

Fixes the tram_pos var to actually use the tram's position when
calculating the tram's velocity.

## Changelog

🆑 LT3
fix: Tram will no longer electrocute innocent, law abiding crew trying
to use the crosswalk when there's no tram in sight
/🆑

* Fixes tram electrocuting law abiding crosswalk users [NO GBP]

---------

Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
2023-11-17 23:37:15 -05:00
SkyratBot
febee3ad4c [MIRROR] Adds a toggle action to implant HUDs [MDB IGNORE] (#25078)
* Adds a toggle action to implant HUDs (#79777)

<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request
Adds an action for all implanted HUDs to toggle them on and off. The
default state is on, and the state is toggled appropriately when the
implant is added or removed. This is done by using hud.hide_from and
hud.show_to.
<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

## Why It's Good For The Game
Quality of life change for roleplay situations where the HUD is usless
clutter.
<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
qol: Implanted HUDs can now be toggled on and off with an action.
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->

---------

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

* Adds a toggle action to implant HUDs

---------

Co-authored-by: Shroopy <delyth@shroop.net>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
2023-11-17 23:36:26 -05:00
SkyratBot
77e701948f [MIRROR] Adds a Chat Reliability Layer [MDB IGNORE] (#25068)
* Adds a Chat Reliability Layer (#79479)

## About The Pull Request

Everyone knows that chat will just eat your messages now and then, isn't
that annoying?
What if SSchat was smart enough to keep track of your messages and
notice when you didn't get one?
Well, now it can!
## Why It's Good For The Game

Chat messages poofing into the aether is bad, really bad.
## Changelog
🆑
add: Chat Reliability Layer
code: TGUI chat messages now track their sequence and will be resent if
the client notices a discrepenency
/🆑

---------

Co-authored-by: Kyle Spier-Swenson <kyleshome@ gmail.com>

* Adds a Chat Reliability Layer

---------

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: Kyle Spier-Swenson <kyleshome@ gmail.com>
2023-11-17 17:49:57 -05:00
SkyratBot
04021ca486 [MIRROR] [no gbp] gutlunch pop control [MDB IGNORE] (#25066)
* [no gbp] gutlunch pop control (#79772)

* [no gbp] gutlunch pop control

---------

Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
2023-11-17 17:48:13 -05:00
SkyratBot
94c339ce8c [MIRROR] TGUI for Safes and Secure briefcases (Safes are now a structure, too) [MDB IGNORE] (#25059)
* TGUI for Safes and Secure briefcases (Safes are now a structure, too) (#79594)

* TGUI for Safes and Secure briefcases (Safes are now a structure, too)

* Modular

* UpdatePaths

* Modular

---------

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-11-17 10:21:49 -05:00
SkyratBot
3238023f73 [MIRROR] Adds more bitrunning antagonists + fixes (READY) [MDB IGNORE] (#25054)
* Adds more bitrunning antagonists + fixes (READY)

* Update role_preferences.dm

* Update poll_ignore.dm

* Update poll_ignore.dm

* Update cyber_police.dm

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-11-16 18:50:32 -05:00
SkyratBot
020d2ad13e [MIRROR] Code compression for reagent holder. Lowers plumbing reaction chamber tick usage [MDB IGNORE] (#25050)
* Code compression for reagent holder. Lowers plumbing reaction chamber tick usage (#79686)

## About The Pull Request
More code improvements for reagent holder. As you can see it removes a
lot more code than it adds so code savings are significant. This does
not touch on any floating point arithmetic, all that is behind us, this
focuses on removing redundant procs and merging existing procs to
achieve the same functionality so if you do see any changes in reagent
related behaviour it's not intentional and should be reported as a bug
here.

The following code changes can be summarized into points.

**1. Removes procs `get_master_reagent_id()` &
`get_master_reagent_name()`**
Both of these procs have the exact same functionality as
`get_master_reagent()` with the only exception of returning a different
value. Instead we can just call `get_master_reagent()` directly and
infer the name & type of it ourselves rather than creating a wrapper
proc to do it for us, therefore reducing overall code

**2. Removes & Merges `remove_all_type()` proc into `remove_reagent()`**
The proc `remove_all_type()` is highly inefficient, it first uses a for
loop to look for the reagent to remove & then it again calls
`remove_reagent()` on the reagent once it has found it. We can just
embed this functionality directly into `remove_reagent()` by simply
adding an additional parameter `include_subtypes`. This way the
operation is faster, and we reduce the code to get the job done. Also
now `remove_reagent()` will return the total volume of reagents removed
rather that a simple TRUE/FALSE

**3. Removes & Merges `trans_id_to()` proc into `trans_to()`**
Both these procs have the same job of transferring either a single
reagent or all reagents. `trans_id_to()` is a scaled down version of
`trans_to()` because
- It does not have any `method` var. This means if you want to transfer
a single reagent to a mob/organ or any other object it does not have the
functionality to expose the target to that transferred reagent.
- It does not have a `multiplier` var to scale reagent volumes
- It does not have code to deal with organs or stop reactions i.e. it
does not have the `no_react` var.

We can overcome all these short comings by simply adding an extra var
`target_id` to specify what specific reagent to transfer therefore
attaining the same functionality while keeping the benefits of
`trans_to()` proc therefore reducing overall code

**4. Lowers plumbing reaction chamber tick usage for balancing ph.**
Rather than invoking a while loop to balance ph it's much easier for the
player to simply make the reaction chamber wait for e.g. add a reagent
that will never come. This will make the chamber wait therefore giving
the reaction chamber ample time to correctly balance the ph and then
remove that reagent from the list therefore getting correct ph levels.
No need to create code hacks when the player can do it themselves  so
the while loop has been removed

## Changelog
🆑
code: removed redundant procs `get_master_reagent_id()` &
`get_master_reagent_name()`
code: merged `remove_all_type()` proc with `remove_reagent()` now this
proc can perform both functions. `remove_reagent()` now returns the
total volume of reagents removed rather than a simple TRUE/FALSE.
code: merged `trans_id_to()` proc with `trans_to()` now this proc can
perform both functions
refactor: plumbing reaction chamber will now use only a single tick to
balance ph of a solution making it less efficient but more faster. Just
make the reaction chamber wait for longer periods of time to accurately
balance ph
refactor: reagent holder code has been condensed. Report any bugs on
GitHub
/🆑

* Code compression for reagent holder. Lowers plumbing reaction chamber tick usage

* Modular update

* Update alcohol_reagents.dm

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-11-16 18:27:20 -05:00
SkyratBot
78237448b9 [MIRROR] [NO GBP] Fixes catwalks over open space not making a sound when walked over. [MDB IGNORE] (#25036)
* [NO GBP] Fixes catwalks over open space not making a sound when walked over. (#79738)

## About The Pull Request
See the title.

## Why It's Good For The Game
Actually fixing #78646.

## Changelog

🆑
fix: Fixed catwalks over open space not making a sound when walked over.
/🆑

* [NO GBP] Fixes catwalks over open space not making a sound when walked over.

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-11-15 21:29:11 -05:00
SkyratBot
98586c74c5 [MIRROR] grabs no longer trigger krav maga [MDB IGNORE] (#25040)
* grabs no longer trigger krav maga (#79734)

## About The Pull Request
small thing introduced with combat mode, previously you needed to click
with an empty hand to do your moves, now you can just ctrl click while
holding anything
so we stop that

## Why It's Good For The Game
holding 2 riot shields and ctrl clicking on people to kill them is funny
but stupid
also one time as warden i tried to grab my dog and i neck chopped it

## Changelog
🆑
fix: grabs no longer trigger krav maga
/🆑

* grabs no longer trigger krav maga

---------

Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
2023-11-15 21:28:50 -05:00
SkyratBot
caa13c44af [MIRROR] Reworks stop, drop, roll into a gradual, interruptable thing, that repeats until extinguished [MDB IGNORE] (#25038)
* Reworks stop, drop, roll into a gradual, interruptable thing, that repeats until extinguished (#79694)

## About The Pull Request

Related: #78017

Stop drop and roll is no longer instant -5 fire stacks -> stun -> wait.

Now, when you stop drop and roll, every time you roll you will lose 1
firestack.

A roll is triggered every 0.8 seconds. Moving, getting up, or becoming
incapacitated / stunned will stop you from rolling.
_(This number puts it roughly equivalent to its current rate.)_

While rolling, your hands are blocked (you cannot use items, hold
things, etc.)
Additionally, you will roll until all firestacks are cleared.

## Why It's Good For The Game

Getting stunned for 6 seconds because you decide to stop and roll is a
little silly. Reasonably you could stop rolling and get back up should
the need arise, such as "oh god there's more fire I gotta relocate".

By changing it to a gradual thing, it makes it a bit more reasonable and
fair.
- New players who immediately slam "STOP DROP ROLL" because the alert on
their screen tells them to are no longer helpless for 6 whole seconds
- People who hit the resist key, intending to interact with something
else (such as a bola) are no longer stuck rolling when they did not want
to

## Changelog

🆑 Melbert
balance: Stop, drop, and roll no longer instantly clears 5 fire stacks
off of you - Instead, it will clear 1 fire stack off of you every time
you roll, with a roll every 0.8 seconds.
balance: Stop, drop, and roll no longer stuns you for 6 seconds.
Instead, it will knock you to the floor while you are rolling. Moving
around or getting up will cancel the roll, and you cannot use items
while rolling around.
balance: Stop, drop, and roll will now repeat until the fire is put out
or you get up.
/🆑

* Reworks stop, drop, roll into a gradual, interruptable thing, that repeats until extinguished

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-11-15 21:28:29 -05:00
SkyratBot
318d5b38d7 [MIRROR] Fixes Relay Attackers Misfire [MDB IGNORE] (#25039)
* Fixes Relay Attackers Misfire (#79731)

## About The Pull Request

Fixes #76079

Basically we were both not getting all of the args that we recieve from
`COMSIG_ITEM_AFTERATTACK` which included the very important
`proximity_flag` which tells us if the person was in range to actually
hurt us or not. This means that clicking a mob with this element with a
stack of metal from across the room would cause them to aggro, which
makes no sense whatsoever. Let's actually use that proximity check.

We listen for projectiles hitting us separately, don't worry.
## Why It's Good For The Game

It just makes no damn sense, fixes some weird ass behavior.
## Changelog
🆑
fix: Bar Bots (and several other mobs) will no longer aggro on you if
you click on them with a "forceful" item from halfway across the room.
/🆑

* Fixes Relay Attackers Misfire

---------

Co-authored-by: san7890 <the@san7890.com>
2023-11-15 21:28:10 -05:00
SkyratBot
383eb084df [MIRROR] Fixes lizard tail wagging graphics [MDB IGNORE] (#25028)
* Fixes lizard tail wagging graphics (#79723)

## About The Pull Request

Fix tail not getting paired with spines

## Why It's Good For The Game

Fixes: #74611
Fixes: #73230

## Changelog
🆑 falconignite
fix: Lizard tail wagging graphics
/🆑

* Fixes lizard tail wagging graphics

---------

Co-authored-by: thegrb93 <grbrown93@sbcglobal.net>
2023-11-15 15:29:36 -05:00
SkyratBot
2a3466cbbb [MIRROR] [NO GBP] Emote Panel TGUI, now should be fixed [MDB IGNORE] (#25021)
* [NO GBP] Emote Panel TGUI, now should be fixed (#79481)

* [NO GBP] Emote Panel TGUI, now should be fixed

---------

Co-authored-by: larentoun <31931237+larentoun@users.noreply.github.com>
2023-11-14 19:38:01 -05:00
SkyratBot
8c051b17a4 [MIRROR] loopable looms [MDB IGNORE] (#25013)
* loopable looms (#79680)

## About The Pull Request
makes the looms `loom_me` proc loop for stackable items (such as
cotton).
## Why It's Good For The Game
its a looping do_after, which is satisfying (and you don't need to click
as much).
## Changelog
🆑
qol: looms will now attempt to loop through stackable items (cotton as
an example)
/🆑

---------

Co-authored-by: san7890 <the@ san7890.com>

* loopable looms

---------

Co-authored-by: jjpark-kb <55967837+jjpark-kb@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
2023-11-14 17:11:49 -05:00
SkyratBot
0c7c1f046f [MIRROR] Orbit Poll respects Preferences + Asks for Permission to Unghost [MDB IGNORE] (#25014)
* Orbit Poll respects Preferences + Asks for Permission to Unghost (#79712)

## About The Pull Request

Fixes #79676

Ticking either the player or admin "do not consider me for ghost roles"
excludes you from the pool of candidates in an orbit ghost poll.

You will now get a `tgui_alert()` asking you if you want to accept being
put into the orbit poll role's before you accept it, putting it in line
with every other ghost role in the game. If the player doesn't accept,
the proc is re-ran with someone else on the list.
## Why It's Good For The Game

We need both of these behaviors present to keep it standard with what
players expect with ghost roles, and it is annoying to be an admin/AFK
player who gets hotswapped into one of these roles while they're doing
stuff.
## Changelog
🆑
qol: You will no longer be added to the list for ghost-orbit role polls
if you have opted out of getting antag ghost roles in your preferences.
qol: You will get a tgui_alert to accept the ghost role if you were
selected via the orbit poll, instead of it just throwing you intot he
role.
/🆑

* Orbit Poll respects Preferences + Asks for Permission to Unghost

---------

Co-authored-by: san7890 <the@san7890.com>
2023-11-14 17:11:28 -05:00
SkyratBot
a3779921d6 [MIRROR] Traits from blessing of insanity are now applied correctly [MDB IGNORE] (#25012)
* Traits from blessing of insanity are now applied correctly (#79704)

## About The Pull Request
What it reads on the title. The traits should be applied to the owner
and not the status effect itself.

## Why It's Good For The Game
This will fix #79641.

## Changelog

🆑 san7890, Ghommie
fix: The Blessing of Insanity now grants no damage slowdown and free
hyperspace movement correctly.
/🆑

* Traits from blessing of insanity are now applied correctly

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-11-14 17:10:57 -05:00
SkyratBot
8eae77898b [MIRROR] Fixes tram plate electrocution [NO GBP] [MDB IGNORE] (#25016)
* Fixes tram plate electrocution [NO GBP] (#79717)

## About The Pull Request

When tram electrocution was turned into a component instead of on the
turf, the bad luck omen stopped having a chance of electrocuting the
mob. Fixes the toast proc to check for the cursed trait, now also
applied by the omen.

Splits the toast probability into one value for a normal plate, and one
for a broken plate or people with omen. Narrows the window of a
potential shock with adjusted probability, no chance of electrocution on
green.

Adds a missing early return for when the tram isn't moving.

## Changelog

🆑 LT3
fix: Bad luck omen again raises your chance of getting shocked by the
tram plate
fix: Tram plate checks and energizes when the tram is moving
code: Omen component now applies the cursed trait
/🆑

* Fixes tram plate electrocution [NO GBP]

---------

Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
2023-11-14 17:04:15 -05:00
SkyratBot
aff60235a2 [MIRROR] improve find_and_set/in_list behavior [MDB IGNORE] (#24995)
* improve find_and_set/in_list behavior (#79614)

## About The Pull Request
improves the find_and_set behavior a bit. this is after and before
observing 5 gorillas for 10 minutes

![image](https://github.com/tgstation/tgstation/assets/138636438/d8f5cdcb-71bd-41bd-a069-10b0367224ec)

![image](https://github.com/tgstation/tgstation/assets/138636438/1fd70fea-5769-4021-95ec-038137ce7423)

## Why It's Good For The Game
improves the find_and_set/in_list behavior

## Changelog
🆑
not player facing
/🆑

* improve find_and_set/in_list behavior

---------

Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
2023-11-13 23:04:34 -05:00
SkyratBot
33336eda17 [MIRROR] Gunpoint now blocks bumps, adds examine text and can be broken by shoving [MDB IGNORE] (#24976)
* Gunpoint now blocks bumps, adds examine text and can be broken by shoving (#79564)

## About The Pull Request
Lesser version of https://github.com/tgstation/tgstation/pull/75226

Changes a few things with bumping which could lead to cheesing a charged
shot if the shooter has an ally to bump the target. Also adds examine
text to know what's happening.
Also shoving now can be used to break gunpoint, since having immovable
mobs can be troublesome in some situations

## Why It's Good For The Game
Grabs from the target no longer counter gunpoint;
Accidental or cheesy bumps are removed;
Shoves and pulls can be used in a teamplay to break gunpoint

## Changelog
🆑
qol: Gunpoint: Examining the target will show who is holding them at
gunpoint
qol: Gunpoint: Examining the shooter will show who they are holding at
gunpoint
balance: Gunpoint: If the target tries to grab, they will trigger the
shot
balance: Gunpoint: If the target or the shooter are shoved, it will
cancel the gunpoint
balance: Gunpoint: If the target is pulled, it will cancel the gunpoint
balance: Both the target and the shooter can't be bumped anymore to
avoid cheesing charged shot or removing the gunpoint by just moving
around
fix: Clicking the alert button of the shooter will now correctly remove
gunpoint
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>

* Gunpoint now blocks bumps, adds examine text and can be broken by shoving

---------

Co-authored-by: larentoun <31931237+larentoun@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
2023-11-13 10:39:07 -05:00
SkyratBot
904144babb [MIRROR] Makes achievements_score query database for count [MDB IGNORE] (#24971)
* Makes achievements_score query database for count (#79597)

Instead of `/datum/award/score/achievements_score` counting achievement
datums in-game and trying to keep up with what the database has we now
just query the database for its current count of unlocked achievements
by overriding the procs the achievements panel builds data from. This
avoids cases like #79555.

Count is still loaded to achievement data datum so it can be saved at
round end.

@ Time-Green

* Makes achievements_score query database for count

---------

Co-authored-by: Jordie <4343468+Jordie0608@users.noreply.github.com>
2023-11-13 09:42:25 -05:00
SkyratBot
d8056a2c68 [MIRROR] basic gutlunchers and ashwalker ranching [MDB IGNORE] (#24970)
* basic gutlunchers and ashwalker ranching

* Update goldgrub.dm

* UpdatePaths

* Modular

* Modular

* Modular

---------

Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-11-13 09:42:16 -05:00
SkyratBot
a856e05b35 [MIRROR] Adds a little button to quirks that allows for relatively easy customization [MDB IGNORE] (#24953)
* Adds a little button to quirks that allows for relatively easy customization

* Fixing diffs

---------

Co-authored-by: nikothedude <59709059+nikothedude@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-11-13 07:37:09 -05:00
SkyratBot
fc7413ff75 [MIRROR] Fixes some shielded component jank [MDB IGNORE] (#24969)
* Fixes some shielded component jank

* Update _suits.dm

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-11-13 11:49:09 +00:00
SkyratBot
5c239e10ef [MIRROR] Malf AI Zeroth Law Fix [MDB IGNORE] (#24959)
* Malf AI Zeroth Law Fix (#79604)

## About The Pull Request

This one is a little bit complicated, and needs some background on how
silicon laws work for synced borgs. Generally speaking, a synced borg's
laws should always be equivalent to the laws of the AI they're synced
to. Unsyncing a borg does not in and of itself change a borgs laws. If
an AI has the reporter lawsuit + 3 freeform laws, and you unsync a borg
from that AI, the borg will still have reporter + 3 freeform laws for
its own laws.

This applies even to the zeroth law that borgs get due to being synced
to a malf AI. Currently, a borg will retain this law even if it is
unsynced from the malf AI. However, there's an issue with this. Per a
[recent policy
thread](https://tgstation13.org/phpBB/viewtopic.php?f=33&t=35128), borgs
that have been unsynced from a malf AI are no longer antagonists, even
though the malf law 0 currently remains. This is very confusing and
likely to lead to bans due to players mistakenly believing themselves to
still be antagonists. To rectify this, this PR just makes the zeroth law
get automatically removed when a borg is unsynced from a malf AI. I
tested this extensively to ensure that it should not affect the emag law
0 or the onehuman law board.

I also improved and fixed the feedback when attempting and failing to
apply a law board directly to a cyborg. Previously, the feedback was
both broken (it attempted to play an emote that doesn't exist) and the
feedback was the same for both emagged borgs and borgs that were already
synced to an AI. Based on the comments, this was intended to prevent
"metagaming." However, this was pretty much unnecessary. Simply
unlocking a borg's panel will already tell you if it's been emagged or
not, and if you have a borg's panel open to apply law boards directly,
then you can easily just check the wires and see for yourself whether
the borg is actually synced or not. Now the feedback actually works and
is different for synced and emagged borgs.
## Why It's Good For The Game

For the zeroth law fix, players should not be at risk of being misled by
their own laws. If borgs unsynced from a malf AI are not supposed to be
antagonists, then they should not have a law 0 that only antagonists
have.

Regarding the law board tweak, the old code was nonfunctional in every
way. The code didn't give feedback properly, and obfuscating the
feedback was totally unnecessary, as there are far easier ways to tell
if a borg has been emagged than by trying to upload laws to it. I
checked blame out of curiosity, and the old code is literally 9 years
old.
## Changelog
🆑
qol: Fixed/improved feedback when failing to apply a direct law change
to a cyborg.
fix: Borgs who are unsynced from a malf AI now lose the zeroth law as
intended.
/🆑

* Malf AI Zeroth Law Fix

---------

Co-authored-by: GPeckman <21979502+GPeckman@users.noreply.github.com>
2023-11-13 06:13:13 -05:00
SkyratBot
e140e83be3 [MIRROR] Fire temperature effects on a human is soft capped at 1200 kelvin, from when dimishing returns are applied [MDB IGNORE] (#24955)
* Fire temperature effects on a human is soft capped at 1200 kelvin, from when dimishing returns are applied (#79655)

## About The Pull Request

Past 1200 kelvin, fire temperature applied to humans receive diminishing
returns

![image](https://github.com/tgstation/tgstation/assets/51863163/40ddbcde-f3fa-4ecc-8c5b-ca27e86b9aed)

At 30 minutes of fire, a human is expected to be at about 6,200 k

## Why It's Good For The Game

It's not really realistic that a body can manage to get up to the
hundreds of thousands of kelvin, the energy just isn't there.

It doesn't even make sense that a body can get to 6000 kelvin that's
like as hot as plasma IRL or something. Humans cremate at 1200 kelvin.
Temperature in general should be reigned in to prevent that but that's a
much larger project.

This also helps curb two issues, one being the "very high temperature
reagents" exploit and the other being "shaft miners coming into medical
being very difficult to revive".

## Changelog

🆑 Melbert
balance: Body temperature from being lit on fire will soft cap at 1,200
K. It will still increase beyond this, but with diminishing returns. For
example, at 5,000 K, fire will heat 67x weaker.
/🆑

* Fire temperature effects on a human is soft capped at 1200 kelvin, from when dimishing returns are applied

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-11-13 06:12:13 -05:00
SkyratBot
b07fff3b1f [MIRROR] [no gbp] Fixes goat runtime [MDB IGNORE] (#24952)
* [no gbp] Fixes goat runtime (#79672)

## About The Pull Request

Fixes #79063
Instead of checking if a list is QDELETED (this doesn't work) we check
if it has a length.

## Changelog

🆑
fix: Goats will now calm down after getting grumpy without causing a
runtime error.
/🆑

* [no gbp] Fixes goat runtime

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-11-12 23:08:37 +00:00
SkyratBot
6fe3acd702 [MIRROR] Fix being unable to resist out of /datum/status_effect/freon [MDB IGNORE] (#24944)
* Fix being unable to resist out of `/datum/status_effect/freon` (#79628)

## About The Pull Request

Arguments were backwards.

Adds some free code cleanup as well.

## Changelog

🆑 Melbert
fix: Fix being unable to resist out of ice cubes
/🆑

---------

Co-authored-by: Zephyr <12817816+ZephyrTFA@ users.noreply.github.com>

* Fix being unable to resist out of `/datum/status_effect/freon`

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@ users.noreply.github.com>
2023-11-12 11:27:14 -05:00
SkyratBot
2e7ad10f7e [MIRROR] Lemon fixes ci [MDB IGNORE] (#24942)
* Lemon fixes ci (#79384)

## About The Pull Request

Sets up moveloops to better catch issues with duplicated loops

Letting people modify the timer var AND have it track what bucket we're
in was a bad idea.
So instead let's store the queued time separate. Also makes
allowed_to_move return true/false instead of flags

This fixed? the null loop issue locally, I honestly have no damn idea
why. I'm gonna be working on the rest of ci here, left trackers so if it
pops up between now and merge I'll know what the issue is.

---------

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

* Lemon fixes ci

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>
Co-authored-by: Emmett Gaines <ninjanomnom@ gmail.com>
2023-11-12 11:25:49 -05:00
SkyratBot
6c7b5e649c [MIRROR] Basic mobs check for MOBILITY_MOVE to move [MDB IGNORE] (#24928)
* Basic mobs check for `MOBILITY_MOVE` to move (#79627)

## About The Pull Request

Adds a check for `MOBILITY_MOVE` in basic mob `allowed_to_move`.

This prevents AI controlled mobs which are `TRAIT_IMMOBILIZED` from,
well, not being immobilized

## Changelog

🆑 Melbert
fix: AI controlled mobs which are immobilized are now properly
immobilized
/🆑

* Basic mobs check for `MOBILITY_MOVE` to move

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-11-11 08:11:44 -05:00
SkyratBot
2f4010c992 [MIRROR] Removes final remnants of 'targetted' [MDB IGNORE] (#24927)
* Removes final remnants of 'targetted' (#79626)

## About The Pull Request

Finishing what https://github.com/tgstation/tgstation/pull/79513/
started, removes 'targetted' typo from code. Also updates the basic mob
guide with the new updated var names.

## Why It's Good For The Game

Typos bad. Accurate guides good.

## Changelog

🆑
code: gets rid of the rest of the instances of 'targetted' typo from
code
/🆑

* Removes final remnants of 'targetted'

---------

Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-11-11 08:11:32 -05:00
SkyratBot
42d245a4be [MIRROR] Basic Guardians/Holoparasites [MDB IGNORE] (#24921)
* Basic Guardians/Holoparasites (#79473)

## About The Pull Request

Fixes #79485
Fixes #77552

Converts Guardians (aka Holoparasites) into Basic Mobs.
Changes a bunch of their behaviours into actions or components which we
can reuse.
Replaces some verbs it would give to you and hide in the status panel
with action buttons that you may be able to find more quickly.

They _**should**_ work basically like they did before but a bit
smoother. It is not unlikely that I made some changes by accident or
just by changing framework though.

My one creative touch was adding random name suggestions.
The Wizard federation have a convention of naming their arcane spirit
guardians by combining a colour and a major arcana of the tarot. The
Syndicate of course won't truck with any of that mystical claptrap and
for their codenames use the much more sensible construction of a colour
and a gamepiece.

This lets you be randomly assigned such creative names as "Sparkling
Hermit", "Bloody Queen", "Blue World", or "Purple Diamond".
You can of course still ignore this entirely and type "The Brapmaster"
into the box if so desired.

I made _one_ other intentional change, which is to swap to Mothblocks'
nice leash component instead of instantly teleporting guardians back to
you when they are pulled out of the edge of their range. They should now
be "dragged" along behind you until they can't path, at which point they
will teleport. This should make the experience a bit less disorienting,
you have the recall button if you _want_ to instantly catch up.

This is unfortunately a bumper-sized PR because it did not seem
plausible to not do all of it at once, but I can make a project branch
for atomisation if people think this is too much of a pain in the ass to
review.

Other changes:
- Some refactoring to how the charge action works so I could
individually override "what you can hit" and "what happens when you hit"
instead of those being the same proc
- Lightning Guardian damage chain is now a component
- Explosive Guardian explosive trap is now a component
- Added even more arguments to the Healing Touch component to allow it
to heal tox/oxy damage and require a specific click modifier
- Life Link component which implements the Guardian behaviour of using
another mob as your health bar
- Moved some stuff about deciding what guardians look and are described
like into a theming datum
- Added a generic proc which can return whether your mob is meant to
apply some kind of damage multiplier to a certain damage type. It's not
perfect because I couldn't figure out how ot cram limb modifiers in
there, which is where most of it is on carbons. Oh well.
- Riders of vehicles now inherit all movement traits of those vehicles,
so riding a charging holoparasite will let you cross chasms. Also works
if you piggyback someone with wings, probably.

## Changelog

🆑
refactor: Guardians/Powerminers/Holoparasites now use the basic mob
framework. Please report any unexpected changes or behaviour.
qol: The verbs used to communicate with, recall, or banish your Guardian
are now action buttons.
balance: If (as a Guardian) your host moves slightly out of range you
will now be dragged back into range if possible, rather than being
instantly teleported to them.
balance: Protectors now have a shorter leash range rather than a longer
one, in order to more easily take advantage of their ability to drag
their charge out of danger.
balance: Ranged Guardians can now hold down the mouse button to fire
automatically.
balance: People riding vehicles or other mobs now inherit all of their
movement traits, so riding a flying mob (or vehicle, if we have any of
those) will allow you to cross chasms and lava safely.
/🆑

---------

Co-authored-by: san7890 <the@ san7890.com>

* Basic Guardians/Holoparasites

* Modular

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: san7890 <the@ san7890.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-11-11 07:07:34 -05:00
SkyratBot
c70114c343 [MIRROR] Fix split personality commune being unusable I think [MDB IGNORE] (#24923)
* Fix split personality commune being unusable I think (#79631)

## About The Pull Request

Likely fixes #79586 and likely fixes #78081 .

Split persons's loc is their parent mob, so they were being disallowed
from casting due to not being loc's in a turf.

Further testing required

## Changelog

🆑 Melbert
fix: Split persons can talk to their host once again
/🆑

* Fix split personality commune being unusable I think

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-11-11 01:02:23 -05:00
SkyratBot
7c90b0cc48 [MIRROR] Improves how ai movement checks for if movement is allowed [MDB IGNORE] (#24920)
* Improves how ai movement checks for if movement is allowed (#79620)

## About The Pull Request

While looking into the moveloop processing issues I found a place where
moveloops were being interacted with while qdeleted. This restructures
the code a bit to prevent that being possible and also improves the
design overall here so implementers of `allowed_to_move` don't need to
be careful about their return value, which is just begging for a bug
down the line. `increment_pathing_failure` also wasn't getting called
when subtypes stopped movement.

The rest of this description is a bit of an informative lecture.

There's a pattern you do on occasion when designing public facing
functions where you have a public, but non overridden, function with
some default behavior that must always run, calling on an internal
function that *is* overridden but never called from any other location.
This is a good pattern for making sure some core behavior always runs or
for making sanity checks that can't be dodged, as the internal function
never even gets called when it has been determined that something needs
to cancel the whole thing.

Previously this code had something that looked kinda like this, there
was a proc called `pre_move` that was not supposed to be overridden, and
a proc it called called `allowed_to_move`. However, contrary to the
usual reason for doing this, `pre_move` had no behavior itself and was
meaningless. `allowed_to_move` on the other hand had exactly the sort of
sanity check that we'd want using this pattern in the form of
`if(!controller.able_to_run())`. This was allowing subtypes access to a
qdeleted move loop when it had just been deleted in the parent's version
of the proc.

This is your yearly reminder to watch out for cargo culting.

* Improves how ai movement checks for if movement is allowed

---------

Co-authored-by: Emmett Gaines <ninjanomnom@gmail.com>
2023-11-11 01:00:56 -05:00
SkyratBot
aaa404a436 [MIRROR] Adds garbage dumpster ruins [MDB IGNORE] (#24900)
* Adds garbage dumpster ruins (#79446)

## About The Pull Request
Adds 4 small space ruins. Each is a dumpster in space containing hostile
mobs to fight and items to bring back to the station. There's a
decommissioned garbage truck pulling each dumpster which acts as a
staging area before you take on the mobs inside.
All the fights are in cramped dark areas with full pressure, air is
breathable but sometimes has miasma in it so beware of getting sick. So
you can drop your space suit and put on armour, but PKAs won't fire at
full power and keeping a gas mask on is recommended.
Also all the dumpsters look the same from the outside so you gotta crawl
inside to know what's inside. And no you can't metagame it with mesons
either.

Comes in the following flavours:
Food Waste
Full of trash from kitchens, and food. Some of the food is still edible.
There's a lot of territorial rats. You can chop them up into meat if you
want more food. The big prize is a big vat of cooking oil.

Medical Waste
Spare organs, cyberorgans and almost a full set of old surgical gear.
There's a syndicate agent here up to no good and he has a GUN. The gun
blows up when the agent dies so you can't get it. There's a few corpses
of different species in bodybags and some spare corpse parts so you can
bring them back to the station and give them to the coroner. Also a
single use eyestealer in a safe (the cool way to do surgery) and a bug
from the old traitor objective that doesn't do jack but can probably
still get you thrown in perma.

Construction Garbage
Tools and construction materials here, including a cool hammer that fits
in a tool belt and can function as a crowbar. There's also a drug lab
with plenty of weird pills to eat, cigarettes to eat and an angry
russian drug dealer who will stab you if he sees you. He has a badass
lighter and a flamethrower you can take after you kill him. Setting fire
to things in here is not recommended because of all the welding fuel.

Mall Trash
Action figures, trading cards, Christmas crackers and other trash the
local mall tossed out. Also a mothman used to live here but he got eaten
by giant spiders so you can grab his stuff, including snacks and a
civilian modsuit with no mods (wow). You can cut through the webs to
kill the spiders or let them eat you too if you want.
## Why It's Good For The Game
More content for space explorers.
More variety to the potential dangers of space, now u can get sick and
die or get eaten by rats (this is hobo RP)
Better environmental storytelling. Now instead of players left asking
"what happens to the garbage when it goes into space" they can rest
assured that there's busted ass garbage trucks in space. All their
questions are answered.
Loot that encourages working with people on the station. Raw food for
the kitchen, rats for genetics, organs for the coroner, etc
## Changelog
🆑
add: 4 new space ruins
/🆑

* Adds garbage dumpster ruins

* Update belt.dmi

* Fixes Jacked Up LF/CRLF issuess

---------

Co-authored-by: DaCoolBoss <142358580+DaCoolBoss@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
2023-11-10 21:25:49 -05:00
SkyratBot
3effeb131a [MIRROR] Fixes Mock Clients Leaking Into Production [MDB IGNORE] (#24917)
* Fixes Mock Clients Leaking Into Production (#79640)

Basically, every time we made a new client interface, we would add it to
`GLOB.directory` (new behavior introduced in (#79348
(88bb3afcce)).
This would mean that we would pass in junk mock clients into the vote
processing feature instead of actual legitimate clients, as well as a
slew of unintended consequences elsewhere wherever we access
`GLOB.directory`.

We would create mock clients in stuff like
`randomize_human_appearance()`, which is legitimately used and called in
a slew of places where we want random humans, which allows junk to enter
in directory per the aforementioned point.

Anyways, let's just... not let's add it to the directory if we aren't
running unit tests. I also made the vote processing code a bit more
strict juuuuuuuust in case

* Fixes Mock Clients Leaking Into Production

---------

Co-authored-by: san7890 <the@san7890.com>
2023-11-10 20:27:09 -05:00
SkyratBot
94e579cd35 [MIRROR] Emergency hotfix for engi crossbow [NO GBP] [MDB IGNORE] (#24910)
* Emergency hotfix for engi crossbow [NO GBP] (#79606)

Hadnt added these commits when the PR got merged due to not expecting it
oops

## Why It's Good For The Game

See above, used to make my last pr actually function as intended.

## Changelog

🆑
fix: fixed engi crossbow being able to be used onehanded + ability to
craft with sci inducers
/🆑

---------

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

* Emergency hotfix for engi crossbow [NO GBP]

---------

Co-authored-by: KingkumaArt <69398298+KingkumaArt@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@ gmail.com>
2023-11-10 09:44:42 -05:00
SkyratBot
bbd547ec95 [MIRROR] Targeting Datums Renamed (and global) [MDB IGNORE] (#24885)
* Targeting Datums Renamed (and global) (#79513)

## About The Pull Request

[Implements the backend required to make targeting datums
global](6901ead12e)

It's inconsistent with the rest of basic ai for these to have a high
degree of state, plus like, such a waste yaknow?

[Implements
GET_TARGETING_STRATEGY](d79c29134d)

Regexes used:
new.*(/datum/targetting_datum[^,(]*)\(*\)* -> GET_TARGETING_STRATEGY($1)

Renamed all instances of targetting to targeting (also targetting datum
-> targeting strategy)

I've used GET_TARGETING_STRATEGY at the source where the keys are
actually used, rather then in the listing. This works out just fine.

## Why It's Good For The Game

Not a misspelled name through the whole codebase, very slightly less
memory load for basically no downside (slight cpu cost maybe but not a
significant one.

---------

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

* Targeting Datums Renamed (and global)

* Update dogs.dm

* Modular

* Modular

* Modular

* Merge skew?

* Revert "Merge skew?"

This reverts commit 0889389ab5cb5c56655f1860d9173ba87efe9a22.

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-11-09 16:37:48 -05:00
SkyratBot
e135ddecc1 [MIRROR] Changes to the lore of Knock [MDB IGNORE] (#24891)
* Changes to the lore of Knock (#79542)

## About The Pull Request

This PR renames Knock to Lock, and changes most of the knowledge gain
lore.

## Why It's Good For The Game

The Knock Lore, is based on the Knock Principle from Cultist Simulator,
with the path description being copied from the wiki. Many other
keywords and concepts are fully lifted from that game (Locksmith's
Secret, Mother Of Ants, etc). In my vision, if a heretic path has to be
based on a principle from cultist simulator, it should have its own
spin, and also, the knowledge gain texts should tell a story. For
example, Ash tells the story of a watchman burning down their city after
being betrayed, and Cosmic is a love story between a knowledge seeker
and a monster from the beyond.

So I have decided to reflavour Knock. I have changed the name to Lock,
so at least it would feel similar, just like how Blade is akin to Edge.
Many powers also block people or confuse their paths instead of opening
new ways, and thus, I feel a path whose name implies that it *both*
opens and closes would be more self describing.

I have changed most of its lore to be about the Locked Labyrinth, where
knowledge seekers willingly trap themselves and submit themselves to
servitude to find ultimate freedom by progressing through its trials.
These are the Stewards, who are basically workers in an infinite and
malicious hotel in their dreams. Consider them assistants if you will
(this wasn't my intention when I wrote the lore, but thinking about it
in retrospect, it honestly fits). In the implied story, the heretic
joins their ranks, but keeps getting closer to the more corrupt members,
along with parasitic spirits. Ultimately, they manage to open the
Labyrinth's core, letting out the Stewards, allowing them to manifest in
the forms of heretic summon creatures.

The side path spells and the lock knowledge ritual I have not touched,
they were fine. Some items have been renamed and repathed.

I have kept the distinctive sound effect for using the Grasp, as its
unique enough. Though if someone did have a nice sound effect for
turning a lock and added some filters, I would add it.

**DB Issue**

I have renamed the achievement's define to MEDAL_LOCK_ASCENSION but kept
the value as "Knock", as I don't know how trigger a change in the DB. If
this is a blocking change, I'll try to figure out how to make a
migration file.

**Future improvements**

I would also come back later with another PR, that hands out names to
the eldritch beings spawned by the portal, based on the Stewards in the
knowledge gain lore that I added, along with some new ones that fit the
theme, and some jokey ones like Minotaur.

## Changelog

🆑
spellcheck: Renamed Knock to Locks, and changed most of the flavor text
of knowledge gain, and renamed some items and knowledges from the path.
/🆑

* Changes to the lore of Knock

---------

Co-authored-by: Profakos <profakos@gmail.com>
2023-11-09 15:31:16 -05:00
SkyratBot
42f1f6b7e1 [MIRROR] [NO GBP] Final precision rounding for reagent volumes [MDB IGNORE] (#24886)
* [NO GBP] Final precision rounding for reagent volumes (#79571)

## About The Pull Request
- Fixes #79566

This applies mostly to plumbing reaction chambers but to implement that
fix some rounding operations had to be carried over to `holder.dm`(which
will benefit everything in general)

I'm pulling out all the stops here. Rather than checking "are we close
enough" plumbing reaction chambers will now check if we and i quote
"absolutely insanely precisely there". This means volumes like 49.9999
should become 50 period.

Note this is a high probability & not a definite fix. i.e. now
theoretically 100% of the time you should not get this problem but if it
still happens then as of now i have no solution and have to go back to
the drawing board on this one but i am very confident this should be the
end of all plumbing related problems i.e. at least problems with volumes
not getting rounded to whole numbers

## Changelog
🆑
fix: plumbing factories should not rarely/randomly brick at volumes like
0.9999(when in fact it should have been 1)
/🆑

* [NO GBP] Final precision rounding for reagent volumes

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
2023-11-09 12:17:36 -05:00
SkyratBot
bbe757e7a5 [MIRROR] Automatic fire for mobs [MDB IGNORE] (#24871)
* Automatic fire for mobs (#79502)

This adds a component you can slap onto mobs with ranged attacks which
lets them fire repeatedly with the mouse held down.
I applied it to a couple of existing mobs, to be honest we don't
currently have any which _need_ this but I will add it to the Ranged
Holoparasite (which really does need it) depending on which PR gets
merged first.

* Automatic fire for mobs

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-11-09 03:22:17 -05:00
SkyratBot
064682b5cd [MIRROR] Adds engi improvised weapon - rebar crossbow + Engi Exclusive Tot Shop Variant [MDB IGNORE] (#24860)
* Adds engi improvised weapon - rebar crossbow + Engi Exclusive Tot Shop Variant (#78777)

<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

![image](https://github.com/KingkumaArt/KingkumaTGSS13/assets/69398298/e4d921a6-9bd6-4eb3-9085-2bfa5df67826)
Engi now has access to a Half Life 2 Inspired rebar crossbow! Made of
rods, wire, and an inducer, it shoots sharpened iron rods at a high
velocity. High damage and good embed chance, but requires you to reload
every shot which requires you to stand still for three seconds to pull
the string back. You can also Use a wrench on it to force it to store
more rods (read: more than one), but risks it exploding and shooting you
instead.

The syndicate variant, avaliable to traitor engis, can fire three rounds
before needing a reload, and features a scope and better armor piercing
ammpo, but costs 10TC. I see it as a sidegrade to the revolver - quieter
and has much more widespread ammuniton, but holds less ammo and doesnt
have the same burst stopping power. And, to those concerned about the
balance of a non-traitor with this item - the AP ammo can only be made
by the traitor who bought it, and anyone else has to use normal ammo.

GUN STAT JUNK
Normal one has 60% embed chance and does 40 damage (against unarmored
targetd), but requires you to wait at least 3 seconds not moving to pull
the string back. Good alpha strike but not sustainable in a long fight.
Its akin to a pipegun.

Lacks any AP qualities besides piercing a jumpsuit, because any wound
chance it has is due to a bare skin bonus. Generally not a great weapon
to fight sec with.

Syndie version is generally the above but better. Takes less to pull the
string back, slightly higher damage, better fire rate, etc. Doesnt fare
well against any armor thats equivalent to sec gear or better due to
most having low (relatively) AP and wound chance, but good bare wound
bonus.

STATS TLDR: Its good against unarmored chumps and greyshirts but anyone
in armor that protects against bullets will kick your teeth in.

Also, Ammo is crafted from an iron rod. I wanted to have it just fire
rods as is, but theyre stacked items which you cant define projectiles
or ammo from.

## Why It's Good For The Game

I've always felt engi, for as big of a department as it is, is lacking
in the "fun weapons" area. Sci has mechs and xenobio, med has chem nades
and syringe guns, and cargo has anything the QM will buy - but other
than the flamer and shocked doors, engi doesnt have much. Thats why I
made this pr. it was originally just a traitor item, as they lacked many
traitor items in their shop, but I felt like a worse, bootleg version
would suit them.

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
add: Enginenering rebar crossbows + tot kit
add: Added a bunch of ammos and crafting junk to make the ammo exist
image: added icond for all the above
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->

---------

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

* Adds engi improvised weapon - rebar crossbow + Engi Exclusive Tot Shop Variant

---------

Co-authored-by: KingkumaArt <69398298+KingkumaArt@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@ gmail.com>
2023-11-08 22:35:31 -05:00
SkyratBot
5209631c68 [MIRROR] Adds wibbles to certain anomalous entities [MDB IGNORE] (#24851)
* Adds wibbles to certain anomalous entities (#79549)

## About The Pull Request

Adds wibble animation to portals, some anomalies, and bluespace rifts.

https://github.com/tgstation/tgstation/assets/51863163/9355dc53-590e-4558-82a3-15145829ce16

## Why It's Good For The Game

It looks kinda cool.
Helps cement these as anomalous, wacky things that don't necessarily fit
in our plane of existence.

## Changelog

🆑 Melbert
add: Anomalies, portals, and bluespace rifts will now wibble a bit.
/🆑

* Adds wibbles to certain anomalous entities

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-11-07 21:03:44 -05:00
SkyratBot
3e31efbec6 [MIRROR] Hey what if I made Sleeping Carp better at nonlethal takedowns and also deflect with combat mode instead of throw mode (but cost more) [MDB IGNORE] (#24850)
* Hey what if I made Sleeping Carp better at nonlethal takedowns and also deflect with combat mode instead of throw mode (but cost more) (#79517)

## About The Pull Request

It's been a hot minute hasn't it?

When I initially reworked Sleeping Carp, we didn't have combat mode. Now
that we do, and that Sleeping Carp has substantially less defensive
power to justify having to make a choice between deflection and
attacking, it's probably about time we updated this aspect back to what
it was before my rework. Sorta.

Now, we can have all the deniability of the previous method, while also
letting you reliably protect yourself from ranged attacks at all times
while it matters. Because of this, I increased the price up to 17 TC
because of this change just to be on the safe side. The higher uptime of
projectile immunity while also being able to attack during that time
makes this a lot stronger overall.

Secondly, Sleeping Carp presently just isn't as good as a good ol'
baton. It takes a lot more hits to accomplish the same task that a baton
can. Many people feel like they can't even reasonably fight anyone for
fear of the baton, or they would rather use a baton and kill someone at
their leisure. So we've updated some of the moves in order to facilitate
Sleeping Carp as a substantial contender for 1v1 fighting, and lessen
the need for a baton by adding a lot more Stamina damage overall to the
various attacks;

**Keelhaul**: Now a Shove Shove combo. Does literally zero lethal
damage, but now temporarily blinds and dizzies the target as well as its
previous effects. The amount of lethal damage it did was...extremely
small, so this isn't a particularly big loss.

**Grabs and Shoves**: Deal some amount of stamina damage (20). You need
to be in combat mode in order to perform these special attacks (more
deniability). Grabbing someone while they have 80 Stamina damage or more
will cause them to fall unconscious. Yes, I really did just want to add
a Vulcan Nerve Pinch, what do you want from me?

That's it actually. Oh, I guess they are heavy sleepers now too. Because
its funny.

## Why It's Good For The Game

I often get told (read: thrown various insults and slurs at me while
mentioning this as the justification) that Sleeping Carp is not very
strong anymore since it lost all that invisible armor I added way back +
I removed the stuns in my initial rework. This made some people upset (I
think at least one person wished for my death).

So, having given it at least 2 years, I wanted to recapture parts of
what made the older Sleeping Carp (before my rework) strong, some of the
benefits of the new version, and introduce a brand new aspect; nonlethal
takedowns. This makes it beneficial for pacifists, as well as for
kidnapping.

This should not meaningfully make Sleeping Carp any stronger against the
things that typically ruin its day. I suspect in a straight joust with a
baton, Sleeping Carp will still struggle. But against what should be its
strong points (lone targets and ranged weapons), it will be strong once
again rather than clumsily unable to do very much at all.

## Changelog
🆑
balance: Harnessing Shoreline Quay (bluespace energy, probably), a
mystical energy (total bullshit) that permeates the Astral Waterways
(bluespace quantum dimensions, probably), Sleeping Carp users can now
once against deflect projectiles with their bare hands when focused in
on battle (in combat mode).
balance: The Keelhaul technique is now nonlethal (a philosophical
acknowledgement of the familial bond of sleep and death), but causes the
target to become temporarily blind and dizzy along with its previous
effects.
balance: Sleeping carp users, while in combat mode, deal Stamina damage
with their grabs and shoves. If the target of their grab has enough
Stamina damage (80), they are knocked unconscious from a well placed
nerve pinch.
balance: Sleeping carp users find it very hard to wake up once they fall
asleep....
/🆑

* Hey what if I made Sleeping Carp better at nonlethal takedowns and also deflect with combat mode instead of throw mode (but cost more)

---------

Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
2023-11-07 21:03:02 -05:00