92 Commits

Author SHA1 Message Date
MrMelbert 4f2b55d05c Fix potential cleaner component runtimes (#92265)
## About The Pull Request

`pre_clean_callback` is asserted to be nullable, so this would runtime
if you have something with the default cleaner arguments

It probably shouldn't be invoked twice, anyways

## Changelog

Not player visible but could save a future coder or admin a minor
headache
2025-07-30 17:37:30 -04:00
MX0739 4e8f12644d Now you don't need to have 1 unit of water on the mop to use it with other reagents (#91880) 2025-07-30 17:37:26 -04:00
John Willard 3c1505ac06 Cyborgs now use storage datum (#90927)
This moves Cyborgs onto using storage datums, removing the remenants of
the shitcode that was Cyborg inventory. It's now done mostly by
equipping/unequipping/storage items, much like how other mobs do.
This allows borgs to take advantage of more hand support stuff and
things like ``dropped()``, so borgs no longer have to copy paste drop
code to ``cyborg_unequip``

It also:
- Removes ``CYBORG_ITEM_TRAIT``
- Removes all borg items being ``NODROP``

https://github.com/user-attachments/assets/11442a10-3443-41f2-8c72-b38fb0126cdb

Currently borgs are able to have their entire inventory open and a bag
below it, which I thought was a little weird. I always assumed they WERE
storage items, so I guess I'm doing it myself.
Cyborgs using storage code makes it easier for contributors to actually
do stuff with, without risking breaking everything. It also hopefully
will make borg items more resilient against breaking in the future, now
that we're not relying on nodrop.
Also just brings them more in line with other mobs, all of which make
use of storages.

🆑
refactor: Cyborg's modules now use storage (so opening a bag will close
modules instead of overlap one over the other).
qol: Observers can now see Cyborg's inventories (like they can for
humans).
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2025-06-05 19:49:49 -04:00
Majkl-J b6b8306fda Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-25-02a 2025-02-20 00:00:19 -08:00
SmArtKar 7ddc30783a Adds better attack animations and alternate attack modes (#88418)
## About The Pull Request

This is the first PR in a series attempting to modernize our damage and
armor, both from a code and a gameplay perspective. This part implements
unique attack animations, adds alternate attack modes for items and
fixes some minor oversights.

Items now have unique attack animation based on their sharpness - sharp
items are now swung in an arc, while pointy items are thrust forward.
This change is ***purely visual***, this is not swing combat. (However,
this does assign icon rotation data to many items, which should help
swing combat later down the line).

Certain items like knives and swords now have secondary attacks - right
clicks will perform stabbing attacks instead of slashing for a chance to
leave piercing wounds, albeit with slightly lower damage - trying to
stick a katana through someone won't get you very far!

https://github.com/user-attachments/assets/1f92bbcd-9aa1-482f-bc26-5e84fe2a07e1

Turns out that spears acted as oversized knives this entire time, being
SHARP_EDGED instead of SHARP_POINTY - in order for their animations to
make sense, they're now once again pointy (according to comment,
originally they were made sharp because piercing wounds weren't very
threatening, which is no longer the case)

Another major change is that structure damage is now influenced by armor
penetration - I am not sure if this is intentional or not, but attacking
item's AP never applied to non-mob damage.

Additionally, also fixes an issue where attack verbs for you and
everyone else may differ.
2024-12-17 12:35:52 -06:00
SkyratBot b540aaf8ab [MIRROR] Afterattack is dead, long live Afterattack (#28128)
* Afterattack is dead, long live Afterattack

* wew

* fixes

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
2024-06-15 04:02:11 +02:00
MrMelbert ff6b41aa07 Afterattack is dead, long live Afterattack (#83818)
## About The Pull Request

- Afterattack is a very simple proc now: All it does is this, and all
it's used for is for having a convenient place to put effects an item
does after a successful attack (IE, the attack was not blocked)


![image](https://github.com/tgstation/tgstation/assets/51863163/1e70f7be-0990-4827-a60a-0c9dd0e0ee49)

- An overwhelming majority of afterattack implementations have been
moved to `interact_with_atom` or the new `ranged_interact_with_atom`

I have manually tested many of the refactored procs but there was 200+
so it's kinda hard

## Why It's Good For The Game

Afterattack is one of the worst parts of the attack chain, as it
simultaneously serves as a way of doing random interactions NOT AT ALL
related to attacks (despite the name) while ALSO serving as the defacto
way to do a ranged interaction with an item

This means careless coders (most of them) may throw stuff in afterattack
without realizing how wide reaching it is, which causes bugs. By making
two well defined, separate procs for handing adjacent vs ranged
interactions, it becomes WAY WAY WAY more easy to develop for.

If you want to do something when you click on something else and you're
adjacent, use `interact_with_atom`
If you want to do something when you click on something else and you're
not adjacent, use 'ranged_interact_with_atom`

This does result in some instances of boilerplate as shown here:


![image](https://github.com/tgstation/tgstation/assets/51863163/a7e469dd-115e-4e5b-88e0-0c664619c878)

But I think it's acceptable, feel free to oppose if you don't I'm sure
we can think of another solution

~~Additionally it makes it easier to implement swing combat. That's a
bonus I guess~~

## Changelog

🆑 Melbert
refactor: Over 200 item interactions have been refactored to use a
newer, easier-to-use system. Report any oddities with using items on
other objects you may see (such as surgery, reagent containers like cups
and spray bottles, or construction devices), especially using something
at range (such as guns or chisels)
refactor: Item-On-Modsuit interactions have changed slightly. While on
combat mode, you will attempt to "use" the item on the suit instead of
inserting it into the suit's storage. This means being on combat mode
while the suit's panel is open will block you from inserting items
entirely via click (but other methods such as hotkey, clicking on the
storage boxes, and mousedrop will still work).
refactor: The detective's scanner will now be inserted into storage
items if clicked normally, and will scan the storage item if on combat
mode
/🆑
2024-06-11 21:58:09 -07:00
SkyratBot 3c39e2b15e [MIRROR] Removes remove_any from the game (#26930)
* Removes remove_any from the game (#82020)

## About The Pull Request

Okay, so, turns out smoke machines, cigarettes, vapes and all sorts of
things intentionally unmix your mixes.
Why? For chaotic effects. Well sadly it just deletes chems from mixes
and makes them completely useless.
It also tends to have very little effect on deathmixes and moreso just
gimps you ability to use them for healing.
This is pretty bad, especially for machines like the smoke machine that
are specifically intended for chemists.

This PR entirely removes all uses of remove_any as well as the proc
itself from the game. It's just bad.
## Why It's Good For The Game

As it turns out, the game intentionally gimping your chem mixes just to
fuck with you is bad.
Especially when it's both obscure and not really all that fun for
gameplay.
## Changelog
🆑
balance: Smoke Machines, Showers, Vapes, etc will no longer arbitrarily
delete a random amount of the chems they are processing
/🆑

* Removes remove_any from the game

* Update shower.dm

* a

* remove a

---------

Co-authored-by: RikuTheKiller <88713943+RikuTheKiller@users.noreply.github.com>
Co-authored-by: jjpark-kb <55967837+jjpark-kb@users.noreply.github.com>
Co-authored-by: Pinta <68373373+softcerv@users.noreply.github.com>
2024-04-01 21:41:23 -04:00
RikuTheKiller ad6c2237c6 Removes remove_any from the game (#82020)
## About The Pull Request

Okay, so, turns out smoke machines, cigarettes, vapes and all sorts of
things intentionally unmix your mixes.
Why? For chaotic effects. Well sadly it just deletes chems from mixes
and makes them completely useless.
It also tends to have very little effect on deathmixes and moreso just
gimps you ability to use them for healing.
This is pretty bad, especially for machines like the smoke machine that
are specifically intended for chemists.

This PR entirely removes all uses of remove_any as well as the proc
itself from the game. It's just bad.
## Why It's Good For The Game

As it turns out, the game intentionally gimping your chem mixes just to
fuck with you is bad.
Especially when it's both obscure and not really all that fun for
gameplay.
## Changelog
🆑
balance: Smoke Machines, Showers, Vapes, etc will no longer arbitrarily
delete a random amount of the chems they are processing
/🆑
2024-03-17 15:52:41 -04:00
SkyratBot 3d816fc0d5 [MIRROR] basic cleanbots refactor and new janitor skillchip [MDB IGNORE] (#25511)
* basic cleanbots refactor and new janitor skillchip

* Update medbot.dm

* UpdatePaths

---------

Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-12-08 19:59:00 -05:00
Ben10Omintrix af67bd7490 basic cleanbots refactor and new janitor skillchip (#80128)
## About The Pull Request
this pr refacotrs cleanbots into basic bots. also adds a new skillchip
for janitrs. this skillchip will allow janitors to communicate with
cleanbots and order them around, like pointing at something and telling
them to clean it. also now the cleanbot has an inbuilt mop which it will
use to smack mice and cockroaches

## Why It's Good For The Game
refactors cleanbots into basic bots and fixes them getting stuck
sometimes while patrolling. also janitors being able to order them
around can make them a bit more useful as tools for the janitor

## Changelog
🆑
refactor: cleanbots are refactored into basic bots. please report all
bugs
fix: fixes cleanbots getting stuck sometimes while patrolling
add: janitors get a new skillchip which allow them to communicate with
cleanbots
/🆑
2023-12-08 16:26:10 -07:00
SkyratBot c34cd6fd3d [MIRROR] More code compression for reagent holder [MDB IGNORE] (#25121)
* More code compression for reagent holder (#79796)

## About The Pull Request
Part 2 of #79686 where we trim down the size of `holder.dm` even further
and in the process give some procs more advanced features as they get
merged with their counterparts.

**1. Removes & merges `get_multiple_reagent_amounts()` proc with
`get_reagent_amount()`**
The proc `get_multiple_reagent_amounts()` was only used by bio generator
and 1 other item with its only use being finding the sum of all reagents
present in the list returned by
`typesof(datum/reagent/consumable/nutrient)`. Currently the approach is
very inefficient because.
- `typesof()` is an expensive call which returns a long list of reagents
- `get_multiple_reagent_amounts()` would then use 2 nested for loops.
One to loop over every reagent in this holder & another inner for loop
to loop over every reagent returned by `typesof()` operator so the time
complexity of this proc is overall multiplicative which in lamen terms
means "Bad"

We can replicate the same behaviour of `typesof()` by using the
`type2parent()` proc and 1 more direct type check to get the exact same
behaviour but with much faster results, therefore reducing overall code

**2. Removes & merges `get_reagent()` proc with `has_reagent()`**
The proc `has_reagent()` is way more advanced than `get_reagent()` with
arguments requesting for a specific amount, metabolization and now even
has a new argument i.e. `chemical flag`. `has_reagent()` has always
returned the reagent reference directly and not a simple TRUE/FALSE so
it is a perfect replacement for `get_reagent()`, therefore reducing
overall code

**3. Removes & merges `has_chemical_flag()` proc with `has_reagent()`**
The proc `has_reagent()` can now look for a specific reagent with a
specific chemical flag as well as mentioned above thus it can replace
`has_chemical_flag()` therefore reducing overall code

## Changelog
🆑
code: Removes & merges `get_multiple_reagent_amounts()` proc with
`get_reagent_amount()` inside reagent holder
code: Removes & merges `get_reagent()` proc with `has_reagent()` inside
reagent holder
code: Removes & merges `has_chemical_flag()` proc with `has_reagent()`
inside reagent holder
refactor: Reagent holder code has been further compressed. Report bugs
on github
/🆑

* More code compression for reagent holder

* Update hemophage_organs.dm

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-11-19 16:05:16 -05:00
SyncIt21 e4029ed9cd More code compression for reagent holder (#79796)
## About The Pull Request
Part 2 of #79686 where we trim down the size of `holder.dm` even further
and in the process give some procs more advanced features as they get
merged with their counterparts.

**1. Removes & merges `get_multiple_reagent_amounts()` proc with
`get_reagent_amount()`**
The proc `get_multiple_reagent_amounts()` was only used by bio generator
and 1 other item with its only use being finding the sum of all reagents
present in the list returned by
`typesof(datum/reagent/consumable/nutrient)`. Currently the approach is
very inefficient because.
- `typesof()` is an expensive call which returns a long list of reagents
- `get_multiple_reagent_amounts()` would then use 2 nested for loops.
One to loop over every reagent in this holder & another inner for loop
to loop over every reagent returned by `typesof()` operator so the time
complexity of this proc is overall multiplicative which in lamen terms
means "Bad"

We can replicate the same behaviour of `typesof()` by using the
`type2parent()` proc and 1 more direct type check to get the exact same
behaviour but with much faster results, therefore reducing overall code

**2. Removes & merges `get_reagent()` proc with `has_reagent()`**
The proc `has_reagent()` is way more advanced than `get_reagent()` with
arguments requesting for a specific amount, metabolization and now even
has a new argument i.e. `chemical flag`. `has_reagent()` has always
returned the reagent reference directly and not a simple TRUE/FALSE so
it is a perfect replacement for `get_reagent()`, therefore reducing
overall code

**3. Removes & merges `has_chemical_flag()` proc with `has_reagent()`**
The proc `has_reagent()` can now look for a specific reagent with a
specific chemical flag as well as mentioned above thus it can replace
`has_chemical_flag()` therefore reducing overall code


## Changelog
🆑
code: Removes & merges `get_multiple_reagent_amounts()` proc with
`get_reagent_amount()` inside reagent holder
code: Removes & merges `get_reagent()` proc with `has_reagent()` inside
reagent holder
code: Removes & merges `has_chemical_flag()` proc with `has_reagent()`
inside reagent holder
refactor: Reagent holder code has been further compressed. Report bugs
on github
/🆑
2023-11-19 10:40:09 -08:00
SkyratBot 72b1a979ff [MIRROR] Improves the RPG loot wizard event. [MDB IGNORE] (#22800)
* Improves the RPG loot wizard event. (#77218)

## About The Pull Request
As the title says. Adds a bunch more stat changes to various different
items and a somewhat simple way of modifying them whilst minimizing
side-effects as much as possible.
Added a new negative curse of polymorph suffix that can randomly
polymorph you once you pick up the item.
Curse of hunger items won't start on items that are not on a turf.
Curse of polymorph will only activate when equipped.

Bodyparts, two-handed melees, bags, guns and grenades, to name a few,
have a bunch of type-specific stat changes depending on their quality.

Some items won't gain fantasy suffixes during the RPG loot event, like
stacks, chairs and paper, to make gamifying the stats a bit harder.
I'm sure there'll still be other ways to game the event, but it's not
that big of a deal since these are the easiest ways to game it.
High level items also have a cool unusual effect aura

## Why It's Good For The Game
Makes the RPG item event cooler. Right now, it's a bit lame since
everything only gains force value and wound bonus on attack. This makes
the statistic increases more type-based and make it interesting to use

It's okay for some items to be powerful since this is a wizard event and
a very impactful one too. By making the curse of hunger items not spawn
on people, it'll also make it a less painful event too.

## Changelog
🆑
add: Expanded the RPG loot wizard event by giving various different
items their own statistic boost.
/🆑

---------

Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>

* Improves the RPG loot wizard event.

---------

Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>
2023-07-31 20:02:03 -04:00
Watermelon914 69827604c4 Improves the RPG loot wizard event. (#77218)
## About The Pull Request
As the title says. Adds a bunch more stat changes to various different
items and a somewhat simple way of modifying them whilst minimizing
side-effects as much as possible.
Added a new negative curse of polymorph suffix that can randomly
polymorph you once you pick up the item.
Curse of hunger items won't start on items that are not on a turf.
Curse of polymorph will only activate when equipped.

Bodyparts, two-handed melees, bags, guns and grenades, to name a few,
have a bunch of type-specific stat changes depending on their quality.

Some items won't gain fantasy suffixes during the RPG loot event, like
stacks, chairs and paper, to make gamifying the stats a bit harder.
I'm sure there'll still be other ways to game the event, but it's not
that big of a deal since these are the easiest ways to game it.
High level items also have a cool unusual effect aura

## Why It's Good For The Game
Makes the RPG item event cooler. Right now, it's a bit lame since
everything only gains force value and wound bonus on attack. This makes
the statistic increases more type-based and make it interesting to use

It's okay for some items to be powerful since this is a wizard event and
a very impactful one too. By making the curse of hunger items not spawn
on people, it'll also make it a less painful event too.

## Changelog
🆑
add: Expanded the RPG loot wizard event by giving various different
items their own statistic boost.
/🆑

---------

Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
2023-07-31 17:09:53 +00:00
SkyratBot 2f552919c1 [MIRROR] Icons folder cleaning wave two [MDB IGNORE] (#22454)
* Icons folder cleaning wave two

* Merge conflict resolution

* Modular path hell

* hmm

* Update 2022-10.yml

* Another modular thing

---------

Co-authored-by: YesterdaysPromise <122572637+YesterdaysPromise@users.noreply.github.com>
Co-authored-by: Giz <vinylspiders@gmail.com>
2023-07-16 00:41:18 -04:00
YesterdaysPromise fb10121022 Icons folder cleaning wave two (#76788)
## About The Pull Request

Further continous organizing and cleaning the Icons folder. There are
still some minior nitpicks left to do, but I reached my daily sanity
expenses limit again, and the faster these get in the less issues for
both me and others later. Also cleans some mess I caused by my blindness
last PR.

## Why It's Good For The Game

Saner spriters = better sprites
2023-07-14 18:36:41 +00:00
SkyratBot b0e55b6857 [MIRROR] Janitor balloon alerts [MDB IGNORE] (#22087)
* Janitor balloon alerts

* Skyrat edits for liquid system

---------

Co-authored-by: Lufferly <40921881+Lufferly@users.noreply.github.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
2023-07-11 15:57:18 -05:00
Lufferly 5057e65041 Janitor balloon alerts (#76284)
## About The Pull Request

Adds some balloon alerts to the mop, /datum/component/cleaner, and the
light replacer
edits some balloon alerts on the janicart

## Why It's Good For The Game

Doing your duties as a janitor tends to clog up chat, and this stuff
seems better for balloon alerts anyway.
Newer players are also often directed towards janitor, and this will
help with feedback for someone unaccustomed to looking at chat.
If any of these are too long let me know.

## Changelog

🆑 Seven
qol: Mops, some cleaning items, and light replacers now use balloon
alerts
/🆑
2023-06-26 22:16:08 -06: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
oranges 4c48966ff8 Renames delta time to be a more obvious name (#74654)
This tracks the seconds per tick of a subsystem, however note that it is
not completely accurate, as subsystems can be delayed, however it's
useful to have this number as a multiplier or ratio, so that if in
future someone changes the subsystem wait time code correctly adjusts
how fast it applies effects

regexes used

git grep --files-with-matches --name-only 'DT_PROB' | xargs -l sed -i
's/DT_PROB/SPT_PROB/g'
git grep --files-with-matches --name-only 'delta_time' | xargs -l sed -i
's/delta_time/seconds_per_tick/g'
2023-04-11 21:31:07 -07:00
SkyratBot bd92e328ec [MIRROR] Restore Advanced Mop in-hands sprite [MDB IGNORE] (#18531)
* Restore Advanced Mop in-hands sprite (#72478)

fix: Fixed the advanced mop displaying as a normal mop when held

* Restore Advanced Mop in-hands sprite

Co-authored-by: Darius <5933805+LeDrascol@users.noreply.github.com>
2023-01-06 08:29:13 -08:00
Darius a09a4d96db Restore Advanced Mop in-hands sprite (#72478)
fix: Fixed the advanced mop displaying as a normal mop when held
2023-01-05 22:13:47 -05:00
Tastyfish 6aa4662e1e [MODULAR] Fixes mops double acting when cleaning up liquids (#17872)
* Fixes mops double acting when cleaning up liquids

* suggestions

* better doc comment
2022-12-03 14:45:30 -08:00
SkyratBot ceb690a555 [MIRROR] Refactor janicart to be subtype of mop bucket [MDB IGNORE] (#17647)
* Refactor janicart to be subtype of mop bucket

* SR path changes

Co-authored-by: Tim <timothymtorres@gmail.com>
Co-authored-by: Tastyfish <crazychris32@gmail.com>
2022-11-22 15:01:35 -08:00
Tim 333dcef6ad Refactor janicart to be subtype of mop bucket (#71094)
## About The Pull Request
Fixes #41123

This gives mop buckets the same behavior as janicarts. This means it
inherits the same hotkeys, context screentips, etc.

Other niche changes:

- Fix reagent containers playing attack animation when transferring
reagents to mob bucket
- Fix syringes and droppers not updating the appearance of target when
used
- Regular mop bucket has the same RMB hotkey as janicart for wetting mop


## Why It's Good For The Game
One less bug off tracker.  Better consistency with code.

## Changelog
🆑
fix: Fix reagent containers playing attack animation when transferring
reagents to mob bucket
fix: Fix syringes and droppers not updating the appearance of target
when used
qol: Regular mop bucket has the same RMB hotkey as janicart for wetting
mop
refactor: Refactor janicart to be subtype of mop bucket
/🆑

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2022-11-21 19:29:56 -08:00
Zonespace f7c26bbf25 515 Compat (#17465)
* ONLY SKYRAT CHANGES

* ACTUALLY SKYRAT CHANGES

* yolo, revert later

* Update alternate_byond_versions.txt

Co-authored-by: AnturK <AnturK@users.noreply.github.com>
2022-11-15 06:59:06 +00:00
AnturK 4d6a8bc537 515 Compatibility (#71161)
Makes the code compatible with 515.1594+

Few simple changes and one very painful one.
Let's start with the easy:
* puts call behind `LIBCALL` define, so call_ext is properly used in 515
* Adds `NAMEOF_STATIC(_,X)` macro for nameof in static definitions since
src is now invalid there.
* Fixes tgui and devserver. From 515 onward the tmp3333{procid} cache
directory is not appened to base path in browser controls so we don't
check for it in base js and put the dev server dummy window file in
actual directory not the byond root.
* Renames the few things that had /final/ in typepath to ultimate since
final is a new keyword

And the very painful change:
`.proc/whatever` format is no longer valid, so we're replacing it with
new nameof() function. All this wrapped in three new macros.
`PROC_REF(X)`,`TYPE_PROC_REF(TYPE,X)`,`GLOBAL_PROC_REF(X)`. Global is
not actually necessary but if we get nameof that does not allow globals
it would be nice validation.
This is pretty unwieldy but there's no real alternative.
If you notice anything weird in the commits let me know because majority
was done with regex replace.

@tgstation/commit-access Since the .proc/stuff is pretty big change.

Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2022-11-15 03:50:11 +00:00
SkyratBot 80d124a3c6 [MIRROR] Remove ELEMENT_DETACH on everything that doesn't need it, rename to ELEMENT_DETACH_ON_HOST_DESTROY + a PSA (about 0.2s init time savings) [MDB IGNORE] (#17384)
* Remove ELEMENT_DETACH on everything that doesn't need it, rename to ELEMENT_DETACH_ON_HOST_DESTROY + a PSA (about 0.2s init time savings) (#70972)

ELEMENT_DETACH is **not** a requirement to having `Detach` called.
Detach is always called when the element itself is destroyed.

ELEMENT_DETACH is a flag that when set, makes sure Detach is called when
the atom destroys.

Sometimes you want this, for instance:

```dm
/datum/element/point_of_interest/Detach(datum/target)
	SSpoints_of_interest.on_poi_element_removed(target)
	return ..()
```

This Detach cleans up a reference that would have hung if target was
destroyed without this being called.

However, most uses of Detach are cleaning up signals. Signals are
automatically cleaned up when something is destroyed. You do not need
ELEMENT_DETACH in this case, and it slows down init. This also includes
somewhat more complex stuff, like removing overlays on the source
object. It's getting deleted anyway, you don't care!

I have removed all uses of ELEMENT_DETACH that seemed superfluous. I
have also renamed it to `ELEMENT_DETACH_ON_HOST_DESTROY` to make its
purpose more clear, as me and a lot of other maintainers misunderstood
what it did,

---

An update to this, ELEMENT_DETACH *is* needed for anything that can
register to a turf, as turfs do not clear their signals on destroy.

* Remove ELEMENT_DETACH on everything that doesn't need it, rename to ELEMENT_DETACH_ON_HOST_DESTROY + a PSA (about 0.2s init time savings)

* skyrat elements

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: tastyfish <crazychris32@gmail.com>
2022-11-05 17:48:01 -04:00
SkyratBot 3bf620006b [MIRROR] Moves cleaning to an atom proc to afterattack signal [MDB IGNORE] (#16813)
* Moves cleaning to an atom proc to afterattack signal

* Fixing conflict!

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
2022-10-12 14:49:04 -04:00
John Willard 41ca4962db Moves cleaning to an atom proc to afterattack signal (#70239)
* Hopefully fixes Cleaning

* Cleaning off window blood is now handled by the Window itself
* Cleanbots now have an advanced mop built into them, I am hoping in the future we can make cleanbots have their mops taken off, but I'm not good at spriting so it isn't a thing yet.
* Adds a pre_clean_callback to replace the should_clean arg (mostly)
* Removes the atom cleaning proc, replaces it with a signal for afterattack on a cleaning tool.

* Fixes and improvements

* adds a new define that allows pre_clean_callback to cancel cleaning entirely, used for mops to check for being wet or attacking buckets and such.
* Fixes cleanbots not properly working, removing their mop and just registering for a signal that bots send instead.
* Changes cleaner component to take proximity into account, that way we don't have to check it on each item's individual afterattacks, that way we don't have to call parent at the end either.
* Improves check_allowed_items a little bit because I hated how it was used for soap.

* Update cleaner.dm

* reviews
2022-10-12 11:22:04 +02:00
SkyratBot 2847b2b37e [MIRROR] [ready] adds unit test for missing inhand icons. fixes a bunch of missing inhand icons [MDB IGNORE] (#16649)
* [ready] adds unit test for missing inhand icons. fixes a bunch of missing inhand icons

* cf

Co-authored-by: ShizCalev <ShizCalev@users.noreply.github.com>
Co-authored-by: Tastyfish <crazychris32@gmail.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
2022-10-09 22:36:07 +01:00
ShizCalev 1a32f60cf4 [ready] adds unit test for missing inhand icons. fixes a bunch of missing inhand icons (#70037)
fix: Fixed a bunch of missing inhand icons.
fix: Fixed cables in electrical toolboxes not randomizing their colors.
fix: Fixed the wrong colored icon showing when trying to make cable cuffs out of cables.
fix: The collectable SWAT helmet is now using the proper icon again!
refactor: Pipecleaners and power cables now share a unified color system, so they're once again available in ALL the same colors.
imageadd: Updated the screwdriver belt overlay to represent the newer sprite.
imageadd: Added a bunch of new inhand icons. Special thanks to Twaticus for doing the helmets! <3
fix: Wirecutters now have an icon when inside a belt again!
admin: Added a new omnitool subtype that allows you to spawn all items in a typepath!
fix: Explorer gaskmasks now properly reflect their adjusted state when held.
fix: Fixed balaclavas having the wrong icon when pulled up.
fix: Fixed the base energy sword (admin spawn only) being invisible.
fix: The rainbow energy sword is now a little bit more rainbowy!
fix: Fixed an tk exploit with orange handcuffed shoes.
fix: The traitor outfit in the select equipment panel is now actually functional!
2022-10-04 10:20:24 -07:00
Yaroslav Nurkov e3ed545b5f the mop can only absorb liquid within 1 tile (#15869)
* the mop can only absorb liquid within 1 tile

* change on working path

* Revert "change on working path"

This reverts commit de95569a3831ad65aee59691c93bd292bc468354.

* add modularity(?)

* Apply suggestions from code review

span chaange

Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>

* docs?

Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
2022-09-05 13:31:23 -04:00
SkyratBot 88c85fe1f7 [MIRROR] [MDB IGNORE] Refactors drinks and fixes a lot of food problems [MDB IGNORE] (#15577)
* [MDB IGNORE] Refactors drinks and fixes a lot of food problems

* [MDB IGNORE] Refactors drinks and fixes a lot of food problems

* forgto 2 commit

* im slowly going insane

* why does find and replace not FIND everything

* hnghnnngh

* h

* l

* a

* a

* so close...

* delta fix

* I thought I committed this already, guess not

* this PR has been the bane of my fucking life

* orange juice

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
Co-authored-by: Jolly-66 <70232195+Jolly-66@users.noreply.github.com>
2022-08-25 03:17:10 +01:00
John Willard 4a274a6e4b [MDB IGNORE] Refactors drinks and fixes a lot of food problems (#69081)
* Makes condiments their own subtype, fixes geese, prepares for merging

* Fixes geese checking drink type instead of edible foodtype to eat gross food.
* Renames foodtype var on drinks to drink_types to prevent above from happening again because it KEEPS HAPPENING. DRINKS AREN'T FOOD!
* Makes Condiments their own subtype of reagent_containers because they don't make any use of being a subtype of food, at all.
* Starts moving things from food to /food/drink subtype in preparation for merging /food/drink with /drink

* fully removes Food subtype

* /reagent_containers/drinks are now /reagent_containers/cup - This is so it's no longer confused with eachother.
* /food/drinks is now /reagent_containers/cup/drinks, so we can keep their special abilities.
* Fixes a LOT of errors with food, which are STILL checking the reagent_containers, despite ACTUAL food being refactored away from it a long time ago.

This doesn't compile yet, but I do want to make sure my progress is well tracked.

* remove copypaste code, changes soda cans

* Removes most copy paste code between the two drinks, moving most stuff to parent whenever needed.
* Made soda cans their own subtype since they didn't share anything with glass bottles anyways.
* Fixes more problems with food/drinks, especially with geese. Geese really were just broken this whole time and no one said a word...
* Removes a snowflake signal, now that both drink types share a common one.
* Adds everything to the .dme

Currently my goal is to get this all compiling, then remove isGlass var by making glass be all glass ones only.

* Moves all icons into a single drinks dmi

I'm not that great at icon stuff, hopefully I didn't forget/break anything.

* Turns juices into their own subtype

This allows us to let them check for type in molotov, to both get rid of a use of isGlass, and so non-glass non-cartons don't show up as 'carton'.

* fixes compile issues, adds updatepaths

* a better updatepaths

* updates the damn maps now

* properly names the updatepath

* how did that get there

* i suck at handling merge conflicts

* how am i this bad

* code improvement and soda fix

* more fixes

* Don't be a timer

Ports from old food bottles to trans the reagents, rather than add a timer to.

* Merge conflicts and fixes bottle smashing

* Bottle smashing is now consistently functional regardless of how much liquid they have in them, when before it would spill first, then smash on the second hit.

* runs updatepaths again
2022-08-12 15:24:14 -04:00
SkyratBot 7c3ef6056a [MIRROR] Refactors cleaning [MDB IGNORE] (#14793)
* Refactors cleaning

* Fixes the conflicts and the missed part of a certain mirror

Co-authored-by: kawoppi <94711066+kawoppi@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
2022-07-08 23:27:04 -04:00
kawoppi e0caf5f959 Refactors cleaning into a component (#68156)
* Completely refactors cleaning tools to all use a single component rather than copy pasting everywhere.
* Everything that cleans (including Cleanbots and the like) all use this component. It is called on an atom-level proc, to prevent signal overuse/misuse.
* This additionally means that cleaning is much more consistent between tools, for stuff like cleaning blood off of windows and soap not being able to clean worn clothes, since it isnt a problem anymore.
2022-07-08 12:39:29 -04:00
SkyratBot 25178c9747 [MIRROR] Refactors janitor cartridge to a tablet app [MDB IGNORE] (#12563)
* Refactors janitor cartridge to a tablet app

* e

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
2022-04-07 15:57:08 +01:00
John Willard de2e373357 Refactors janitor cartridge to a tablet app (#65942)
Removes old janitor cartridge app and replaces it with a tablet one.
Also adds the pimpin' ride to the list of tracked items, too.
Makes Janitors spawn with said app, too.
2022-04-06 19:51:45 -05:00
SkyratBot e80a382570 [MIRROR] Janitorial cart improvements [MDB IGNORE] (#11945) 2022-03-07 15:20:03 -07:00
cacogen a62dac9c2d Janitorial cart improvements (#64818)
About The Pull Request

    You now right-click to wet your mop and left-click to put it away to prevent having to double-click to get rid of it when it's not completely wet
    Can right-click with an empty hand to remove mop and skip radial menu
    You now right-click to put things in the trash bag (prevents trash bag unintentionally eating things, such as the crowbar you were trying to use to empty the cart)
    Left-clicking skips radial menu when there's only one item in the cart
    Can fill open reagent containers from drainables like the janitorial cart (useful to empty it)
    Adds examine hints for these changes
    Right-clicking to splash reagents now requires combat mode (this is because it interfered with using right-click to empty)
    Cyborg cleaning modules now use the NODROP trait to prevent them being put in the cart, instead of their own copypasted var and proc
    Fixes overlays not immediately updating when filling janitorial cart
    Fixes bludgeoning janitorial cart when filling it

Why It's Good For The Game

Should make it less clunky and more enjoyable to use.
Changelog

cl
add: Right-clicking to splash reagents requires combat mode
add: Remember the above
qol: You now right-click the janitorial cart to wet mops and left-click to put them away
qol: You can right-click the janitorial cart with an empty hand to quickly remove your mop
qol: You now right-click to put things in the trash bag
qol: Left-clicking the cart with an empty hand will skip the radial menu if there's only one item in the cart
add: Adds examine hints for these changes
fix: Fixes overlays not immediately updating when filling janitorial cart
fix: Fixes bludgeoning janitorial cart when filling it
add: You can right-click with "glass" reagent containers (e.g. buckets) to fill from drainable containers like janitorial carts
code: Improvements to janitorial cart code
/cl
2022-03-08 10:40:18 +13:00
SkyratBot 57cc1ca65f [MIRROR] Gives Omega soap 800 uses instead of 301 [MDB IGNORE] (#11444)
* Gives Omega soap 800 uses instead of 301

* Fixing dem conflicts yo

Co-authored-by: cacogen <25089914+cacogen@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
2022-02-11 14:59:35 +00:00
cacogen a3a40e2994 Gives Omega soap 800 uses instead of 301 (#64813)
* Buffs Omega soap from 300 uses to 800

- Changes cleanspeed and mopspeed vars to use SECONDS define instead of straight deciseconds
- Renames mopcap to max_reagent_volume for clarity
- Puts the slowest child of soap (homemade) first
- Clarifies/improves a couple of my 3 year old comments on soaps
- Makes homemade soap grind into the reagents of the recipe
- Capitalises Omega in Omega soap because it's supposed to be and it makes it more impressive
-  Makes Omega soap description tie into the name

* Changes mopcap to max_reagent_volume in janicart.dm

* Adds specific grind results to soaps lacking them

Craftable ones are 1 reagent less than their recipes require
2022-02-11 01:15:24 -08:00
SkyratBot c8ec74bee2 [MIRROR] Reworks janitor cyborg cleaning, focus on the slipping [MDB IGNORE] (#10961)
* Reworks janitor cyborg cleaning, focus on the slipping

* Feex

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
2022-01-24 22:21:42 +00:00
LemonInTheDark 8f32cbe38d Reworks janitor cyborg cleaning, focus on the slipping (#64131)
Alt of #64105 and #64126 (I'm sorry Novva, I should have said something earlier)
I main janitor. As a janitor main, my greatest joy in life is slipping people who ignore my signs

I've seen some people complain about janitor borgs, so I decided to look into em

Unfortunately, not only is the janitor borg just a straight upgrade to janitors, it has absolutely no reason to use most of its kit
We give it standard cleaning supplies, and hell even bespoke tools to deal with leaving slippery tiles everywhere, but we also just let them clean anything they can walk over

This seems a bit too much to me, even for borgs. Also it's like, really boring

So what if we made their movement based cleaning cost something? How about we make it suck water from their bucket. Use the same pattern as mop code, make it twice as expensive though. Give it a slowdown, some sound cues, and an action button to trigger it all
2022-01-24 11:59:02 +00:00
SkyratBot 40f7364842 [MIRROR] Refactor cult dagger rune drawing and null rod rune clearing into components + minor rune / blood magic tweaks [MDB IGNORE] (#9662)
* Refactor cult dagger rune drawing and null rod rune clearing into components + minor rune / blood magic tweaks (#62918)

The act of inscribing runes, anchoring / unanchoring cult structures, deconstructing cult girders, and purging cultists of holy water have all been moved off of the cult dagger itself and onto a component, cult_ritual_item.

The act of destroying a cult rune or heretic rune with the null rod have been moved off of their respective items and onto the nullrod itself.

Added a signal, COMSIG_ITEM_ATTACK_EFFECT, for the above purposes.
Various cult spells and dagger interactions have had their code improved slightly.

* Refactor cult dagger rune drawing and null rod rune clearing into components + minor rune / blood magic tweaks

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2021-11-23 12:45:12 -05:00
MrMelbert c979a23b6c Refactor cult dagger rune drawing and null rod rune clearing into components + minor rune / blood magic tweaks (#62918)
The act of inscribing runes, anchoring / unanchoring cult structures, deconstructing cult girders, and purging cultists of holy water have all been moved off of the cult dagger itself and onto a component, cult_ritual_item.

The act of destroying a cult rune or heretic rune with the null rod have been moved off of their respective items and onto the nullrod itself.

Added a signal, COMSIG_ITEM_ATTACK_EFFECT, for the above purposes.
Various cult spells and dagger interactions have had their code improved slightly.
2021-11-23 17:26:30 +00:00
SkyratBot c23bd1cb8c [MIRROR] every case of initialize that should have mapload, does (#8374)
* every case of initialize that should have mapload, does

* E

Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
Co-authored-by: Gandalf <jzo123@hotmail.com>
2021-09-24 23:07:53 +01:00
tralezab 6c01cc2c01 every case of initialize that should have mapload, does (#61623)
## About The Pull Request

stop forgetting to include mapload, if you don't include it then every single subtype past it by default doesn't include it

for example, `obj/item` didn't include mapload so every single item by default didn't fill in mapload

![](https://media.discordapp.net/attachments/823293417186000909/875122648605147146/image0.gif)

## Regex used:

procs without args, not even regex

`/Initialize()`

procs with args
`\/Initialize\((?!mapload)((.)*\w)?`

cleanup of things i didn't want to mapload:
`\/datum\/(.)*\/Initialize\(mapload`
2021-09-24 17:56:50 -04:00