Commit Graph

122 Commits

Author SHA1 Message Date
Ben10Omintrix
6da03cfb66 minor raptor tweaks (#83407)
## About The Pull Request
i think i made these a bit too strong, this hopefully balances them out
a bit. they were initially accidentally given alot of armor against
ranged attacks, this is now removed. also ive reduced their base hp by a
bit. im open to other suggestions and feedback

## Why It's Good For The Game
they were stronger than i intended. this keeps their usefulness for
battling tendrils, or ore vents but also prevents using them to cheese
several megafauna

## Changelog
🆑
balance: you can now polymorph into raptors
balance: raptors overall have less health and no longer have armor
against ranged attacks
/🆑
2024-05-24 16:12:49 +01:00
Ben10Omintrix
2f3978773e [no gbp] raptors with the playful trait now play with their owners (#83294)
## About The Pull Request
i forgot to add this behavior to playful raptors, currently this trait
does nothing. raptors will now play with their owners and tease them if
they are nearby

## Why It's Good For The Game
adds more personality to raptors with the playful trait. also this
behavior can now be given to any other tameable mobs

## Changelog
🆑
fix: playful raptors now correctly play with owners
/🆑
2024-05-19 21:29:59 -06:00
Ben10Omintrix
761b14ef7c lavaland raptors (#82537)
## About The Pull Request
adds raptors to lavaland. these are creatures that have been created
through countless xenobiological experiments by nanotrasen to breed an
animal that can withstand the harsh conditions of lavaland and aid
miners. theres now a new ranch miners can access bottom right to the
mining base

![ranch](https://github.com/tgstation/tgstation/assets/138636438/20d9e358-15a5-48e2-aee3-9364ca139e43)
this ranch starts somewhat empty as most raptors have escaped
containment and are now scattered all across lavaland, u can find them
and return them to ur ranch.

in order to tame a raptor, u first need to prove to it that ur a capable
master. when u try to ride it, a little minigame prompt will pop up

![minigame](https://github.com/tgstation/tgstation/assets/138636438/dcc13102-7100-40c8-ae7a-089cd4daf868)
in this game, the bird's icon rapidly changes direction and u have to
quickly click the arrow thats OPPOSITE to the direction its facing
several times before the direction changes. if you fail 3 times itll
knock you off and run away, however if u win it will deem u a suitable
master and listen to your orders.

There's many different breeds of raptors you can find across lavaland,
all with different capabilities:
red raptors: these excel at combat and can be very useful for dealing
with lavaland mobs or defending the node drone
yellow raptors: are very speedy mounts, theyll get u from point A to
point B in record time
green raptors: they are the tankiest type of raptor and are very good
miners. while mounted, they will clear any rock walls in their path
purple raptors: can store items in them. they have a decent storage size
allowing players to carry more items across trips
white raptors: are able to heal other injured raptors. having one in ur
party would be very useful as they can nurse the combat raptors back to
full health when they need it
blue raptors: produce very nutritious milk with healing capabilities.
having 1 or 2 of these back at ur ranch would be very useful
black raptors: by far the rarest breed, its very unlikely that ull be
able to get one of these, but in the case u do, they have the combat
capabilities of the red raptor, speed of the yellow raptor, and
tankiness of the green raptor.

Breeding different colored raptors together can net u an entirely new
colored raptor. each breed has atleast 1 guaranteed combination of
parents that it will result out of.

you will also need to maintain a good friendship bond with ur raptors,
this is done by feeding them, grooming them, and petting them. u can see
the strength of ur bond by SHIFT clicking them. more hearts indicate a
stronger bond

![hearts](https://github.com/tgstation/tgstation/assets/138636438/5662c5a7-2df3-4f98-99f4-a11faa17b569)
having higher friendship bonds means ur raptors will perform better in
combat, and in the case of blue raptors, they will produce more milk.
Maintaining friendship bonds with baby raptors and keeping them happy
will also encourage them to grow faster

U can also analyze raptors using the new raptor-dex device available at
ur ranch

![pokedex](https://github.com/tgstation/tgstation/assets/138636438/82b92c0c-b7db-4a0d-997e-384a69c0ecbe)
the inherit modifiers indicate how strong this raptor's offspring will
be. raptors inherit attack and health stats from both their parents,
breeding raptors with higher inherit modifiers means the offspring will
be stronger.

raptors will also inherit some traits from their parents that will
change how they will act around u and around other raptors, some of them
being:
Playful: raptors will play with their masters and tease them
motherly: raptors will care for baby raptors, this will encourage baby
raptors to grow quicker
depressed: means its hard to keep this raptor happy and friendship bonds
will deteriorate faster if not given enough care.
coward: makes them flee combat if severly injured, ditching u to the
wolves
trouble maker: makes them attack other raptors at the ranch. however,
trouble maker raptors will not attack other trouble maker raptors,
instead they will form posses and bully raptors together. it might be a
good idea to isolate them from the other raptors

raptors primarily consume ores. to feed raptors, you need to place ore
into the food troughs at the ranch. they are too civilized to eat ores
off the ground or directly from ur hand, they will only eat it if its in
their trough

![trough](https://github.com/tgstation/tgstation/assets/138636438/70723cc7-5743-4ace-9955-4307879e7a83)

beautiful raptor sprites by spessmenart! (rest are codersprites)

## Why It's Good For The Game
adds a new layer to lavaland mobs, and gives miners new interesting
tools and ways to tackle the challenges of lavaland.

## Changelog
🆑 sheets, spacemenart, ben10omintrix, goofball, infrared baron, aofie
add: adds lavaland raptors and the raptor ranch
/🆑

---------

Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
2024-05-16 19:54:00 -07:00
Ben10Omintrix
dc202e7642 fixes a few problems in ai targetting (#82998)
## About The Pull Request
fixes #82964 , fixes #82866

## Why It's Good For The Game
fixes several problems with ai targetting. this pr resolves civil war
that was brewing between several mobs. also fixes a major problem where
mobs would only search for targets and not perform any other behaviors.
also fixes a small problem where mobs would constantly stop and start
while chasing targets
## Changelog
🆑
fix: mobs in the same faction will no longer be at odds against one
another
fix: mobs can now perform behaviors alongside searching for targets
fix: mobs will no longer be starting and stopping when chasing targets
/🆑
2024-05-02 20:03:19 -06:00
Ben10Omintrix
f31b2794b5 fixes ai controllers hard deletes (#82861)
## About The Pull Request

![image](https://github.com/tgstation/tgstation/assets/138636438/47010ad2-64ef-40dd-94d3-b928e4216d1b)
i noticed almost all ai controllers were being hard deleted, its because
the controller itself was being addedto the behavior_cooldowns list
rather than the behavior itself

## Why It's Good For The Game
fixes hard deletes

## Changelog
🆑
/🆑
2024-04-24 21:19:17 -07:00
Ben10Omintrix
f27d66020f fixes brimdemon AI (and some other mobs) (#82831)
## About The Pull Request
i noticed brimdemons werent attacking when i tried investigating the
problem i saw it extends to other mobs

## Why It's Good For The Game
brimdemons, as well as other mobs, will behave normally

## Changelog
🆑
fix: brimdemons (and other mobs) will act normally
/🆑
2024-04-22 21:20:30 -06:00
LemonInTheDark
1e78db8471 Refactors how basic ais do their success/failures (#82643) 2024-04-22 05:23:04 -07:00
LemonInTheDark
37aad4720d Reworks targeting behavior to fall back onto proximity monitors. Refactors ai cooldowns a bit (#82640)
## About The Pull Request

Nother bit ripped out of #79498
[Implements a get_cooldown() proc to get around dumb manual overrides
and empower me to optimize the findtarget
logic](7047d294dd)

[Adds modify_cooldown, uses it to optimize find_potential_targets
further](4ebc8cedce)

No sense running the behavior if we're just waiting on its output, so
let's run it once a minute just in case, then push an update instantly
if we find something

[Optimizes connect_range and
promxity_monitors](bcf7d7c5b3)

We know what turfs exist before and after a move
We can use this information to prevent trying to update turfs we don't
care about.

This is important because post these changes mobs with fields will be
moving a lot more, so it's gotta be cheap

[Implements a special kind of field to handle ai
targeting](80b63b3445)

If we run targeting and don't like, find anything, we should setup a
field that listens for things coming near us and then handle those
things as we find them.

This incurs a slight startup cost but saves so much time on the churn of
constant costs

Note:
We should also work to figure out a way to avoid waking ais if none is
near them/they aren't doing anything interesting

We don't need to do that immediately this acts as somewhat of a stopgap
(and would be good regardless) but it is worth keeping in mind)

## IMPORTANT

I am unsure whether this is worth it anymore since #82539 was merged. As
I say it was done as a stopgap because ais didn't know how to idle.
If not I'll rip er out and we'll keep the other
refactoring/optimizations.

## Why It's Good For The Game

Cleaner basic ai code, maybe? faster basic ai code, for sure faster
proximity monitors (significantly)
2024-04-16 17:37:46 -06:00
Ben10Omintrix
55267e1334 minebot buff (#82001)
## About The Pull Request
this pr buffs non-sentient minebots a bit to make them more helpful with
the new arcmining changes.
Minebots now have a better overall AI, they will maintain distance from
enemies and shoot while running. they will also plant landmines while
theyre running away from enemies. these landmines are carefully
programmed by the bot not to trigger when any of its miner friends step
on it. u no longer need to feed minebots an ore to get them to listen to
you, as they now automatically listen to any miners around.
minebots can now repair damaged node drones 

![image](https://github.com/tgstation/tgstation/assets/138636438/12e67eb2-3711-465c-a3ac-54fdadbed5e4)
they also have a new autodefend feature, which makes them automatically
attack any mob that attacks its miner friends or the drone. They also
have some new upgrades!
First is the regenerative shield, this shield allows minebots to tank a
limited amount of hits before breaking. minebots will then need to wait
sometime before the shield re-activates.
Second is the rocket launcher remote control, this allows players to
direct minebots to fire anti-fauna missiles at their target

https://github.com/tgstation/tgstation/assets/138636438/3ec3605e-8e11-4a31-acaa-1382bed98294

Also minebots are now highly customizable, you can rename them, change
their colors, or program their AI through their new user interface

![image](https://github.com/tgstation/tgstation/assets/138636438/d2e1c39d-f9d2-4da7-a5fa-5a41cea31d6e)


## Why It's Good For The Game
Improves minebot AI a bit, and makes it a more viable option for mining
solo players

## Changelog
🆑
balance: minebots have been buffed and have recieved new upgrades
/🆑
2024-03-29 22:26:35 -06:00
Profakos
b20c982404 Converts slimes to basic mobs (#82176)
## About The Pull Request

After months of preparation, and further months of work, I am finally
done. Please bear with me, as this is a massive refactor, but I have
already atomized everything I could. This is now ready for review.

General

- 	The hilbert hotel slimes are now a subtype instead of a varedit.
- The `use_mob_ability` subtree now also accepts non cooldown abilities.
If set_behaviours is set up properly, mobs won't keep continously
triggering it as if it were a 0 second cooldown action. The alternative
would have been turning the slime abilities into cooldown abilities.
- Wrestling off a slime now signs up to the `COMSIG_ATOM_ATTACK_HAND`
signal, instead of being part of attack_hand.
- Adds datum/ai_controller/controller as a fourth, optional argument to
`/datum/ai_behavior/find_hunt_target/valid_dinner()` to make it possible
to access blackboard keys.
- Slimes no longer attack windows if they would accidentally move into
them (when the conditions are met), since random walk behaviour ignores
tiles they can't go in. It was also not worth to keep. Did you know this
was the sole override of `ObjBump()`?
- Examine was made less snowflaky/bespoke. Also added a new element:
`/datum/element/basic_health_examine`, which is a simple bespoke element
that prints out a custom message based on how damaged the basic mob it
is attached to is.
- Slimes only perform knockdown instead of paralysis, as they can attack
more often now, and paralysis is not that fun.
- LAssailant has been removed due being archaic code. To befriend a
slime, you have to spawn a monkey with the slime console, or feed them a
sheet of plasma. Simple grabbing the monkey or stuffing them in
disposals do not work anymore. Slime console spawned monkeys will have a
visible status effect, with pheromones coming off them to make this
clearer.

Actions
- 	Feeding, reproduction and evolution is no longer a verb.
- Slime feeding is no longer an action button. You have to use right
click, or as previously, mousedrop. Slimes can always unbuckle from mobs
they are attached to.

Hunger 

- Instead randomly changing the starvation and max nutrition values
while growing up, evolution costs 200 nutrion. This makes the code more
readable, and behaviour more predictable, while still giving the
intended time between evolving and splitting. As a result, I could also
turn these into defines.
- Added a component that handles doing an effect over time while buckled
to a mob, until the mob dies or you get unbuckled.
- Slimes gained nutrition is no longer randomly multiplied by the damage
config value, but rather gain nutrition equal to twice the damage dealt.
You'll have to eat one monkey to evolve, just as before.
- Slimes do not heal passively. They only heal from eating. It was a
rather miniscule value that did not have much effect.
- Slimes generate electricity from hunger threshold, instead of the
random amount of hunger threshold + 100.

Environment

- Slimes take 15 damage from cold every second, instead of using a
complex formula (that also decreased the damage up to a point?).
- Slimes still heal from burn damage, but this is now set on the damage
coefficient list.
- Slimes instead of getting stunned by the cold, freeze in an ice cube.
BZ instead of setting them unconscious, calls the stasis status effect,
allowing you to safely stash your hungry slimes for later. They also no
longer slow down from the cold, as they are already slowed down by the
damage they get. Conversely they no longer get a speed up from a random
amount of temperature. I could be convinced to readd this either as part
of the basic sensitive component, or a similar one.

AI
- Removed the attacked_stacks system. Slimes will just perform regular
retaliation if you hit them in a harmful manner.
- Slimes now use the pet orders component. They will interrupt their
feeding when given a command by their master.
- Slimes have their own subtrees. I tried to replicate as much as I
could from the old code, dividing ancient code artifacts and intentional
stuff, so there might be some weirdness.
- Slime speech has been almost fully reduced to basic blorbing, as you
can not even understand them anymore, and most of them require the slime
to loop through all of their surroundings.
- Discipline does not have stacks either. Disciplined baby slimes have a
chance to clear their attack and hunt blackboard keys. All slimes will
stop feeding on the target otherwise.
- Since discipline is not a stack, rabidity instead gets removed at a
10% chance per disciplining.
- 	Slimes faces are a bit more randomly picked now.

## Why It's Good For The Game

- We want to convert all simple animals to basic mobs. Old slime code
was also very strange, and had some systems that have been replicated by
components.
- Slimes fully paralyzing you is not fun at all. Knockdown should give
you a fighting chance when a slime would like to eat you.
- Slimes slow down from the heavy damage they get from the cold, so I
don't think they need extra slowdown, nor do they need to speed up from
warmth, as they are already fast.
- Slimes turning into an icecube instead of becoming paralyzed from the
cold is more fun for the slimes, as they can break out for a few
moments. It is also funny.
- Slimes entering proper stasis from BZ is not just a visual indicator
of a slime that is safe to approach, but also keeps the slimes's hunger
value in check, allowing it to not starve while stopped. They can also
look around and blorble, instead of staring at a black screen, if player
controlled.
- The attack_stack and discipline_stack behaviours were rather
overcomplicated, and the xenobio mains I talked with didn't even know it
was a thing, so I argue it needed simplification.
- The bespoke friendship system of slimes was also too complicated.
Slimes slowly gained levels of trust, and at certain levels commands
costed friendship, and other levels, they did not. The binary friend/not
friend system that everything else in the game uses is much more
sensible.
- Using right click for feeding is much more sensible than using an
action, and then picking someone from a dropdown.
- Slime speech was very soulful but not only did it loop through
everything in sight, you couldn't even understand it unless you spoke
slime. Maybe it can be readded later in a different form.
- Slime's passive healing was miniscule, and having them rely on feeding
is more interesting.

also
fixes #81463

## Changelog

🆑
refactor: Slimes are now basic mobs. Please report any strange
behaviours!
balance: Slimes only stun you for two seconds when they shock you, the
rest of the duration is a knockdown.
balance: Slimes are not stunned from the cold, but rather, get frozen in
a freon icecube. BZ also puts them in complete stasis, instead of making
them unconscious. Their speed is likewise unchanged by temperatures.
balance: Slimes do not passively heal, they instead rely on feeding.
fix: Slimes can use the buckling screen alert to unbuckle and stop
feeding, along with clicking on the mob they are riding
/🆑
2024-03-27 16:40:52 -06:00
Ben10Omintrix
0a0c1260b5 Cultist pets (#80595)
## About The Pull Request
cultists can now convert pets on their side. when you convert a pet, it
will become much more dangerous and obedient to you, it will also gain a
new dangerous AI. cultist pets will look for fellow dead cultists, and
revive them by dragging them to nearby revival runes and activating it.
if there is no revival runes around them then they will create their own
and drag u to it. u can give them commands to follow, attack, or to
create revival runes. they will also go around to crit non cultists so
cultists can convert them

![pughealed](https://github.com/tgstation/tgstation/assets/138636438/8cd10a4f-2a30-40d9-b4fb-c9ff70bdcddd)

they will also now feed on organs and blood for healing

## Why It's Good For The Game
adds a extra layer to cult, u can now command non-sentient pets to aid
you

## Changelog
🆑
add: cultists can now convert pets to their side
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2024-03-21 18:47:04 -06:00
Hatterhat
cfc9dbf437 fixes basic mobs with ranged attacks attacking in containers (#81804)
## About The Pull Request
see title - changes an isturf check to an !ismob check for an attacking
basic mob's loc in can_attack(), as previously this allowed mobs to
shoot from inside containers

## Why It's Good For The Game

![image](https://github.com/tgstation/tgstation/assets/31829017/ffe03955-78f2-4e6e-b15c-9fdf6d85d588)
## Changelog

🆑
fix: Basic mobs no longer have the (unintended) ability to shoot out of
containers, like bluespace body bags.
/🆑

---------

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-03-06 18:58:13 +01:00
Ben10Omintrix
29437e3559 fix mob ai using attacks while inside pokeballs (#81671)
## About The Pull Request
fixes pokemon AI still being active while inside the pokeball closes
#81669

## Why It's Good For The Game
fixes pokemon AI still being active while inside the pokeball

## Changelog
🆑
fix: fixes pokemon ai still being active when inside the pokeball
/🆑
2024-02-26 17:59:25 +01:00
Ben10Omintrix
dd5234b401 [no gbp] fixes ai controller runtime (#81134)
## About The Pull Request
fixes the flaky error that would happen in cleanbot controllers. i
discovered thru the profiler that a proc i was using to stop tracking
unreachable targets and caching them to a blacklist in selectbehavior
had a bit of a high real time cost, so if the mob got deleted midway
through for any reason would cause a runtime error. ive moved this proc
off selectbehavior and im instead letting the move loop cache this
target into the blacklist if it reaches the max pathing attempts
## Why It's Good For The Game
fixes a runtime that sometimes happens in ai controllers

## Changelog
🆑
fix: fixes a runtime that sometimes happens in ai controllers
/🆑
2024-01-28 23:53:05 +01:00
Mothblocks
404d2cb36c Optimize find_potential_targets self cost (#80602)
![image](https://github.com/tgstation/tgstation/assets/35135081/84ae20b6-5f44-4a69-bda3-0df1435dea5c)

`find_potential_targets/perform` currently has a pretty bad self cost in
part due to it running a second "loop over everything in range" check to
find turrets and mechs. This doesn't drop it down by as much as I'd like
because it still needs `hearers`, it still shows up pretty high, but
this at least cuts out some unnecessary work.

Best case is likely to minimize work AIs need to do when there are no
players on their z-level, as there are a lot of calls from Lavaland.
2023-12-28 14:14:49 +01:00
Bloop
4a989723e1 [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


![firefox_P62DdMv946](https://github.com/tgstation/tgstation/assets/13398309/1a784a27-e5c9-42d1-b160-7eb9251b3997)

~~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.
2023-12-17 05:04:28 -05:00
Profakos
e65397bb7c Adds a smaller size targeting strategy, makes crabs use them (#80246)
## About The Pull Request

The PR that added crabs said crabs are now small creatures, and will
hunt tiny creatures. However, their targeting strategy was
`our_our_smaller`, so a group of crabs ended up eating each other. This
PR creates a new targeting strategy, and applies it to the crab AI.

## Why It's Good For The Game

Puts an end to crabbibalism.

## Changelog

🆑
fix: Crabs will properly only target Tiny creatures
/🆑
2023-12-13 21:21:10 +01:00
Bloop
18047d74fe Fixes a bunch of AI related CI runtimes (#80202)
## About The Pull Request

<details><summary>A bunch of the numerous CI issues </summary>


![image](https://github.com/tgstation/tgstation/assets/13398309/70b0419e-0ac4-4a59-8acb-02511f8d6987)


![image](https://github.com/tgstation/tgstation/assets/13398309/4303923d-aaea-438f-9eb2-d27b510c7bc6)

</details>

You can view the full list of them here
https://github.com/Skyrat-SS13/Skyrat-tg/actions/runs/7148986054/job/19470671408.

What seems to be happening is, the `ai_controller` `fire()`s, and at
some point the the `pawn` var has become null from qdeletion. Many of
the `SelectBehaviors()` procs make use of that var, and then try to
access it without any safeties whatsoever.

I believe it is mainly happening because of long `do_after()`s and other
procs that sleep.

This PR just adds those safeties. I probably didn't get them all, but
this should fix the ones I have seen in CI. There may be a better
solution to cover all future cases of this but I will wait on feedback
to proceed. See below comments:

---

I don't know if you would rather this to always be checked at the
controller level instead (or in `able_to_plan()` perhaps?) but I could
do that if it's wanted. I wasn't sure if there were certain things that
depended on `SelectBehaviors()` running for cleanup so I opted against
that.

On that note, shouldn't we just be qdeleting the `ai_controller` when
the pawn gets qdeleted? Is that not already happening? And if not, is
there a reason for it? That would probably be the best way to handle
it...

## Why It's Good For The Game

I would like to stop seeing so many random CI failures, wouldn't you?

## Changelog

🆑
fix: fixes some AI runtimes that were caused by the pawn becoming null
/🆑
2023-12-10 18:22:56 -07: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
Ben10Omintrix
ce6f2724cd basic cats and mini kitchen helpers (#79800)
## About The Pull Request
this pr transforms cats into basic pets! cats now have some new
behavior. they can carry fish and hunted mice in their mouths to deliver
it to kittens, and kittens will eat them.


![catmouse](https://github.com/tgstation/tgstation/assets/138636438/8f146be4-c7b2-41d3-8301-734be49b5efc)

![catfish](https://github.com/tgstation/tgstation/assets/138636438/f8df54f2-9183-406d-afbd-f90f415f7f3d)

if a kitten sees you holding food, it will point at you and meow loudly
until u give it the food.
becareful when putting male cats near each other, there is a small
chance they get into a heated argument and meow loudly at each other
until one of them flees.
also added a new small cat house for cats. cats will use these homes if
u build one near them (using 5 wood planks)


![cathouse](https://github.com/tgstation/tgstation/assets/138636438/9515a78c-fdfe-461b-bad2-6b497117c694)

Chefs can craft the cake cat and breadcat. these are useful cats because
they can help the chef around in the kitchen. they will turn stoves and
grills off when food is ready, so they dont burn. and the cake cat will
help the chef decorate his donuts

## Why It's Good For The Game
refactors cats into basic mobs and gives them a deeper ai

## Changelog
🆑
refactor: cats are now basic pets. please report any bugs.
add: the cake cat and bread cat can now help the chef around in the
kitchen
/🆑
2023-11-28 21:51:37 -07:00
san7890
b251b9dbb0 Refactors Parrots into Basic Mobs (ft. Ben10Omintrix/Kobsamobsa) (#79762) 2023-11-18 19:24:32 -08:00
Bloop
e1b958c41f Removes final remnants of 'targetted' (#79626)
## About The Pull Request

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

## Why It's Good For The Game

Typos bad. Accurate guides good.

## Changelog

🆑
code: gets rid of the rest of the instances of 'targetted' typo from
code
/🆑
2023-11-11 07:46:02 -05:00
LemonInTheDark
9696dd1a1d 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>
2023-11-09 14:44:24 +00:00
Ben10Omintrix
42c8e1adf9 new wizard ability and basic leaper refactor (#79237)
## About The Pull Request
refactors leapers into basic mobs and adds a new ability for wizards.
for 2 points wizards can buy their own leaper pet. they will get a
contract which lets them pick their pet's name and color

![thefrogs](https://github.com/tgstation/tgstation/assets/138636438/8df9b893-d07d-4e51-a9fa-644830cc7a81)

after they sign the contract they will get a frog statue which is used
to contain the leaper. players can use this statue to release or recall
the leaper into the statue. when its in the statue it will slowly regain
health or even revive from the dead, but if it gets gibbed then the
statue will be useless.

also adds a new ai behavior for leapers which lets them go swim in water
(and splash around) for a period of time. i gave this behavior to frogs
and crabs too

when riding the leaper, the players will get access to all its
abilities, it now has new abilities, it can create frog minions that
suicide bomb the enemies and it can also create a shower of poisonous
structures.


https://github.com/tgstation/tgstation/assets/138636438/931aa7b4-09f0-493f-bdb6-f3bdd0915b22

also when riding the leaper, players can point at walls near it so it
will destroy it. alternatively players can give commands to their
leapers to use abilities and to follow them if they are not riding it.
wizards cant be force dismounted from their frogs, and only wizards can
ride the frogs.

this also removes leapers from cytology as they now are much more
dangerous and have a new home


## Why It's Good For The Game
refactors leapers into basic mobs, and gives more gameplay opportunities
for wizards
## Changelog
🆑
refactor: leapers have been refactored into basic mobs please report any
bugs
add: wizards can now summon a leaper pet
removal: removes leapers from cytology
/🆑
2023-11-06 00:05:29 +00:00
Profakos
bc18450afe Converts traders to basic mobs (#79187)
## About The Pull Request

This PR converts the two trader mobs into basic mobs, these being the
basic debug trader that buys ectoplasm and sells ghost burgers, and Mr
Bones, who buys empty milk cartons and bones, and sells bone relate
paraphernalia.

Traders now use dynamic appearance generation. The old sprites still
exist as hallucinations, and as shop signs.

Trader UI is now summoned via `COMSIG_ATOM_ATTACK_HAND`, which properly
cancels the attack chain, so there is no longer need to put it on
Interact.

I kept most of the original behaviour, but moved them off into a
component. I have also cached all the images generated for the radials,
I hope I have not overengineered it. I have also created a new datum,
which stores the trader's wares, needs, and speech patterns.

Admins can put the component along with the trader data on any living
mobs with an AI controller, turning them into traders. Keep in mind that
most AI has random idle movement, meaning they have a chance to walk
off, closing your trader radial.


![image](https://github.com/tgstation/tgstation/assets/2676196/a2b216e9-f9bf-46e1-83fa-3a41c8447176)

The trader AI consists of the following, first, when a trader sees
someone, they will deploy their shop, if one does not already exists.
The shop consists of a chair, and a holographic sign. If you attack
them, they will chase you with their weapons, and then return to their
chair when victorious. If the chair is somehow destroyed, they will
create a new shop when they see a new potential customer.


![image](https://github.com/tgstation/tgstation/assets/2676196/ad5fcd5a-996c-490f-938b-6bc11c91c4ee)

Mr Bones uses a variant of the AI, where they will run at you, and
deploy their shop when they reach you. I call this the jumpscare
variant. Below you can see me getting actually jumpscared because Mr
Bones has stepped on a yelling frog when I opened the maintenance door.


![image](https://github.com/tgstation/tgstation/assets/2676196/f47a5baa-e32d-4454-97f9-d90d027003d2)

I have also made an element that toggles an ai controlled combat mode
when it gains a target, and when it loses it. I am using it to make
Traders unable to trade while they are trying to kill a robber. To aid
this, I a have made
`/datum/ai_controller/proc/sig_remove_from_blackboard` send the
`COMSIG_AI_BLACKBOARD_KEY_CLEARED` signal, in case the trader kills a
mob that deletes itself on death. This means I could remove a signup
`/datum/component/appearance_on_aggro` was doing towards Qdeleting.

Below you can see Mr Bones shooting me with candy corn.

![image](https://github.com/tgstation/tgstation/assets/2676196/489e1072-e15a-412c-a8eb-9a3f0cca7bf6)


![image](https://github.com/tgstation/tgstation/assets/2676196/8f74b50f-ea35-467c-bb07-2ef38f84c453)

Traders actually only shoot you until you are conscious, so I survived
here in crit. Most mobs don't have crit state, so they just die, so I am
sticking by this voice line.

Thank you @CoiledLamb  for help with the sale sign!

## Why It's Good For The Game

Two more mobs off the list. The AI and Componentized behaviours allows
us to set up new kind of traders.

## Changelog

🆑
refactor: Traders are basic mobs now. Please alert us of any strange
behaviours!
code: If there is only one option, radial lists will autopick it. This
behaviour can be turned off via a new argument.
/🆑
2023-10-31 01:49:56 +00:00
lizardqueenlexi
0036e13af0 Basic Constructs: Wraith (#79235)
## About The Pull Request

Converts wraith constructs to basic mobs. The last of the "mainline"
constructs, though there's still one to go after this.

Wraiths are pretty much the same as they've always been - speedy
constructs that pack a bit of a punch, built around doing hit-and-run
tactics with their ability to ethereal jaunt. Notably, I've converted
their ability to recharge their jaunts with attacks into a new
component, `recharging_attacks`. This can be placed on any basic mob to
let them recharge a cooldown action by landing hits, which could
possibly be useful in the future.

NPC wraiths are pretty straightforward, with a twist - they will always
chase down and beat to death the lowest-hp mob they can see. Happening
upon one of these while wounded will end very badly! While I originally
wanted them to be more flighty and use hit-and-run tactics, I couldn't
figure out a way to do this that didn't look kind of silly and make them
less effective overall.

In addition to the wraiths, I've done some much-needed cleanup to basic
constructs as a whole, improving some things and covering some things I
missed along the way.
- Ectoplasm drop types from constructs is now properly based on their
theme. I _believe_ I've done this in a way that will pass unit tests
this time, but we'll see if my local tests were being honest with me.
- Player-controlled constructs now attack faster. I didn't realize that
being basic mobs capped them to attacking once every 2 seconds, which is
a gigantic nerf over the simple animal version. I cut this to just 1
second, which should be much closer to how it originally was.
- Artificers actually seek out and heal the most damaged ally they can
find, instead of the least damaged. Turns out the sort was doing the
exact opposite order from what I thought, which became much more obvious
when using the same targeting behavior on wraiths.
- I put the PR number in the juggernaut update script, which I somehow
missed on that one.
- Removed the extraneous "noncult" construct subtypes that didn't do
anything. The Artificer one, which does something, is still around.
## Why It's Good For The Game

For the same reasons as the previous three. 5 more simple animals gone,
and only one construct to go until I can nuke simple constructs from the
codebase entirely. Other than that, the new component could possibly
come in handy in future designs, and the NPC behavior should hopefully
be a little scary - even if just a little.
## Changelog
🆑
refactor: Wraith constructs have been converted to the basic mob
framework. NPC wraiths are now extra cruel and will attack the
lowest-health mob they can see at any given time. Make sure this isn't
you! Please report any bugs.
fix: Artificers and juggernauts no longer attack significantly more
slowly than intended.
/🆑
2023-10-30 02:28:32 +00:00
lizardqueenlexi
b65f729901 Nanotrasen basic mobs. (#78917)
## About The Pull Request

First and foremost, converts all Nanotrasen simplemobs into basic mobs.

To avoid messy and redundant code, or god forbid, making Nanotrasen mobs
a subtype of Syndicate ones, I've made Syndicate, Russian, and
Nanotrasen mobs all share a unified "Trooper" parent. This should have
no effect on their behaviors, but makes things much easier to extend
further in the future.

While most of this PR is pretty cut-and-dry, I've done a couple notable
things. For one, all types of ranged trooper will now avoid friendly
fire, instead of shooting their friends in the back. Even the Russians
have trigger discipline.

I've also created a new AI subtree that allows mobs to call for
reinforcements. I've hopefully made this easy to extend, but the
existing version works as follows:

- A mob with this subtree that gains a target that is also a mob will
call out to all mobs within 15 tiles.
- If they share a faction, mobs receiving the call will have the target
added to their retaliate list, and have a new key set targeting the
calling mob.
- If they have the correct subtree in their AI controller, called-to
mobs will then run over to help out.

Sadly, this behavior is currently used only by a few completely unused
Nanotrasen mobs, so in practice it will not yet be seen.

Finally, I've fixed a minor issue where melee Russian mobs punch people
to death despite holding a knife. They now use the proper effects for
stabbing instead of punching.
## Why It's Good For The Game

Removes 8 more simple animals from the list.

As said above, making all "trooper" type mobs share a common parent cuts
down on code reuse, ensures consistency of behavior, and makes it much
easier to add new troopers not affiliated with these groups. I expect
that I'll make pirates share this same parent next.

The new "reinforcements" behavior, though extremely powerful, opens up
exciting new opportunities in the future. There aren't many existing
behaviors that allow basic mobs to work _together_ in interesting ways,
and I think adding some enemy teamwork could be fun.
## Changelog
🆑
refactor: Hostile Nanotrasen mobs now use the basic mob framework. This
should make them a little smarter and more dangerous. Please report any
bugs.
fix: Russian mobs will now actually use those knives they're holding.
/🆑
2023-10-24 23:20:27 +00:00
lizardqueenlexi
0c17553a96 Basic Constructs: Artificer (#79015)
## About The Pull Request

Really getting into the meat of the constructs now. Artificers have
become basic mobs.

On the whole, this was a pretty rote conversion, with no significant
gameplay changes other than the switch to using healing hands rather
than a unique heal ability. The player experience as an artificer is
more or less identical.

The _interesting_ part comes with the AI for the seldom-used "hostile"
variant. Hostile artificers, being squishy and laughably weak, are now a
dedicated "medic" role for constructs. They will perform triage, always
seeking the most wounded construct (or shade!) to give healing to. They
will not attack at all, but they _will_ flee with great speed if
attacked and not busy healing. If they are healing another construct,
they will remain even if they are beaten to death.

I've added some more AI functionality that may come in handy in the
future, and done some refactoring to keep things from getting out of
hand:
- A planning subtree for finding targets that will always select the
most heavily wounded living target that the mob can see (or rather, the
one with the least health). Useful again for medical triage, or for
making a particularly cruel mob that always attacks whoever is easiest
to kill. I plan to use this for NPC wraith constructs when I convert
them.
- Targeting datums can now check a blackboard key to see if they should
only target wounded mobs. This is particularly useful for "medic" type
mobs such as this one.
- I've refactored the "minimum stat" behavior of targeting datums to be
stored in a blackboard key. This removes the need to have unique
subtypes for each different minimum stat we might want. Which... for the
most part, weren't even used, leading to proliferation of several
completely identical targeting datums in a bunch of different files.
Hopefully this change will make things cleaner.

In addition, this PR fixes a pair of bugs from #78807 that I didn't
catch:
- Healing constructs can now actually heal shades. Turns out I forgot to
add the correct biotype.
- Healing hands, when set to print the target's remaining health, no
longer does so as a visible message.

The one thing I didn't do that I kind of wanted to is make NPC
artificers heal themselves when wounded and not busy doing something
else, but it ended up being kind of annoying to make a mob willingly
target itself. NPC artificers never had this behavior before, so I
consider it okay, but maybe I'll circle back to it later.
## Why It's Good For The Game

Another basic conversion, another 5 items off the checklist. Very little
should change in-game, though I think the new NPC AI could make for
interesting challenges in ruins or bitrunning or something.
## Changelog
🆑
refactor: Artificer constructs have been converted to the basic mob
framework. This should change very little about them, but please report
any bugs. NPC artificers are now smarter, and will focus on healing
nearby wounded constructs - if you see them, take them out first!
/🆑
2023-10-19 23:03:27 -06:00
Ben10Omintrix
370a38165e new syndicate item - bee smoker (#78988)
## About The Pull Request
this adds a new item for traitor botanists they can buy for 4 tc. it
releases smoke which hypnotizes bees to follow ur every command, it can
be used on a single bee or it can be used on a hive to hypnotize all the
bees who live there. u can command the bees to enter or exit their
beehive, and u can also command them to spiral around u where they will
follow u and swirl around u to confuse whichever opponent u are
fighting, and u can also command them to attack people. the bee smoker
comes with some fuel but u can recharge it by putting cannabis into it.
the stronger the weed the more fuel it will provide


https://github.com/tgstation/tgstation/assets/138636438/18c9a350-8e24-4c49-abfa-dffb7622502f


## Why It's Good For The Game
adds a traitor item which gives a new gameplay alternative for botanist
and pacifist players. also i noticed the pet targetting datum was using
some copy paste code so i made it a subtpye of the basic targetting
datum

## Changelog
🆑
add: added a new syndicate item - the bee smoker
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-10-19 21:01:31 -06:00
Bloop
847514310d Fixes a runtime with AI targeting code, refactors faction checking to be at the atom/movable level (#78803)
## About The Pull Request

Saw this in CI.


![firefox_lCYnPMJIqm](https://github.com/tgstation/tgstation/assets/13398309/8ef309df-09b6-4096-b6aa-340b59f7446b)

~~Quick fix for it--because turrets are not mobs trying to call this
proc on them will runtime. So let's give them their own implementation
of the proc.~~ Just kidding, let's refactor faction checking entirely

## Why It's Good For The Game

Fixes an issue with basic mob AI targeting and turrets.

## Changelog

🆑
fix: basic mobs will no longer runtime when trying to check the faction
of a porta turret
refactor: faction checking is now done at the atom/movable level
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-10-16 17:22:44 -06:00
Jacquerel
41699c260e Goats will randomly attack you (#78930)
## About The Pull Request

We accidentally lost this behaviour when we converted goats to basic
mobs.
_Formerly_ (and now again) goats had a 0.5% chance per second to simply
decide to attack you for no reason at all.
While attacking you they also have a 10% chance per second to get bored
of doing that and stop.

Additionally, we were outputting a fluff message every time you attacked
a goat which would spam chat if you were trying to fist fight each
other. I added a 20 second cooldown onto it.

As is often the case, implementing this led me down a bit of a rabbit
hole.
We were previously bypassing faction checks via a mixture of flags on AI
behaviours and blackboard keys.
I have moved this _entirely_ to the blackboard now, rather than making
targetting subtypes just to skip faction checks.

This entails having one blackboard key which is "by default do we care
about factions?" and another which is "are we currently ignoring
factions for some other reason?"
Retaliatory AI will generally enable the second flag, so you can get
pissed off at someone you would usually not mind hanging out with if
they start something with you. Certain mobs which want to hunt other
mobs but not be hunted in return just ignore factions entirely all the
time and use the former.

The upshot of this is that the default behaviour for expected default
retaliatory AI shouldn't require you to set any specific kind of
targetting datum and will Just Work.

In a similar vein because I was touching largely the same mobs I made
the "flee when injured" component apply its "don't flee because not
injured" flag instantly upon application rather than needing to manually
set it in the blackboard definition, so that also Just Works.

## Changelog

🆑
fix: Pete's anger management training has worn off, and he will once
again sometimes pick a fight with you for absolutely no reason.
qol: Attacking a goat will not spam messages so frequently.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-10-13 00:27:21 -06:00
Jacquerel
504e6acfa3 Basic Mob Gorillas (#78918)
## About The Pull Request

Now we can make basic mobs with hands easily so I did, they don't
actually use their hands for anything with AI.
In the future we can come back and share the monkey AI where they pick
up items to hit people with, but frankly few weapons are more deadly
than a gorilla's fists.

IIRC I didn't really change their behaviour much, this is mostly just a
straight conversion. Main difference is that they will prioritise eating
nearby bananas and fruit salads over punching people.

When I make these conversions nowadays I need to decide between "does
this attack at the speed that it did as an NPC mob or the speed it did
as a player?"
I am arbitrarily deciding that gorillas are usually not players and
electing for the former, but tell me if you disagree.

I also made "show basic inhand sprites" into a component shared by
Gorillas, Drones, and Dextrous Guardians (all also now available to
become basic, once I get around to it),

And I added an AI behaviour to run a basic emote. This is similar but
different to "random speech", which kind of sucks and needs rewriting
anyway.
Gorillas don't speak, only ooga.

## Why It's Good For The Game

https://www.youtube.com/watch?v=npuuTBlEb1U

## Changelog

🆑
refactor: Gorillas now use the basic mob framework. Please report any
unusual side effects.
/🆑
2023-10-11 16:58:29 -06:00
Ben10Omintrix
0f5d14e68b Mook village and basic mook refactor (#78789)
## About The Pull Request
refactors mooks into basic mooks and re-adds them to the game

## Why It's Good For The Game
this refactors mooks into basic mobs and re adds them to the game. mooks
are now a part of lavaland. they come as a part of a random ruin which
consist of a entire village of friendly mooks. Mooks will aid players
but they will still attack ashwalkers because of some troubled history
between them.

![mookvillage](https://github.com/tgstation/tgstation/assets/138636438/ad1c5d63-c168-475a-a85d-b727dff43e7b)

mooks are a very diseased specie. nanotrasen discovered a small tribe of
mooks and cut a deal with their tribal chief to aid ss13 miners in
exchange for medical supplies.

tribal chief in his decked out home

![tribalchief](https://github.com/tgstation/tgstation/assets/138636438/cc0e0a11-9bf0-4322-b3ae-c7be43092ee8)

male mooks go out and mine and haul ore off back to their village. they
will deposit ores into a stand which is managed by another mook. they
will all return to their village to rest once a lavastorm comes.

![mookstand](https://github.com/tgstation/tgstation/assets/138636438/c7adbf4e-6322-4347-acfc-4e8d45aff798)

players can use this stand to withdraw any ore they like

![mookui](https://github.com/tgstation/tgstation/assets/138636438/a1318be8-50f7-49b2-827c-97bafdb2488a)

female mooks will stay behind in the village to guard it from
ashwalkers. they will also heal male mooks when they come back from a
long day of work. the tribal chief is a bum and chooses not to go out
and mine. he will stay behind in the village and issue commands to his
people rather than work

the village also has its own bard! he follows player visitors and plays
nice music for them while they are in the village (although he is not
very talented).

![mookbard](https://github.com/tgstation/tgstation/assets/138636438/5123e492-6657-4755-9dc7-ab94d4beb554)

he is still a warrior at heart tho so he will be smashing his guitar
over ashwalker skull

![mookshmash](https://github.com/tgstation/tgstation/assets/138636438/bf211bf0-e963-4dbb-b004-e653e06e3974)




## Changelog
🆑
refactor: mooks are now basic mobs. please report any bugs
feature: added mook village to lavaland ruins!
/🆑
2023-10-10 22:41:32 -06:00
Jacquerel
ed907096e3 Fixes fleeing behaviour (#78821)
## About The Pull Request

This PR does three things:
- Fixes fleeing, I broke it in a recent PR so mobs would walk to a
location then sort of stand there doing nothing. This is due to using
`>=` instead of `>`.
- Makes lobstrosities stop running and charge at you more responsively
(when they detect they can charge).
- Inverts the `BB_BASIC_MOB_FLEEING` blackboard key to
`BB_BASIC_MOB_STOP_FLEEING` so that the default behaviour is "to perform
the behaviour that you put on the mob" instead of to not do that.

## Why It's Good For The Game

Makes commonly used behaviour work properly.
Removes footgun we hand to ai developers.

## Changelog

🆑
fix: Cowardly mobs will consistently run away from you instead of
getting tired and just sort of standing there after an initial burst of
movement.
/🆑
2023-10-08 23:27:31 -06:00
Ben10Omintrix
032419f30f ice demon basic mobs (#78539)
## About The Pull Request
ice demons are now basic mobs. they still have their behavior where they
can teleport around the player, run away from him and shoot him. they
now also have a new ability they will only use when they are on their
last legs, they will spawn weak and slow afterimage clones of
theirselves to attack the player. damaging these clones will also damage
the original ice demons. ice demons can also now be very easily
countered as they are very afraid of fires. they will run away from you
if they see u holding a lit torch/flare/welding tool and while running
away they will freeze the floors around them to try to slip u to stop u
from chasing them. ice demons now also get a new unique trophy! this
trophy will summon 2 friendly spirits that will help you kill ur target,
but these spirits will dissappear after a very short while.


https://github.com/tgstation/tgstation/assets/138636438/6a48fb15-f447-441a-91c6-48ca120dc22c



## Why It's Good For The Game
## Changelog
🆑
refactor: ice demons have been refactored into basic mbos. please report
any bugs
add: ice demons now have a unique trophy
/🆑
2023-10-08 03:04:35 +01:00
san7890
82904b766c Refactors Sloths into Basic Mobs (#78752)
## About The Pull Request

Hey there,

This just refactors sloths to the basic mob framework. Nothing new
should be added beyond them seeming a bit more sluggish and being a bit
smarter about the fights they pick/running away.
## Why It's Good For The Game

Three more subtypes off the list, we are now sub-200 simple animals left
to refactor. If people want to play catch with their sloth it should be
much easier to fit that in now.
## Changelog
🆑
refactor: Sloths are now basic mobs, however their overall sluggish
behavior shouldn't have changed much- let us know if anything is broken.
/🆑
2023-10-07 04:41:00 +01:00
oranges
d70462a8ec Dogs now flee from mobs with tongs (#78797)
AI dogs with the dog controller behaviour will flee from a target with
tongs in hand.

Untested because I literally cannot play byond.

## Why It's Good For The Game
https://www.youtube.com/watch?v=cXIAZtwvgz0

## Changelog
🆑 oranges
add: Dogs now react to centrist grillers more realistically
/🆑
2023-10-06 23:47:36 +01:00
Jacquerel
5e2c8459dd Basic Heretic Mobs: The Rest of Them (#78757)
## About The Pull Request

Raw Prophet and Armsy had fun stuff going on and merited their own PRs,
but the rest of these guys are basically just statblocks with abilities
so I converted them all at once.

Rust Walkers are present in a ruin and so have new AI which will
actually use their abilities. They rust the area around where they spawn
and throw their rust blast at people.

I also gave Flesh Stalkers AI even though nobody has put them in a map
because I thought it would be cool. This adds an AI behaviour where if
they're not doing anything else they will turn into an animal and chill
until someone's been around them for a bit, before attacking. They will
also use EMP almost immediately upon performing their ambush, which
kills the lights in that room. Spooky!
To support this I needed to make some changes to let AI continue
processing and targetting correctly while shapeshifted.

I didn't give Maids or Ash Spirits AI because they'd be really boring.

Other changes:
I made the maid in the mirror flicker when it takes examine damage
because the `visible_message` says it does but despite having the power,
nobody made it actually flicker...

## Why It's Good For The Game

No more simple mob heretic summons.

## Changelog

🆑
refactor: Rust Walkers, Ash Spirits, Flesh Stalkers, and The Maid in the
Mirror now use the basic mob framework. Please report any unusual
behaviour.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-10-06 16:06:22 -06:00
san7890
24ee1a4681 Refactors Snakes into Basic Animals (#78612) 2023-09-27 20:55:34 -04:00
Jacquerel
f861532d24 Basic Legion & Hivelord (#78624) 2023-09-27 18:41:07 -04:00
Jacquerel
517d33e6f0 Basic blob mobs (#78520)
## About The Pull Request

I remembered today that blob code is ass, especially blob spores.
There's still a lot to improve but I cleaned up _some_ of it by
converting these mobs.
Now they use a newer framework and more signal handling as compared to
circular references.

I _expect_ the behaviour here to largely be the same as it was or
similar. I haven't added anything fancy or new.

This is a reasonably big PR but at least all of the files are small?
Everything here touched every other thing enough that it didnt make
sense to split up sorry.

Other things I did in code:
- Experimented with replacing the `mob/blob` subtype with a component.
Don't know if this is genius or stupid.
- AI subtree which just walks somewhere. We've used this behaviour a lot
but never given it its own subtree.
- Blob Spores and Zombies are two different mobs now instead of being
one mob which just changes every single one of its properties.
- Made a few living defence procs call super, because the only thing
super does was send a signal and we weren't doing that for no reason.
Also added a couple extra signals for intercepts we did not have.

## Changelog

🆑
fix: Blob spores will respond to rallies more reliably (it won't runtime
every time they try and pathfind).
fix: Blobbernaut pain animation overlays should align with the direction
the mob is facing instead of always facing South
refactor: Blob spores, zombies, and blobbernauts now all use the basic
mob framework. They should work the same, but please report any issues.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
2023-09-26 15:28:26 -06:00
Ben10Omintrix
a65d88dd03 basic mobs ranged attacks can check for friendly fire (#78451)
## About The Pull Request
basic mobs can check for friends in the way before firing a attack. if
they find someone in the way they will try to adjust their position so
their friends dont get hit by the projectiles


## Why It's Good For The Game
nice optional feature people can put on the monsters they create

## Changelog
🆑
add: added ranged attack friendly fire checks for basic mobs. minebots
and hivebots will now try to avoid shooting their friends
/🆑
2023-09-25 16:19:58 -06:00
tattle
2a73427ee0 Add new sounds for animals, basic animals make sound on audible emote (#78499)
## About The Pull Why It's Good For The Game Request
More sound immersion. Also just makes sense for sounds to play when an
animal is both saying something and using an audible emote.

Crab click: https://freesound.org/people/JarredGibb/sounds/263882/
Chitter: https://freesound.org/people/ForSoundDesign/sounds/687302/
Chicks: https://pixabay.com/sound-effects/chicks-very-young-56075/
Chicken: https://freesound.org/people/Breviceps/sounds/456803/


https://github.com/tgstation/tgstation/assets/66640614/29cd4e8e-b9c3-4f71-be0d-8c3f3de40eba


https://github.com/tgstation/tgstation/assets/66640614/9a24c1a8-0707-43ad-adec-b7ce1eddb5f6


https://github.com/tgstation/tgstation/assets/66640614/21cc37ae-c49c-461a-83c5-271f6d577fc6

## Changelog
🆑 tattle
qol: Basic animals now make sounds for audible emotes
sound: Added new sound effects for chicks, chickens, crabs, and insects
/🆑

Co-authored-by: tattle <article.disaster@gmail.com>
2023-09-25 15:55:16 -06:00
jimmyl
cf5360acd8 [no gbp] fixes blackboard speech error (#78551)
## About The Pull Request

i changed initial to list()

## Why It's Good For The Game


![image](https://github.com/tgstation/tgstation/assets/70376633/4c289c2e-8974-4c4e-9d91-f2502134165d)

## Changelog
i dont think runtimes are playerfacing

---------

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
2023-09-25 09:23:47 -04:00
jimmyl
5db7992b09 basicmob clowns (#78448)
## About The Pull Request

this is a mostly 1 to 1 port of simpleanimal clowns to basicmob clowns
this means they have 1 more brain cell
and they waddle



https://github.com/tgstation/tgstation/assets/70376633/0c5f01c7-fea2-4d8c-9fc1-764c1557e1b8



## Why It's Good For The Game


![image](https://github.com/tgstation/tgstation/assets/70376633/f92c85ea-33f2-4cf3-858f-103c0958ff97)

## Changelog
🆑
refactor: clowns are basicmobs now
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-09-23 14:46:11 +00:00
Jacquerel
b2ecd81be4 Basic Mob Brimdemon (#78424)
## About The Pull Request

Fixes #71330

The brimdemon was basically already perfect (well, it has a novel means
of attacking) so I didn't get too fancy with this one, it's _largely_
just a straightforward conversion.
Following this change it's a little slower to back off, but better at
lining up with people in order to blast them. Additionally, its beam is
now a mob ability so you can give it to other mobs if you so desire.

Because I can't help doing a _little_ tinkering, Brimdemons now explode
2.5 seconds after they die, after a brief warning animation.

## Why It's Good For The Game

Simple mobs must die

## Changelog

🆑
add: Brimdemon corpses release an explosion shortly after death, just to
keep you on your toes.
refactor: Brimdemons now use the basic mob framework which (should)
improve their pathfinding somewhat. Please bug report any unusual
behaviour.
admin: The brimdemon's beam ability can be given to any mob, for your
Binding of Isaac event
/🆑
2023-09-22 19:12:43 -06:00
Jacquerel
257923e090 Synchronise AI and Player basic mob melee behaviours (#78337)
## About The Pull Request

I like for things that mobs do to be consistent regardless of whether
they are controlled by a player or by the AI.
One big offender of this is the melee behaviour cooldown. Basic mobs
piloted by AI have arbitrary melee attack cooldowns which are not
reflected when they are controlled by players who can generally attack
much faster (but in _two_ instances, slower).
To remedy this I added `melee_attack_cooldown` as a var on
`living/basic` (sinful) and the ai now uses NextMove to not click too
often, meaning that players can only bite things as often as the AI can
and also that if you VV the cooldown it can speed the AI up (or slow it
down) as well as a player.
This also gets rid of a lot of subtypes of that datum, as we mostly made
them to change the cooldown.

I also hunted down a few places where there was behaviour placed inside
an AI behaviour which wasn't easily replicable by a player piloting the
same mob, preferably a player should be able to do everything that the
AI can.
Fixing this was largely a simple case of moving code from
`ai_behaviour/melee_attack/perform` to `basic/mob_subtype/melee_attack`
and also adding an element for one thing shared by three different mobs.

Strictly speaking I didn't need the element that much because a player
is perfectly capable of clicking on something they attack to drag it,
but it's nice for it to be automatic?

## Why It's Good For The Game

If you see a mob do something then you should also be able to do it.
Mobs shouldn't have significantly different capabilities when controlled
by a player (aside from usually being smarter).

## Changelog

🆑
balance: Player-controlled basic mobs attack as fast as those mobs can
when controlled by the AI
balance: Player-controlled Faithless can paralyse people they attack,
like the AI does
balance: Player-controlled Star Gazers (if an admin felt like making
one) apply the star mark on attack and deal damage to everything around
them, like the AI does
/🆑
2023-09-18 18:10:05 +02:00
Ben10Omintrix
e44fea3964 fix basic mobs retaliate target not filtering targets (#78359)
## About The Pull Request
basic mobs retaliate targeting would try to target players that they
cant attack anymore,

## Why It's Good For The Game
fixes basic mobs retaliate targeting would try to target players that
they cant attack anymore,

## Changelog
🆑
fix: basic mobs retaliate targetting now selects targets they can attack
/🆑
2023-09-17 18:39:08 -06:00
Jacquerel
e11b69f2e6 Removes watcher overwatch ability (#78292)
## About The Pull Request

Removes the "overwatch" ability from Watchers, allowing them to use
their "look away" ability at any health threshold instead (but only if
it's been fighting you for at least 5 seconds or if you attack it).
Drops the cooldown on the gaze a little bit to compensate.

Also fixes some weird behaviour I noticed while testing:
- It won't cancel its own ability by trying to back away from you.
- It will look at you when it shoots you.

## Why It's Good For The Game

I was cooking too hard with this one.
- Two abilities overcomplicates what are supposed to be a pretty simple
mob you fight in packs.
- It wasn't obvious what you were actually supposed to do when
targetted.
- Doing it wrong could be very punishing in groups.
- Doing it _right_ was still kind of unexciting.

This is an ability to give to an elite, not a random trash mob.

## Changelog

🆑
balance: Watchers will no longer put you at gunpoint.
/🆑
2023-09-15 16:28:07 +02:00
Ben10Omintrix
4a8ce66e81 fix basic mobs ranged burst attacks (#78163)
## About The Pull Request
the burst attacks wasnt working because a cooldown in the ranged
component qwas added recently. this now moves the burst attacks option
to the component itself so even sapiant player mobs can use these burst
ranged attacks

## Why It's Good For The Game
fix basic mobs ranged burst attacks

## Changelog
🆑
fix: basic mobs can now use ranged burst attacks
/🆑
2023-09-06 13:30:57 -06:00