* [NO GBP] Fixes even more AI related CI runtimes (#80262)
## About The Pull Request
Consider this a continuation of
https://github.com/tgstation/tgstation/pull/80202

~~It seems I missed a few.~~
Edit: Modified per request to handle this more broadly. If a pawn gets
`qdel`'d, the ai controller should be set to off and get removed from
the list of active controllers, and all their actions should be
canceled.
Also adds some qdeleted checks to `finish_action()`, which can still run
after the pawn gets qdeleted as part of the `CancelActions()` chain.
## Why It's Good For The Game
Less spurious CI failures.
## Changelog
Nothing player facing really.
* [NO GBP] Fixes even more AI related CI runtimes
* Update _ai_controller.dm
---------
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* Targeting Datums Renamed (and global) (#79513)
## About The Pull Request
[Implements the backend required to make targeting datums
global](6901ead12e)
It's inconsistent with the rest of basic ai for these to have a high
degree of state, plus like, such a waste yaknow?
[Implements
GET_TARGETING_STRATEGY](d79c29134d)
Regexes used:
new.*(/datum/targetting_datum[^,(]*)\(*\)* -> GET_TARGETING_STRATEGY($1)
Renamed all instances of targetting to targeting (also targetting datum
-> targeting strategy)
I've used GET_TARGETING_STRATEGY at the source where the keys are
actually used, rather then in the listing. This works out just fine.
## Why It's Good For The Game
Not a misspelled name through the whole codebase, very slightly less
memory load for basically no downside (slight cpu cost maybe but not a
significant one.
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>
* Targeting Datums Renamed (and global)
* Update dogs.dm
* Modular
* Modular
* Modular
* Merge skew?
* Revert "Merge skew?"
This reverts commit 0889389ab5cb5c56655f1860d9173ba87efe9a22.
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* basic mobs & co no longer indiscriminately perform close-range actions in the presence of obstacles. (#75687)
## About The Pull Request
Currently, we don't have any such thing as a general ai_behavior flag
for behaviors that need a check for if the current_movement_target is
within reach or not. We could fix it case by case by slapping a
`CanReach()` check in the `performBehavior()` definition of every
`ai_behavior` datum that warrants it, the general issue will keep
resurfacing as long as new behaviors are added to the game anyhow, while
there's a lot less copypasta involved easier to apply solution to
current and future instances of such issue.
Worth mentioning not all ai_behaviors with required_range of 1 have this
flag. Some are fairly innocuous, such as the follow command, some others
kind of handle it already in a more peculiar or complex way, which is
also an argument against making it a hardcoded heck for when the
required_range is 1 or 0.
This has been tested, though there are some rough edges and oddities
also unrelated to his PR that might have evaded scrutiny.
## Why It's Good For The Game
This should fix#74823, fix#69254, and fix#74713 (I guess? it could
have been phrased better).
## Changelog
🆑
fix: basic mobs & co no longer indiscriminately perform close-range
actions in the presence of obstacles such as directional windows between
them and their target.
fix: Doggos should look at you with longing eyes once again if you dare
pick up an edible they are trying to eat.
/🆑
* basic mobs & co no longer indiscriminately perform close-range actions in the presence of obstacles.
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* 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>
* [no gbp] Fixes the dog fetch command (#73516)
## About The Pull Request
I broke this in a so-called "refactor" by forgetting to pass an
argument. It works again now.
## Why It's Good For The Game
It's a fun thing for dogs to do.
## Changelog
🆑
fix: Pet dogs will once again fetch items for you
/🆑
* [no gbp] Fixes the dog fetch command
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
* Some tweaks to mobs running away (#72529)
## About The Pull Request
Mice running away behaviour wasn't working quite how it was supposed to
due to a couple of bugs.
First of all, the action was written as if it would `perform` every
tick, which it doesn't. This means that the code checking if you had
left line of sight didn't function, meaning mobs would continue fleeing
you even when they couldn't see you any more.
Secondly, mobs spent an awful lot of time pathing into walls which was
especially noticeable on mice who just would _not_ stop repeatedly
squeaking in a way that is kind of funny but gets old when you keep
hearing it. Now the pathing stops if it hits a barrier.
I'm not... totally fond of this solution because it has a few
assumptions baked in (that we want to try and path through doors even if
they're dense for one) but I can't for the moment think of a better
"path away from" implementation that isn't way more complicated, and
this doesn't really need to be complicated.
For good measure I noticed a couple of other actions weren't passing a
`source_atom` into `is_blocked_turf` so rats were potentially attacking
"obstacles" they could simply walk over.
Additionally a couple of places were setting
`controller.movement_target` directly instead of using the helper method
which has a minor risk of runtiming under certain conditions.
## Why It's Good For The Game
Mice will stop constantly screaming if they can see someone, and should
repath once they have a different escape route more quickly rather than
dedicating themselves to trying to burrow through an iron wall.
Rats won't bite at tables and racks they can just climb over.
## Changelog
🆑
fix: Mice won't try to path through walls to escape from sight and
constantly squeak.
fix: Mice will stop running away from you if they can't see you any
more.
fix: Rats won't bite racks and tables while passing over them.
/🆑
* Some tweaks to mobs running away
Co-authored-by: Jacquerel <hnevard@gmail.com>
* 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>
* Pet Command Component + Regal Rats can order their subjects around (#71590)
## About The Pull Request
Another atomisation of #71421 but I had a fun idea while I was testing
it.
This adds a component based on the existing system for giving
instructions to tamed carp or dogs, but hopefully more modular.
It also gives it to the rat minions of a regal rat.
The basic function allows the mob to listen and react to spoken
commands, which passes things to its AI blackboard. Additionally if you
alt-click a commandable mob it will show a radial menu which both allows
you to select a command, and also contains tooltips explaining what they
do and what audible words trigger it.
<details>
<summary>Video</summary>
https://user-images.githubusercontent.com/7483112/204308693-0eccebec-75c9-411c-81c5-5aa0d682d1a5.mp4
</details>
Now if you riot some rats, you can alt click on them individually to
give them specific orders (more useful for other creatures than rats),
or you can speak out loud to command your legion.
Rats aren't very smart so you can't give them many instructions, but
this is expandable for other creatures.
Additional change: Mice don't squeak if stepped on by other mice because
this made an absolutely unholy noise and I am not sure there's a way to
get non-dense mobs to spread out.
## Why It's Good For The Game
Allows for giving more mobs the ability to be tamed and instructable by
their owner, without copy/pasting code which lives inside a specific
mob.
Yelling at your rats to give them commands is funny. It also adds the
possibility of telling your rats to stop biting someone if they have
agreed to your demands, allowing for more courtly roleplay.
When Regal Rat is converted to a basic mob its AI can also give other
AIs instructions by yelling at them which I think is a good feature.
## Changelog
🆑
add: The followers of Regal Rats will now respond to simple
instructions, if given by their rightful lord. Except frogs. They're too
busy licking themselves and watching the colours.
/🆑
* Pet Command Component + Regal Rats can order their subjects around
Co-authored-by: Jacquerel <hnevard@gmail.com>