Commit Graph

422 Commits

Author SHA1 Message Date
SkyratBot
e6f66d3a4a [MIRROR] Experiment with replacing weakrefs in AI blackboard with deleting signals, ideally making it easier to work with and harder to cause hard deletes [MDB IGNORE] (#20719)
* Experiment with replacing weakrefs in AI blackboard with deleting signals, ideally making it easier to work with and harder to cause hard deletes (#74791)

## About The Pull Request

Replaces weakref usage in AI blackboards with deleting signals

All blackboard var setting must go through setters rather than directly

## Why It's Good For The Game

This both makes it a ton easier to develop AI for, and also makes it
harder for hard deletes to sneak in, as has been seen with recent 515
prs showing hard deletes in AI blackboards

(To quantify "making it easier to develop AI", I found multiple bugs in
existing AI code due to the usage of weakrefs.)

I'm looking for `@ Jacquerel` `@ tralezab` 's opinions on the matter, also
maybe `@ LemonInTheDark` if they're interested

## Changelog

🆑 Melbert
refactor: Mob ai refactored once again
/🆑

* Experiment with replacing weakrefs in AI blackboard with deleting signals, ideally making it easier to work with and harder to cause hard deletes

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-04-26 21:17:15 +01:00
SkyratBot
59b73c3d65 [MIRROR] Cleans up thermite component code [MDB IGNORE] (#20686)
* Cleans up thermite component code (#74825)

## About The Pull Request

Nothing too interesting to be quite honest, just cleans up the thermite
component code a bit because it was a bit weird.

## Why It's Good For The Game

This probably fixes a few rare bugs where the thermite overlay
disappears due to an update_icon call. Slightly neater code.
Also, adds an examine message to thermite walls because small QoL stuff
is neat.

## Changelog

🆑
qol: Thermited walls now get an examine message telling you they are, in
fact, thermited.
/🆑

---------

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

* Cleans up thermite component code

---------

Co-authored-by: ChungusGamer666 <82850673+ChungusGamer666@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
2023-04-21 17:21:21 -04:00
SkyratBot
0a1fbbd258 [MIRROR] Turns loomable component into a bespoke element [MDB IGNORE] (#20618)
* Turns loomable component into a bespoke element (#74685)

## About The Pull Request

Thought https://github.com/tgstation/tgstation/pull/74552 was good?

YOU WON'T BE READY FOR THIS ONE...

## Why It's Good For The Game

free miniscule amount of performance by getting rid of some silly
component datums

## Changelog

player dont care

---------

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

* Turns loomable component into a bespoke element

---------

Co-authored-by: ChungusGamer666 <82850673+ChungusGamer666@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
2023-04-17 21:52:01 -07:00
SkyratBot
9a594755f3 [MIRROR] Renames delta time to be a more obvious name [MDB IGNORE] (#20507)
* Renames delta time to be a more obvious name

* updates to our code

---------

Co-authored-by: oranges <email@oranges.net.nz>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
2023-04-12 20:45:43 +01:00
SkyratBot
fe8fc4d010 [MIRROR] Split weapons_and_items.dmi icons into their own categories [MDB IGNORE] (#20360)
* Split weapons_and_items.dmi icons into their own categories

* update modular

* I hate the dme

* random ass define removal fix

* missing icons fix

---------

Co-authored-by: Tim <timothymtorres@gmail.com>
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
2023-04-12 19:53:43 +01:00
SkyratBot
21a96d43ce [MIRROR] Modifies spectral instruments to make retaliation more viable. [MDB IGNORE] (#20443)
* Modifies spectral instruments to make retaliation more viable.  (#74599)

## About The Pull Request

Reduces the damage dealt by the spectral trombone, saxophone and trumpet
and adds a message warning of the change they cause

## Why It's Good For The Game

In their current state the spectral instruments transform people into 4
hits, the first two hits dealing enough stam damage that it slows to
point where escape isn't possible.
Since it's also rare most people don't know of it'll transform you into
a skeleton
In order to allow for more viable retaliation against the transformation
into a skeleton this PR reduces the stamina damage dealt and prints a
message for the target that hints them towards the transformation.

## Changelog

:cl:Somepan
add: Added a message upon being hit by any spectral instruments
balance: Reduced the stamina damage dealt by spectral instruments from
25 to 18 making it transform after 6 hits instead of 4
/🆑

* Modifies spectral instruments to make retaliation more viable.

---------

Co-authored-by: Pinkufeck <63017503+Pinkufeck@users.noreply.github.com>
2023-04-09 19:09:50 -07:00
SkyratBot
a560da119f [MIRROR] [Ready] New Cosmic Heretic Path DLC [MDB IGNORE] (#20416)
[Ready] New Cosmic Heretic Path DLC

Co-authored-by: Comxy <tijntensen@gmail.com>
2023-04-08 19:10:34 +01:00
SkyratBot
6f3befe233 [MIRROR] Reagent soup / Soup rework / Stoves - A kitchen expansion [MDB IGNORE] (#20410)
* Reagent soup / Soup rework / Stoves - A kitchen expansion

* fixes that stuff

* puts the range stove on maps that sohuld have it

* fixes some paths that don't exist anymore

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Paxilmaniac <paxilmaniac@gmail.com>
2023-04-08 13:30:41 -04:00
SkyratBot
d9dfd52908 [MIRROR] OOC-ifies the Bluespace Tag [MDB IGNORE] (#20254)
* OOC-ifies the Bluespace Tag

* Update weapon_description.dm

---------

Co-authored-by: EOBGames <58124831+EOBGames@users.noreply.github.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
2023-04-01 22:04:37 +01:00
SkyratBot
b6601a2405 [MIRROR] March into Mapness: Meateor [MDB IGNORE] (#20233)
* March into Mapness: Meateor (#74070)

* March into Mapness: Meateor

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-04-01 05:39:55 -04:00
SkyratBot
2dc1e76135 [MIRROR] Makes eyestabbing and neck slicing a little easier to use. Also add's screams to kneecapping. [MDB IGNORE] (#20217)
Makes eyestabbing and neck slicing a little easier to use. Also add's screams to kneecapping.

Co-authored-by: Helg2 <93882977+Helg2@users.noreply.github.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
2023-04-01 03:24:54 +01:00
SkyratBot
3464b6bfb2 [MIRROR] Refactors Regenerate Organs, and a few organ helpers [MDB IGNORE] (#20094)
* Refactors Regenerate Organs, and a few organ helpers

* MERGE CONFLICTS

* GETORGANSLOT > GET_ORGAN_SLOT

* GETORGAN > get_organ_by_type

* lint repairs

* more lint

* Update tgstation.dme

* Update surgery_step.dm

---------

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
2023-04-01 02:51:06 +01:00
Gandalf
e4b4d4d3c0 MISSED MIRROR [Lints Against Unmanaged Local Defines] (#20204)
* https://github.com/tgstation/tgstation/pull/74333

https: //github.com/tgstation/tgstation/pull/74333
Co-Authored-By: tattle <66640614+dragomagol@users.noreply.github.com>

* var stuff

Co-Authored-By: tattle <66640614+dragomagol@users.noreply.github.com>

* vars

* Update sol_fed.dm

---------

Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
2023-04-01 01:15:22 +01:00
SkyratBot
ee5a40cb2b [MIRROR] Minor Gravity Fixes [MDB IGNORE] (#20127)
* Minor Gravity Fixes (#74285)

## About The Pull Request

Fixes forced gravity not updating a mob (trait was added too early,
before hook signals are registered)
Fixes spawning a mob in space not causing floats (default grav was 0, so
== null was wrong)
Runs shake_everyone() (Our gravity gen reaction hook) AFTER gravity
changes, ensuring mobs hook into it

## Why It's Good For The Game

Closes #74271
Closes #74272 (Caused by being in nograv but not floating)
Closes #74274
## Changelog
🆑
fix: Fixes a bunch of minor gravity bugs, report em if you see more
yeah?
/🆑

* Minor Gravity Fixes

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2023-03-29 22:27:00 +01:00
SkyratBot
43fde4181e [MIRROR] Saves roughly 20% off living/Life(), makes gravity event based [MDB IGNORE] (#20074)
Saves roughly 20% off living/Life(), makes gravity event based

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
2023-03-27 03:28:03 +01:00
SkyratBot
6e029611ac [MIRROR] Implements AddTraits and RemoveTraits procs for adding/removing multiple traits + swag unit test [MDB IGNORE] (#19959)
* Implements AddTraits and RemoveTraits procs for adding/removing multiple traits + swag unit test

* MISSED MIRROR https://github.com/tgstation/tgstation/pull/71606

* Update modules_supply.dm

* Update tgstation.dme

---------

Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
2023-03-27 03:26:52 +01:00
SkyratBot
629941e590 [MIRROR] Turns stickers into a component and an element [MDB IGNORE] (#20071)
* Turns stickers into a component and an element (#74091)

## About The Pull Request
Adds /datum/element/sticker, and /datum/component/attached_sticker
Sticker items now mostly operate off /datum/element/sticker
The sticker element, hooks the whole "attach to stuff" and adds the
attached_sticker component to its target
The attached_sticker component, adds the overlay, hooks the clean and
on-fire signals.

## Why It's Good For The Game

Allows to check if a sticker is present on an object (which I will use
later)
Code is probably cleaner???

## Changelog
🆑
refactor: Stickers use a component and an element now to do their
sticking
/🆑

* Turns stickers into a component and an element

---------

Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com>
2023-03-26 01:58:13 -07:00
SkyratBot
dbb6c5fba4 [MIRROR] Adds non-clothing item equipping others feedback messages [MDB IGNORE] (#19881)
* Adds non-clothing item equipping others feedback messages (#73982)

## About The Pull Request
Things like pens weren't giving any feedback messages when you put them
on someone else, and I ran into this while working on another PR so I've
dealt with that

Renames `worn_dangerous` to `show_visible_message` as it was only used
to confirm if there would be visible messages or not
The `DANGEROUS_OBJECT` clothing flag is a trait now, so it can be put on
non-clothing items too
Removing non-clothing items from someone has been unchanged.

## Why It's Good For The Game
People should be able to identify that someone is putting something on
them, and recognize what that is if they pay attention.
This means that a player cannot reverse pickpocket a grenade onto
someone else without giving any indication of doing so

## Changelog

🆑
balance: Putting a non-clothing item onto someone else creates a visible
message the same way a clothing item would.
/🆑

* Adds non-clothing item equipping others feedback messages

---------

Co-authored-by: ArcaneDefence <51932756+ArcaneDefence@users.noreply.github.com>
2023-03-25 23:28:13 -07:00
SkyratBot
705e8d81f0 [MIRROR] Fix inconsistency in FREEZE_PROOF flag [MDB IGNORE] (#19979)
* Fix inconsistency in FREEZE_PROOF flag (#74102)

Although all objects that _have_ the flag attach it to
`resistance_flags` (which is what the define location implies it's
supposed to be set on), all the code that checked it for the purposes of
applying the freezing element used `obj_flags`.

As far as I can tell, that meant the only things immune to freezing were
things that "blocked z falling from above".

Also, freezing only happens with some obscure weapons and low
temperature water vapour, but hey 🤷.

🆑 coiax
fix: Coffee cups are now correctly immune to becoming frozen by low
temperature water vapour.
/🆑

---

Shout out to RaveRadbury who helped me with debugging this.

* Fix inconsistency in FREEZE_PROOF flag

---------

Co-authored-by: Jack Edge <yellowbounder@gmail.com>
2023-03-20 00:15:38 -07:00
SkyratBot
50032b8a55 [MIRROR] Correct grammar, tags, procs involving food processing [MDB IGNORE] (#19988)
* Correct grammar, tags, procs involving food processing (#74097)

The wording of microwable/grillable/processable outputs now takes into
accounts plurals.

For example, the examine text for an onion slice is now: "The onion
slices can be baked into _some_ onion rings", rather than "an onion
rings".

- Examining microwavable things now uses "can be", rather than "could
be"; the same verb as bakeable and griddlable.
- Processing atoms now uses `plural_s()` rather than just a flat `/s`,
which is unreliable.
- The use of `<b>` tags has been changed to `span_bold()`.

* Correct grammar, tags, procs involving food processing

---------

Co-authored-by: Jack Edge <yellowbounder@gmail.com>
2023-03-19 19:19:40 -07:00
lessthanthree
0d983be692 [MANUAL MIRROR] Fix: DNA Infuser & Unit Tests, Organs Bugfixes (#19211)
* Fix: DNA Infuser & Unit Tests, Organs Bugfixes (#73003)

>_"I don't remember buying tickets to Mutants on Ice."_
>-Duke Nukem

This PR is (hopefully the final) part of a series of my continuing
refactors of the DNA Infuser. This PR represents a "quality pass" which
should also iron-out the rest of the most impactful bugs.

Granular list of changes:
- This PR adds unit tests for the DNA Infuser organs and
`/datum/status_effect/organ_set_bonus` as recommended by @AnturK
- I noticed that the base `/datum/infuser_entry` was being used in the
machine for the Fly and "rejected" infusions, whereas usually we would
expect it to be a base type used only as a development template. I
corrected this issue and created `/datum/infuser_entry/fly` to be used
for that use-case instead.
- Added `/mob/proc/can_mutate()` and `/mob/living/carbon/can_mutate()`
to replace a few copied lines across several files. The proc is normally
used in the context of mutating a Human via their DNA.
- I fixed a ton of typos in organ-related code, specifically where
"receiver" was typo'd as "reciever". There are far more of those typos,
but I limited the scope of my changes to organs.
- I noticed a bug in `/datum/species/proc/regenerate_organs` wherein a
race condition caused an organ to remove itself before it's done
inserting itself. This happens because the Fly organ set bonus runs
`regenerate_organs` which calls `Remove` on the organ while `Insert` is
still in the call-stack. I added `INVOKE_ASYNC` as a workaround, and
also changed the order the signals are emitted to prevent future bugs.
This bug primarily only impacted the flyperson species transformation,
which was part of the DNA Infuser's flyperson infusion organ set bonus.
- In my last refactor PR #72745 I also introduced a bug in
`/obj/machinery/dna_infuser/proc/infuse_organ` wherein I forgot to add
the usage of `new` when attempting to implant new organs, and this PR
fixes the erroneous code.
- Fxed a bug which causes the organ set bonus to activate when mixing
organs from different sources, which is caused by a developer oversight
wherein all `/datum/status_effect/organ_set_bonus` had identical IDs.
- Added a cleaner `replacetext`-based way of handling pronouns in
`/datum/element/noticable_organ/proc/on_receiver_examine`, using custom
macros `%PRONOUN_S` and `%PRONOUN_ES` as advised by @MrMelbert
- This PR also fixes #72767

With the changes in this PR the machine will finally work as we expect
it to. By adding unit tests we will also be able to ensure that it works
as expected from now on. I feel confident saying that the completeness,
algorithmic correctness, and code health of the DNA Infuser is much
better than it was before.

🆑 A.C.M.O.
fix: Fully fixed the DNA Infuser, which will now infuse organs as
expected.
fix: Fixed flyperson species transformation and organ set bonus, which
was throwing a runtime.
fix: Fixed many typos in organ-related source code.
/🆑

---------

Co-authored-by: Time-Green <timkoster1@hotmail.com>

* *shrug

* Uncommented the line Gandalf wanted uncommented

* Properly fixes CI on this one, hopefully.

---------

Co-authored-by: Dani Glore <fantasticdragons@gmail.com>
Co-authored-by: Time-Green <timkoster1@hotmail.com>
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
2023-03-17 18:29:15 -04:00
SkyratBot
c1a30a8eaf [MIRROR] Paradox clones spawns with "copies" of their target's memories [MDB IGNORE] (#19879)
* Paradox clones spawns with "copies" of their target's memories (#73988)

## About The Pull Request

Paradox clones spawn with a "quick copy" of their target's memories.

These are notably limited in that they can't be used for stories
(engraving or tattoos), but if people metagame Paradox clones by saying
"engrave something for me" there's no hope for this community

Closes #73931

## Why It's Good For The Game

Stops a meta-y exploit

## Changelog

🆑 Melbert
fix: Paradox Clones now know that their target knows.
/🆑

* Paradox clones spawns with "copies" of their target's memories

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-03-15 11:15:25 -07:00
SkyratBot
dff0577483 [MIRROR] Converts the crackable element to mutable appearances, saves 0.15 seconds of init [MDB IGNORE] (#19830)
* Converts the crackable element to mutable appearances, saves 0.15 seconds of init (#73941)

## About The Pull Request

Instead of passing in an icon as a source to the alpha mask filter, we
can stick a mutable appearance in our overlays list with a render target
set, and use that render target to do our masking. Remember to use "*"
to avoid rendering the crack twice

## Why It's Good For The Game

CPU time

* Converts the crackable element to mutable appearances, saves 0.15 seconds of init

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2023-03-13 16:20:00 -07:00
SkyratBot
42dd487728 [MIRROR] Station Trait: Spider Infestation [MDB IGNORE] (#19813)
* Station Trait: Spider Infestation (#73893)

## About The Pull Request

Hate having your cables eaten by mice? Nanotrasen have heard your
complaints and settled on a natural, _organic_, and eco-friendly
solution.

When this station trait is active, roundstart and event mouse spawns
have a chance to instead be replaced with duct spiders (both will exist,
it doesn't remove mice).
Duct spiders are largely harmless to humans, actively hunt other
maintenance creatures (such as mice), and have only one _tiny_ downside.

![image](https://user-images.githubusercontent.com/7483112/224345781-2627be98-67f2-4cab-ac40-c6c9b35ea909.png)

These mobs can also sometimes be spawned by a minor scrubber clog event.

As a side note, all spider basic mobs with AI (except Araneus) will now
try to automatically fill a small area around them with webs.

Also I made it so that mobs will ignore their random_walking behaviour
if they're engaged in a `do_after`, just in case.

## Why It's Good For The Game

Adds a little bit of variety to things which can slightly annoy you in
maintenance.
Spiders will automatically make places they live in look like spiders
live there.

## Changelog

🆑
add: A station trait which sometimes populates maintenance with small
spiders. You can wear them as a hat if you wanted to have a spider on
your head for some reason.
add: Spider mobs will automatically start webbing up their environment.
/🆑

* Station Trait: Spider Infestation

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-03-13 02:00:22 +00:00
SkyratBot
4912b160a8 [MIRROR] Removes bad nodamage var from projectiles, fixes Juggernaut / Rust Walker projectiles doing zero damage [MDB IGNORE] (#19768)
* Removes bad `nodamage` var from projectiles, fixes Juggernaut / Rust Walker projectiles doing zero damage

* wew

* Update drinks.dm

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
2023-03-11 04:19:58 +00:00
SkyratBot
7f31d138c4 [MIRROR] Basic Wumborian Fugu & Fugu Gland [MDB IGNORE] (#19369)
* Basic Wumborian Fugu & Fugu Gland

* Update spider_variants.dm

* wew

* Update wumborian_fugu.dm

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
2023-03-10 04:52:34 +00:00
SkyratBot
480745ce05 [MIRROR] Basic Mob Spiders III: Sgt. Araneus is no longer a bat [MDB IGNORE] (#19315)
* Basic Mob Spiders III: Sgt. Araneus is no longer a bat

* spooky scary spider

* Revert "spooky scary spider"

This reverts commit 7bcca7750390c7ba6aaa08760886eda524f600f8.

* resolve conflicts

* resolve conflicts

* https://github.com/tgstation/tgstation/pull/73724

https://github.com/tgstation/tgstation/pull/73724

* https://github.com/Skyrat-SS13/Skyrat-tg/pull/19561

* fixes

* wew

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: lessthnthree <three@lessthanthree.dk>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
2023-03-10 04:47:03 +00:00
SkyratBot
a993ba2461 [MIRROR] Fix chef food ownership to follow mind [MDB IGNORE] (#19517)
* Fix chef food ownership to follow mind (#73600)

🆑 coiax
fix: A chef who is beheaded, and the head stitched on another body will
still see their food as their own.
/🆑

## Why It's Good For The Game

Having food ownership be based on the mind, rather than the mob, makes
it resilient to body-swap, mind-swap, podcloning (cloning!?),
situations. Because even though you may have been reduced to just a
head, that stew is still yours, you still made it.

* Fix chef food ownership to follow mind

---------

Co-authored-by: Jack Edge <yellowbounder@gmail.com>
2023-03-10 02:41:30 +00:00
SkyratBot
1f51f99bb8 [MIRROR] Fixes seeing monkey ai examine text if the monkey doesn't have eyes to look primal with. [MDB IGNORE] (#19385)
* Fixes seeing monkey ai examine text if the monkey doesn't have eyes to look primal with.

* Update noticable_organ.dm

---------

Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
2023-03-10 02:40:19 +00:00
SkyratBot
0b17600cce [MIRROR] Forcing an embed means that it will always happen (Effects trapped posters, accidental consumption, and bullet shrapnel) [MDB IGNORE] (#19740)
* Forcing an embed means that it will always happen (Effects trapped posters, accidental consumption, and bullet shrapnel) (#73729)

## About The Pull Request

Addresses #73105
I confidently asserted in the issue that the current behaviour was not a
bug, but lo and behold when I went to investigate this on March 1st what
did I find... a bug! Force embed actually never worked in the first
place because the passed arguments were in the wrong order. Now they are
named, so the order doesn't matter any more.
Also there was an argument called "silent" which did literally nothing,
I just deleted it.

Sending the force flag will now mean that the forced embed _always_
embeds unless it is literally impossible. The only other place this
effects is when you accidentally eat glass, so a similar case to this
one.

While I was in there, I made posters _very slightly_ more discerning
about what gloves block glass. Unfortunately there's no widely applied
and useful trait like `THICK_MATERIAL` for gloves so I mostly just
exluded latex and fingerless gloves... but that's better than nothing.

Anyway now if you bother to place a glass shard inside a poster and
someone tries to pull it down and they're not wearing thin or fingerless
gloves it will _always_ embed in their hand.

Oh and I put some balloon alerts in there.

**Unrelatedly to this change** fixing this seems to also fix an ancient
bug where bullet shrapnel would roll its embed chance twice in a row,
meaning that it had an (x/100)^2% chance of applying rather than an
(x/100)% chance, significantly less than written.
It is weird for that to go in this PR, but seems to be an effect of
fixing this bug? Not sure there's a way of not fixing both at the same
time.

## Why It's Good For The Game

You go to the effort of putting a glass shard behind a poster (the only
way to associate your own fingerprints with the deed) and are lucky
enough that the person who pulls it down isn't wearing gloves (almost
everyone does) and it _still_ only has a 50% chance to embed the glass?
The trap should work at least _some_ of the time.

## Changelog

🆑
fix: Something which is "forced" to embed will now always actually
embed. Resultingly, accidentally swallowing glass or encountering it
behind a poster without adequate protection will now always cause it to
embed into your body.
balance: Thin and fingerless gloves may no longer protect you from
having glass in your hand after pulling down a poster
fix: Bullets containing shrapnel now use their correct chance to embed,
which may cause bullet wounds to contain shrapnel more frequently.
/🆑

* Forcing an embed means that it will always happen (Effects trapped posters, accidental consumption, and bullet shrapnel)

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-03-09 20:28:05 +00:00
SkyratBot
fcc0466084 [MIRROR] Fixes an issue with multiz visholders duplicating [MDB IGNORE] (#19727)
* Fixes an issue with multiz visholders duplicating (#73835)

## About The Pull Request

I think the inherent issue here has to do with turf refs or something,
but the big problem was I assumed if there was only once source, then
the turf must be new. This was an invalid assumption, since we can add
sources more then once, and | is used

Because of this, each time a shuttle moved, we'd add an extra source for
no reason, and stack extra vis holders. This lead to really bad
clientside lag on some out of repo maps, which is how this issue came to
my attention.

Instead checking if the sources list exists or not solves the problem
pretty handily, so let's do that.

## Why It's Good For The Game

Closes #73834, prevents a potential future OOM

* Fixes an issue with multiz visholders duplicating

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2023-03-08 11:39:01 +00:00
SkyratBot
ff0a48b839 [MIRROR] Makes the food trash element detach on trash making [MDB IGNORE] (#19661)
* Makes the food trash element detach on trash making (#73748)

This PR makes the trash maker element detach on trash creation. Most of
the times, the food is deleted soon after this element is activated.
However, there has been one exception: when you place it in a custom,
sliceable item, it will generate the trash, and then store the item in a
list. When you slice the custom item, the saved item will be added to
every slice, producing a trash for each. And this is how you get seven
banana peels out of one banana, or seven revolvers out of one gatfruit
using nothing but a humble knife and a plain pizza bread.

By detaching the trash creation element, we will prevent this behaviour,
and further future proof this element, in case someone adds another
behaviour that creates trash without destroying the food.

This PR also makes the element unregister all signals it has registered
on.

* Makes the food trash element detach on trash making

---------

Co-authored-by: Profakos <profakos@gmail.com>
2023-03-04 19:43:08 +00:00
SkyratBot
cca00f9397 [MIRROR] Frozen tanks now release the gasses inside them when shattered [MDB IGNORE] (#19645)
* Frozen tanks now release the gasses inside them when shattered (#73475)

## About The Pull Request

Instead of simply being qdel'ed, shattered items have their deconstruct
proc called (with flags set to prevent items from being dropped in the
process). This means that if an object has code that should run before
it's destroyed in order to maintain in-game consistency, that will be
called instead of ignored.

As a result:
- Internals tanks release gasses inside of them (what I wanted to fix)
- Frozen containers only destroy themselves, not everything inside of
them (unintended side effect -- I think it's good but others might
disagree)
- Grenades detonate (unintended side effect -- can be disabled by
changing the disassembled flag to true instead of false)
- Gas crystals release their contents (because theyre grenades)
- Hot Ice does NOT release anything, since it's a datum and not an
object

Also, fixes a potential bug where holodeck canisters wouldn't be
destroyed when their deconstruct was called, making them (possibly?)
indestructible. I doubt this would ever have shown up, but... it's fixed
now!

## Why It's Good For The Game

Fixes https://github.com/tgstation/tgstation/issues/71121, adds
potential support for similar future cases.
Fixes an issue where holodeck canisters (should those ever exist) would
be indestructible.

## Changelog
🆑
fix: frozen gas tanks now release their contents upon shattering
fix: holodeck gas tanks can now be deconstructed
/🆑

* Frozen tanks now release the gasses inside them when shattered

---------

Co-authored-by: skylord-a52 <skylord-a52@users.noreply.github.com>
2023-03-03 23:38:32 -08:00
lessthanthree
021c9d546e [MANUAL MIRROR] Buff scythes, goats, and plantbgone vs PLANT biotypes (#19215)
Buff scythes, goats, and plantbgone vs PLANT biotypes (#72889)

This buffs scythes, goats, and plantbgone vs PLANT biotypes:

- Scythes now deal x1.5 damage to venus flytraps (3 hits to kill)
- Scythes now target the flower bud vines
- Goats now target flower bud vines and deal 15 damage to PLANT biotypes
- Goats have a eating sound whenever they bite PLANT biotypes
- Plantbgone now does 2 dmg per unit to PLANT biotypes (10 dmg per
spray)
- Plantbgone now has a 75% chance to remove weeds and deals large damage
to flower buds
- Weed control crates now come with a pair of leather gloves
- Golems are immune to thorn effects
- Any kind of thick glove material will prevent thorn effects when
attacking
- Flower buds will now take x4 damage from fire and sharp weapons
(unless they have fire trait)
- Regular scythes are now a sharp object

Also this fixes a few runtimes with spacevines and nulls. The bane
element now accepts `mob_biotypes` bitflags as an argument.

Before my changes:

- Plant-b-gone was doing 0.4 dmg per unit to PLANT biotypes (2 dmg per
spray)
- Scythes took 5 hits to kill venus flytraps
- Goats only affected podpeople
- Flower bud vines were being ignored by weed killing code
- Plantbgone only had a 50% chance to remove weeds (and this was very
inconsistent due to RNG)
- Botanical gloves and thick gloves didn't protect from thorns
- Golems were getting pierced by thorns despite having pierce immunity
- Flower buds were not taking the x4 damage like they should have been
- Regular scythes were not a sharp object, but other scythes
(chaplain's, megafauna loot) were sharp

This makes the weed killer crate more effective since people were
complaining about it being worthless vs vines and flower buds. These
changes give people more options to respond to threats vs plants.

🆑
add: Add a pair of leather gloves to weed control crate
balance: Mobs with the PLANT biotypes (venus flytraps, pod people,
killer tomatoes) are now much weaker vs scythes, goats, and plantbgone.
balance: Plantbgone is now more effective at destroying weeds.
balance: Regular scythes are now a sharp object
fix: Fixed scythes, goats, and plantbgone not affecting flower bud
vines.
fix: Thick and botanical gloves not protecting from thorns
fix: Golems not having pierce immunity from thorns
fix: Runtime where vines tried to spread into null turf
fix: Runtime where null vines that were destroyed were trying to spread
to nearby turfs
soundadd: Add eat food sound when goats eat plants
code: Improved goat targeting code
code: The bane element now accepts `mob_biotypes` bitflags as an
argument.
/🆑

Co-authored-by: Tim <timothymtorres@gmail.com>
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
2023-03-03 18:37:34 +00:00
SkyratBot
f194b57feb [MIRROR] Basic Mob Spiders II: Elements [MDB IGNORE] (#19268)
* Basic Mob Spiders II: Elements

* Update giant_spider.dm

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
Co-authored-by: lessthnthree <three@lessthanthree.dk>
2023-03-01 11:57:49 -08:00
SkyratBot
a2cb8c5c0c [MIRROR] Completely removes do_mob and do_after_mob [MDB IGNORE] (#19126)
* Completely removes do_mob and do_after_mob

* update modular

---------

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: lessthnthree <three@lessthanthree.dk>
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
2023-02-19 19:19:50 +00:00
SkyratBot
320787ee40 [MIRROR] Corrects a grammatical error in strip text [MDB IGNORE] (#19388)
* Corrects a grammatical error in strip text (#73444)

## About The Pull Request

Changes this:

![image](https://user-images.githubusercontent.com/40036527/219127469-c725deeb-baba-4460-9f5e-e03fae486896.png)
into this:

![image](https://user-images.githubusercontent.com/40036527/219126813-db27e2eb-e65f-4799-86b2-a5dcafdf7bfc.png)

I might be missing something with how I've made this change, if theres a
reason it just used item and not item.name do point it out to me.
## Why It's Good For The Game

Grammatically corrects something that was not.
## Changelog
🆑
spellcheck: A grammatical error in strip text has been removed.
/🆑

* Corrects a grammatical error in strip text

---------

Co-authored-by: NamelessFairy <40036527+NamelessFairy@users.noreply.github.com>
2023-02-17 03:44:02 +00:00
SkyratBot
5f9f60713b [MIRROR] Starlight Polish (Space is blue!) [MDB IGNORE] (#19059)
* Starlight Polish (Space is blue!) (#72886)

<!-- 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 support to underlays to realize_overlays
Ensures decals properly handle plane offsets
Fixes space lighting double applying if it's changeturf'd into. this
will be important later
Makes solar vis_contents block emissives as expected
Moves transit tube overlays to update_overlays, adds emissive blockers
to them

#### Adds render steps

An expansion on render_target based emissive blockers. 
They allow us to hijack an object's appearance and draw it somewhere
else, or even modify it, THEN draw it somewhere else.
They chain quite nicely

Fixes shuttles deleting z holder objects

#### Makes space emissive, makes walls and floors block emissives
The core idea here goes like this:
We make space glow, and give its overlays some color

This way, the tile and space parallax remain fullbright, along with
anything that doesn't block emissives, but anything that does block
emissives will instead get shaded the color of starlight

This requires a bit of extra work, see later

This is done automatically with render relays, which now support
specifiying layer and color (Need to make an editor for these one of
these days)

The emissive blocking floor stuff requires making a second render plate
to prevent double scaling

Also adds some new layering defines for lighting, and ensures all turf
lights have a layer. We'll get to this soon

#### Makes things in space blue

We color them the same as starlight, by taking advantage of space being
emissive
This means that things in space that block emissive will block it
correctly and be colored blue by the light overlay, but space itself
will remain fullbright

This does require redefining what always_lit means, but nothing but
cordons use that so it's fineee


#### Makes glass above space glow, and some other stuff

Glass tiles that sit above space will now shine light with matching
color to the glasses color. This includes mat tiles.

Glass tiles (not mat because they have no alpha) also only partially
block emissives.
Adds a new proc that uses render steps to acomplish this, essentially
we're cutting out bits below X alpha and drawing what remains as an
emissive.

#### Modifies partial space showing to support glow

Essentially, alongside displaying space as an underlay, we also display
a light overlay colored like starlight.
That starlight overlay gets masked to only be visible in bits that do
not contain any alpha.

We also mask the turf lighting to not go into bits that have no alpha,
to ensure we get the effect we want.
This is done with that lighting layer thing I mentioned earlier.

#### Makes appearance realization's list output ordered

I want it output in order of overlay, sub overlay suboverlay, next
overlay
Need to use insert for that

## Why It's Good For The Game

Pretty!
Also having space be emissive is a very very good way to test for fucked
emissive blockers (If it's broken why are we even drawing the overlay)
I know for a fact mob blockers on lizards and socks are kinda yorked, I
think there's more

<details>
<summary>
Old
</summary>


![image](https://user-images.githubusercontent.com/58055496/213916157-d4b38aa7-3ab6-42a4-989f-7bfba2dc2cba.png)

![image](https://user-images.githubusercontent.com/58055496/213916077-637fa288-bbee-477d-aded-730d9683477e.png)

![image](https://user-images.githubusercontent.com/58055496/213916088-0657a8a2-5627-48e2-8c4b-870c90ef2072.png)

</details>


<details>
<summary>
New
</summary>


![image](https://user-images.githubusercontent.com/58055496/213916107-2af74e64-1817-4a44-b528-180a9160cb9e.png)

![image](https://user-images.githubusercontent.com/58055496/213916115-5fa36fcc-b988-4ccf-850e-21c26ed463d0.png)

![image](https://user-images.githubusercontent.com/58055496/213916120-6833187d-b12e-42a7-ac4b-63c56deb71e5.png)

</details>

## 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: Space now makes things in it starlight faintly blue
fix: Glass floors that display space now properly let space shine
through them, rather then hiding it in the dark
add: Glass floors above space now glow faintly depending on their glass
type
/🆑

<!-- 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: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>

* update modular

* Update _decal.dm

* Update _decal.dm

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
2023-02-12 00:42:28 -08:00
SkyratBot
1fe0d145a3 [MIRROR] Converts blindness and nearsightedness to status effects, scratches some VERY dumb blindness handling that resulted in mobs becoming "incurably" blind [MDB IGNORE] (#18760)
* Converts blindness and nearsightedness to status effects, scratches some VERY dumb blindness handling that resulted in mobs becoming "incurably" blind

* Fixes the conflicts and makes shit compile!

* Fixes other things that didn't show up because I hadn't updated

* Fixes the lints.

* Okay NOW it's ready (please don't add anything else that touches blindness I beg you)

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
2023-02-03 16:08:32 -05:00
Nerevar
128fdf5558 [READY][EVIL CODE]Makes Snails Clean Floors (#18925)
me when i reset the wrong branch to master

Co-authored-by: Snakebittenn <12636964+Snakebittenn@users.noreply.github.com>
2023-01-26 14:26:32 -05:00
SkyratBot
8fcac218c1 [MIRROR] Fix: DNA Infuser & Infusions [MDB IGNORE] (#18748)
* Fix: DNA Infuser & Infusions

* Fixes the damn conflict

* Fix: DNA Infuser Organ Filtering (#72745)

## About The Pull Request

My PR #72688 was merged mid-review. This is a followup PR to fix the
buggy code which was introduced by myself in between testing a naive
approach to organ filtering. The code does not work due to my own
oversight, as I was attempting to test buggy code in
`/obj/machinery/dna_infuser/proc/infuse_organ` when the prior PR was
merged.

I took this chance to simplify the code more, and I added an additional
proc to the DNA Infuser to replace inline code, `pick_organ`. The proc
picks a random mutated organ from the infuser entry which is also
compatible with the target mob. If none of the organs are compatible,
then the infusion still pricks you with needles but nearly-silently
fails by omitting the "You feel yourself becoming..." chat message.

`pick_organ` tries to return a valid mutant organ if all of the
following criteria are true:
1. Target must have a pre-existing organ in the same organ slot as the
new organ;
   - Or, the new organ must be external.
2. Target's pre-existing organ must be organic / not robotic.
3. Target must not have the same/identical organ.

## Why It's Good For The Game

The DNA Infuser should filter organs depending on whether or not the
occupant has one already, if it is organic, and if it doesn't exist the
occupant can still get an external organ (such as a cat tail). This PR
introduces algorithmically correct code to filter the organs, and fixes
bugs introduced by my prior PR which caused the proc to throw a runtime.

## Changelog

🆑 A.C.M.O.
fix: Fixed buggy organ filtering code in the DNA Infuser which stopped
it from infusing organs.
/🆑

Co-authored-by: Dani Glore <fantasticdragons@gmail.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
2023-01-23 17:18:50 -05:00
SkyratBot
b9958bf2b6 [MIRROR] Changes signals In item_scaling to fix inventory scaling [MDB IGNORE] (#18873)
Changes signals In item_scaling to fix inventory scaling (#72696)

## About The Pull Request
Fixes #72601 which finally allows item scalable objects to properly
scale to large again when inside an inventory.
Replaces and removes signals that don't seem to effect the item itself.
## Why It's Good For The Game
Can finally see cards in ones binder easily, and allows future items
with item_scaling to properly work.
## Changelog
🆑
fix: fixed Item scaling objects not properly scaling in inventory slots.
/🆑

Co-authored-by: Ed640 <Ed.640@hotmail.com>
2023-01-22 18:55:34 -05:00
nevimer
b2e7e489cb Missed Mirror: Fix incorrect calls to UnregisterSignal (#68698) (#18856)
Fix incorrect calls to UnregisterSignal (#68698)

Fix calls to UnregisterSignal

(cherry picked from commit aba3bc80e0)

# Conflicts:
#	code/_onclick/hud/new_player.dm
#	code/datums/status_effects/debuffs/debuffs.dm
#	code/game/objects/items/devices/geiger_counter.dm

Co-authored-by: Gamer025 <33846895+Gamer025@users.noreply.github.com>
2023-01-21 22:15:23 -08:00
nevimer
79d3bfb35a Missed Mirror: Fixes the freezing component (#68737) (#18855)
Fixes the freezing component (#68737)

(cherry picked from commit 5b0b56eef4)

# Conflicts:
#	code/datums/elements/frozen.dm

Co-authored-by: Profakos <profakos@gmail.com>
2023-01-21 22:14:07 -08:00
SkyratBot
25f4961156 [MIRROR] Refactors memories to be less painful to add and apply, moves memory detail / text to memory subtypes. Adds some new memories to demonstrate. [MDB IGNORE] (#18487)
* Refactors memories to be less painful to add and apply, moves memory detail / text to memory subtypes. Adds some new memories to demonstrate.  (#72110)

So, a huge issue with memories and - what I personally believe is the
reason why not many have been added since their inception is - they're
very annoying to add!

Normally, adding subtypes of stuff like traumas or hallucinations are as
easy as doing just that, adding a subtype.

But memories used this factory argument passing method combined with
holding all their strings in a JSON file which made it just frustrating
to add, debug, or just mess with.

It also made it much harder to organize new memories keep it clean for
stuff like downstreams.

So I refactored it. Memories are now handled on a subtype by subtype
basis, instead of all memories being a `/datum/memory`.

Any variety of arguments can be passed into memories like addcomponent
(KWARGS) so each subtype can have their own `new` parameters.

This makes it much much easier to add a new memory. All you need to do
is make your subtype and add it somewhere. Don't need to mess with jsons
or defines or anything.

To demonstrate this, I added a few memories. Some existing memories had
their story values tweak to compensate.

Makes it way simpler to add new memories. Maybe we'll get some more fun
ones now?

🆑 Melbert
add: Roundstart captains will now memorize the code to the spare ID
safe.
add: Traitors will now memorize the location and code to their uplink.
add: Heads of staff winning a revolution will now get a memory of their
success.
add: Heads of staff and head revolutionaries who lose their respective
sides of the revolution also get a memory of their failure.
add: Completing a ritual of knowledge as a heretic grants you a quality
memory.
add: Successfully defusing a bomb now grants you a cool memory. Failing
it will also grant you a memory, though you will likely not be alive to
see it.
add: Planting bombs now increase their memory quality depending on how
cool the bomb is.
refactor: Memories have been refactored to be much easier to add.
/🆑

* Modular!

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Funce <funce.973@gmail.com>
2023-01-17 12:51:58 +13:00
SkyratBot
71a25960db [MIRROR] Basic mobs won't shoot walls / Basic mobs won't leave permanent bullet casings [MDB IGNORE] (#18719)
* Basic mobs won't shoot walls / Basic mobs won't leave permanent bullet casings (#72494)

## About The Pull Request

Basic mobs using the generic ranged attack behaviour will now not
attempt to shoot a target which they can no longer see.
If they can still see you through a window that's fine because shooting
in your direction will probably break the window eventually, but a mob
knowing you're on the other side of a wall and pointlessly firing at it
isn't useful.

Additionally, adds a component to bullet casings fired by basic mobs
which deletes them after 30 seconds.

https://user-images.githubusercontent.com/7483112/211012442-027455c7-2846-426e-89fb-c8c89d891e4f.mp4

Here's a demonstration but sped up so they vanish after 5 seconds
instead.

## Why It's Good For The Game

![image](https://user-images.githubusercontent.com/7483112/210862278-f58111d9-917b-43c4-8fa0-b58c02ae8ab5.png)
We're not actually sure that's where these 75,000 bullet casings came
from (it's probably related to that pAI down there) but it's one way it
could happen.

Players with limited ammo leaving persistent bullet casings should
rarely be a problem, mobs have infinite ammo and so should not be able
to generate infinite debris. Having them just sort of disappear after 30
seconds is... less than immersive, but I feel like it's better than the
alternative.
You can attach the element to other things to thanos snap them if you
want.

## Changelog

🆑
fix: Syndicate mobs will no longer attempt to shoot you through walls,
building up massive piles of empty bullet casings in the process.
qol: Bullet casings from "weapons" fired by certain mobs will clean
themselves up after 30 seconds.
/🆑

* Basic mobs won't shoot walls / Basic mobs won't leave permanent bullet casings

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-01-14 12:25:53 -08:00
SkyratBot
b44967501c [MIRROR] Optimizes explosions (very slightly) [MDB IGNORE] (#18624)
* Optimizes explosions (very slightly)

* Update explosions.dm

* Update atoms_movable.dm

* Update dungeon.dm

* Update stone.dm

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com>
2023-01-10 12:34:26 -08:00
SkyratBot
8e8002b555 [MIRROR] Converts drowsy and eye blur to status effects, striking yet another two carbon level status vars [MDB IGNORE] (#18348)
* Converts drowsy and eye blur to status effects, striking yet another two carbon level status vars

* merge conflicts

* adjust_eye_blur and set_eye_blur_if_lower

* adjust drowsiness overdoses

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: tastyfish <crazychris32@gmail.com>
2023-01-09 13:14:47 -05:00
SkyratBot
ae3b1e78a4 [MIRROR] Dogs become tamed when given bones [MDB IGNORE] (#18549)
* Dogs become tamed when given bones

* skew

Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: tastyfish <crazychris32@gmail.com>
2023-01-09 08:38:01 -05:00
SkyratBot
ff97c189db [MIRROR] Dogs use the Pet Command system [MDB IGNORE] (#18393)
* Dogs use the Pet Command system

* modular pets

* modular dogs

* oops

* NO

Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: tastyfish <crazychris32@gmail.com>
2023-01-09 08:06:58 -05:00