Commit Graph

521 Commits

Author SHA1 Message Date
SkyratBot
ff46f9c979 [MIRROR] Basic Constructs: Proteon [MDB IGNORE] (#24729)
* Basic Constructs: Proteon (#79425)

## About The Pull Request

Last one! Makes proteons into a basic mob, and completely removes the
simple_animal construct supertype.

Proteons aren't really designed to be played by a player, instead being
a nuisance mapped into various ruins and traps. As such, they don't
really have any special abilities. Instead, the hostile variant has a
somewhat unique behavior. They'll viciously attack anyone who comes
close, but, being frail little cowards, if a proteon takes damage it
will immediately flee. After a random period between 2 and 4 seconds, it
will stop fleeing and come back for more.

In addition to this, a few other things have been done, some only
related because they're in files I touched.
- Moved proteons from the file for the Cleric's Den to their own file in
the basic constructs folder. Given that they're used in several
different ruins, they might as well not just be in the file for one.
- Simple constructs have been cut, and with them the procs for
healing/repairing on shades and cult structures, as those are no longer
needed.
- Because I was touching it anyway, I touched up the file for trap
structures. They no longer use any one-letter variable names, and time
is now universally listed in seconds rather than deciseconds in that
file.
- I removed a completely unused blackboard key from ice demons. This is
something I noticed due to a change I ended up not making while working
on proteon AI, but I figured I might as well leave it gone.
## Why It's Good For The Game

Kills the last three simple construct typepaths, bringing us to the
destined 19 removed. Huzzah!

The proteon AI routine should inject a little spice into fighting
proteons, especially for the unprepared - unlike many mobs, they won't
stand there and take it if you decide to fight back, but you can never
safely ignore them when they run away. They still aren't particularly
dangerous.
## Changelog
🆑
refactor: Proteon constructs now use the basic mob framework. The ones
encountered in ruins are a bit flightier now, and will briefly flee
combat if attacked - only so that they can return and menace you again
soon after. Please report any bugs.
/🆑

---------

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

* Basic Constructs: Proteon

* Update defcon2.dmm

---------

Co-authored-by: lizardqueenlexi <105025397+lizardqueenlexi@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-11-01 20:04:55 -04:00
lizardqueenlexi
08274f8343 Basic Constructs: Proteon (#79425)
## About The Pull Request

Last one! Makes proteons into a basic mob, and completely removes the
simple_animal construct supertype.

Proteons aren't really designed to be played by a player, instead being
a nuisance mapped into various ruins and traps. As such, they don't
really have any special abilities. Instead, the hostile variant has a
somewhat unique behavior. They'll viciously attack anyone who comes
close, but, being frail little cowards, if a proteon takes damage it
will immediately flee. After a random period between 2 and 4 seconds, it
will stop fleeing and come back for more.

In addition to this, a few other things have been done, some only
related because they're in files I touched.
- Moved proteons from the file for the Cleric's Den to their own file in
the basic constructs folder. Given that they're used in several
different ruins, they might as well not just be in the file for one.
- Simple constructs have been cut, and with them the procs for
healing/repairing on shades and cult structures, as those are no longer
needed.
- Because I was touching it anyway, I touched up the file for trap
structures. They no longer use any one-letter variable names, and time
is now universally listed in seconds rather than deciseconds in that
file.
- I removed a completely unused blackboard key from ice demons. This is
something I noticed due to a change I ended up not making while working
on proteon AI, but I figured I might as well leave it gone.
## Why It's Good For The Game

Kills the last three simple construct typepaths, bringing us to the
destined 19 removed. Huzzah!

The proteon AI routine should inject a little spice into fighting
proteons, especially for the unprepared - unlike many mobs, they won't
stand there and take it if you decide to fight back, but you can never
safely ignore them when they run away. They still aren't particularly
dangerous.
## Changelog
🆑
refactor: Proteon constructs now use the basic mob framework. The ones
encountered in ruins are a bit flightier now, and will briefly flee
combat if attacked - only so that they can return and menace you again
soon after. Please report any bugs.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-11-01 17:07:20 -06:00
SkyratBot
b5eb26abcc [MIRROR] Basic Constructs: Wraith [MDB IGNORE] (#24655)
* 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.
/🆑

* Basic Constructs: Wraith

* Update defcon2.dmm

---------

Co-authored-by: lizardqueenlexi <105025397+lizardqueenlexi@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-10-31 03:00:50 -04:00
SkyratBot
0923ef2b26 [MIRROR] Basic Pirate NPCs [MDB IGNORE] (#24654)
* Basic Pirate NPCs (#79284)

## About The Pull Request

Converts hostile pirate NPCs to basic mobs - specifically, a subtype of
trooper. As their behavior is not meaningfully distinct from other
troopers, this conversion mostly just sticks them on the existing AI
behavior while keeping the rest the same.

Pirates do have one new thing going for them, though, to differentiate
them from other troopers. They use the new **plundering attacks**
component, which means that every time they land a melee attack, they
steal money from the bank account of whoever they hit. This requires the
target to be wearing an ID with a linked bank account, so it's not the
hardest thing in the world to hide your money from them - but it's still
something to be wary of! If killed, any mob with this component will
drop everything they've stolen in a convenient holochip.
## Why It's Good For The Game

Takes down 5 more simplemobs, and (I think) converts the last remaining
trooper-type enemy to be a basic trooper. (It's possible there's more
I've forgotten that could use the same AI, though.)

The money-stealing behavior is mostly good because I think it's funny,
but it also makes the pirates something a little distinct from "yet
another mob that runs at you and punches you until you die". They still
do that, but now there's a little twist! This can be placed on other
mobs too, if we want to make any other sorts of thieves or brigands.
## Changelog
🆑
refactor: Pirate NPCs now use the basic mob framework. They'll be a
little smarter in combat, and if you're wearing your ID they'll siphon
your bank account with every melee attack! Beware! Please report any
bugs.
/🆑

* Basic Pirate NPCs

* Modular paths

---------

Co-authored-by: lizardqueenlexi <105025397+lizardqueenlexi@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-10-31 02:17:34 -04:00
SkyratBot
e501a5c02e [MIRROR] Converts traders to basic mobs [MDB IGNORE] (#24673)
* 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.
/🆑

* Converts traders to basic mobs

---------

Co-authored-by: Profakos <profakos@gmail.com>
2023-10-31 02:16:50 -04: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
9e18c6575a Basic Pirate NPCs (#79284)
## About The Pull Request

Converts hostile pirate NPCs to basic mobs - specifically, a subtype of
trooper. As their behavior is not meaningfully distinct from other
troopers, this conversion mostly just sticks them on the existing AI
behavior while keeping the rest the same.

Pirates do have one new thing going for them, though, to differentiate
them from other troopers. They use the new **plundering attacks**
component, which means that every time they land a melee attack, they
steal money from the bank account of whoever they hit. This requires the
target to be wearing an ID with a linked bank account, so it's not the
hardest thing in the world to hide your money from them - but it's still
something to be wary of! If killed, any mob with this component will
drop everything they've stolen in a convenient holochip.
## Why It's Good For The Game

Takes down 5 more simplemobs, and (I think) converts the last remaining
trooper-type enemy to be a basic trooper. (It's possible there's more
I've forgotten that could use the same AI, though.)

The money-stealing behavior is mostly good because I think it's funny,
but it also makes the pirates something a little distinct from "yet
another mob that runs at you and punches you until you die". They still
do that, but now there's a little twist! This can be placed on other
mobs too, if we want to make any other sorts of thieves or brigands.
## Changelog
🆑
refactor: Pirate NPCs now use the basic mob framework. They'll be a
little smarter in combat, and if you're wearing your ID they'll siphon
your bank account with every melee attack! Beware! Please report any
bugs.
/🆑
2023-10-30 02:27:46 +00:00
SkyratBot
476bdd1ac4 [MIRROR] Light-Eaten objects can no longer emit light after being turned off and then back on [MDB IGNORE] (#24644)
* Light-Eaten objects can no longer emit light after being turned off and then back on (#79240)

## About The Pull Request

#67676 described a bug where PDAs can apparently emit a small amount of
light after being affected by the light eater. As it turns out, the bug
is even worse than that. It doesn't work for just PDAs, it works for
basically any light source that can be turned off and on. Even
flashlights. In the following pictures, a flashlight has been
light-eaten and then turned off and on again:

![fine](https://github.com/tgstation/tgstation/assets/21979502/e880c3a8-4ae9-4b6c-8ee9-27dacdbb23ab)

Observe how the nightmare jaunt is available, as it should be. However,
one step closer to the flashlight:

![not
fine](https://github.com/tgstation/tgstation/assets/21979502/b35014d4-71e8-49cf-b0f6-479cdf2ba3fc)

The nightmare jaunt can no longer be used, because the flashlight is
still emitting light.

This PR just fixes that behavior. Light-eaten objects will now be
totally dark again, even after being power cycled. Closes #67676.
## Why It's Good For The Game

Bugs bad.
## Changelog
🆑
fix: Light-Eaten objects can no longer emit light after being turned off
and then back on.
code: Flashlights now use light_on instead of defining their own
variable. Please report buggy behavior.
/🆑

* Light-Eaten objects can no longer emit light after being turned off and then back on

* updatepaths

---------

Co-authored-by: GPeckman <21979502+GPeckman@users.noreply.github.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
2023-10-29 08:19:56 -04:00
GPeckman
5f923b097f Light-Eaten objects can no longer emit light after being turned off and then back on (#79240)
## About The Pull Request

#67676 described a bug where PDAs can apparently emit a small amount of
light after being affected by the light eater. As it turns out, the bug
is even worse than that. It doesn't work for just PDAs, it works for
basically any light source that can be turned off and on. Even
flashlights. In the following pictures, a flashlight has been
light-eaten and then turned off and on again:


![fine](https://github.com/tgstation/tgstation/assets/21979502/e880c3a8-4ae9-4b6c-8ee9-27dacdbb23ab)

Observe how the nightmare jaunt is available, as it should be. However,
one step closer to the flashlight:

![not
fine](https://github.com/tgstation/tgstation/assets/21979502/b35014d4-71e8-49cf-b0f6-479cdf2ba3fc)

The nightmare jaunt can no longer be used, because the flashlight is
still emitting light.

This PR just fixes that behavior. Light-eaten objects will now be
totally dark again, even after being power cycled. Closes #67676.
## Why It's Good For The Game

Bugs bad.
## Changelog
🆑
fix: Light-Eaten objects can no longer emit light after being turned off
and then back on.
code: Flashlights now use light_on instead of defining their own
variable. Please report buggy behavior.
/🆑
2023-10-28 23:49:13 -04:00
SkyratBot
7134a47470 [MIRROR] Renames the juggernaut UpdatePaths script [MDB IGNORE] (#24595)
* Renames the juggernaut UpdatePaths script (#79242)

## About The Pull Request

Tin. It did not have the correct PR number in its filename.
PR # was #79170 for reference

## Why It's Good For The Game

People in downstreams will have an easier time finding it now.

## Changelog

Nothing player facing

* Renames the juggernaut UpdatePaths script

---------

Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-10-26 01:19:18 -04:00
Bloop
db2b00bf8f Renames the juggernaut UpdatePaths script (#79242)
## About The Pull Request

Tin. It did not have the correct PR number in its filename.
PR # was #79170 for reference

## Why It's Good For The Game

People in downstreams will have an easier time finding it now.

## Changelog

Nothing player facing
2023-10-25 21:58:48 -06:00
SkyratBot
c056f4dac9 [MIRROR] Nanotrasen basic mobs. [MDB IGNORE] (#24573)
* 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.
/🆑

* Nanotrasen basic mobs.

* Modular

---------

Co-authored-by: lizardqueenlexi <105025397+lizardqueenlexi@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-10-24 21:42:47 -04: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
SkyratBot
05437fe376 [MIRROR] Basic Constructs: Juggernaut [MDB IGNORE] (#24547)
* Basic Constructs: Juggernaut (#79170)

## About The Pull Request

Converts juggernaut constructs to basic mobs. These guys are really
simple, so this is a pretty straightforward one.

The one notable thing about this PR is that I got annoyed that
projectile reflection code was copy-pasted in two different places (the
main one for things like the ablative trenchcoat, and right here on the
juggernaut). So, trenchcoat-style reflection is now a proc on
`/obj/projectile`, which is used in both places.

AI-controlled juggernauts are as simple as befits these big lugs, doing
nothing but slowly walking toward mobs and beating them to death with
their giant fists.
## Why It's Good For The Game

Removes another 5 simple animals.

Not too much else to say about this one, but it's easier to make
projectiles bounce off of things now if anyone wants to do that.
## Changelog
🆑
refactor: Juggernaut constructs now use the basic mob framework. Please
report any bugs.
/🆑

---------

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

* Basic Constructs: Juggernaut

* Modular

* Map Reset

---------

Co-authored-by: lizardqueenlexi <105025397+lizardqueenlexi@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-10-24 20:44:31 +00:00
SkyratBot
c034314f1b [MIRROR] Basic skeletons [MDB IGNORE] (#24545)
* Basic skeletons (#79206)

## About The Pull Request

Turns skeletons (the simple animal version) into basic mobs. This was
another incredibly simple conversion, since skeletons don't really do
anything but walk at you and beat you to death.

Because I thought it was funny, though, skeletons will now seek out
cartons of milk and drink them. Real milk will heal them for a
significant amount, but soymilk, being false milk, will deal them
grievous injury instead! Skeletons beware... I didn't add any other
sorts of milk due to limited ability with existing AI behaviors to
identify milk containers (they actually only look for the carton items).

Other than that, I've done some flavor adjustment for skeletons' attacks
- their effects and sounds will now suit the weapon they're actually
holding - for example, skeleton templars now actually use their swords
instead of slashing you with their horrible fingers. Along with this I
gave the basic skeletons a normal slashing sound, instead of the weird,
impactless hallucination sound they used to use for some reason. I never
liked that sound.

Finally, I've reflavored the spear-wielding skeleton mobs to "undead
settlers", following the naming of the corpses dropped by snow legions
as of #76898, rather than being named after an offensive term for Inuit
people. These skeletons do, after all, appear in settlements on alien
worlds.

To enable the flavor of milk drinking, I expanded the `basic_eating`
component to allow drinking rather than eating flavor, with a different
sound and its own set of verbs. This deletes whatever they drink from,
but c'est la vie.
## Why It's Good For The Game

Ticks 6 more entries off the simple animal freeze. While skeletons are
still extremely simple, being largely-identical mobs that only exist to
beat you to death, being basic mobs should make them slightly better at
this job. Also, again, I think it's really funny that you can distract
skeleton mobs with milk, or even hurt them.
## Changelog
🆑
refactor: Hostile skeleton NPCs now use the basic mob framework. They're
a little smarter, and they also have a slightly improved set of attack
effects and sounds. They love to drink milk, but will be harmed greatly
if any heartless spaceman tricks them into drinking soymilk instead.
Please report any bugs.
/🆑

* Basic skeletons

* updatepaths

---------

Co-authored-by: lizardqueenlexi <105025397+lizardqueenlexi@users.noreply.github.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
2023-10-24 11:14:35 -07:00
lizardqueenlexi
6dde9e4c4e Basic Constructs: Juggernaut (#79170)
## About The Pull Request

Converts juggernaut constructs to basic mobs. These guys are really
simple, so this is a pretty straightforward one.

The one notable thing about this PR is that I got annoyed that
projectile reflection code was copy-pasted in two different places (the
main one for things like the ablative trenchcoat, and right here on the
juggernaut). So, trenchcoat-style reflection is now a proc on
`/obj/projectile`, which is used in both places.

AI-controlled juggernauts are as simple as befits these big lugs, doing
nothing but slowly walking toward mobs and beating them to death with
their giant fists.
## Why It's Good For The Game

Removes another 5 simple animals.

Not too much else to say about this one, but it's easier to make
projectiles bounce off of things now if anyone wants to do that.
## Changelog
🆑
refactor: Juggernaut constructs now use the basic mob framework. Please
report any bugs.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-10-23 23:53:19 -06:00
lizardqueenlexi
9e6cbf2538 Basic skeletons (#79206)
## About The Pull Request

Turns skeletons (the simple animal version) into basic mobs. This was
another incredibly simple conversion, since skeletons don't really do
anything but walk at you and beat you to death.

Because I thought it was funny, though, skeletons will now seek out
cartons of milk and drink them. Real milk will heal them for a
significant amount, but soymilk, being false milk, will deal them
grievous injury instead! Skeletons beware... I didn't add any other
sorts of milk due to limited ability with existing AI behaviors to
identify milk containers (they actually only look for the carton items).

Other than that, I've done some flavor adjustment for skeletons' attacks
- their effects and sounds will now suit the weapon they're actually
holding - for example, skeleton templars now actually use their swords
instead of slashing you with their horrible fingers. Along with this I
gave the basic skeletons a normal slashing sound, instead of the weird,
impactless hallucination sound they used to use for some reason. I never
liked that sound.

Finally, I've reflavored the spear-wielding skeleton mobs to "undead
settlers", following the naming of the corpses dropped by snow legions
as of #76898, rather than being named after an offensive term for Inuit
people. These skeletons do, after all, appear in settlements on alien
worlds.

To enable the flavor of milk drinking, I expanded the `basic_eating`
component to allow drinking rather than eating flavor, with a different
sound and its own set of verbs. This deletes whatever they drink from,
but c'est la vie.
## Why It's Good For The Game

Ticks 6 more entries off the simple animal freeze. While skeletons are
still extremely simple, being largely-identical mobs that only exist to
beat you to death, being basic mobs should make them slightly better at
this job. Also, again, I think it's really funny that you can distract
skeleton mobs with milk, or even hurt them.
## Changelog
🆑
refactor: Hostile skeleton NPCs now use the basic mob framework. They're
a little smarter, and they also have a slightly improved set of attack
effects and sounds. They love to drink milk, but will be harmed greatly
if any heartless spaceman tricks them into drinking soymilk instead.
Please report any bugs.
/🆑
2023-10-23 23:48:22 -06:00
SkyratBot
4970f36e37 [MIRROR] Basic drones [MDB IGNORE] (#24507)
* Basic drones

* Diffs

* Diffs

* Modular

* Modular

---------

Co-authored-by: lizardqueenlexi <105025397+lizardqueenlexi@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-10-22 15:24:55 -04:00
SkyratBot
d46346d656 [MIRROR] Aquariums now have an internal feed storage. Fish catalogs as 25cr goodies. [MDB IGNORE] (#24488)
* Aquariums now have an internal feed storage. Fish catalogs as 25cr goodies. (#78958)

## About The Pull Request
Added a reagent holder to aquarium tanks and some code to enable the
fish to be automatically fed at selectable intervals of 1 minute to 7
(default 3). The holder can be accessed and filled by opening the
control panel, and emptied with a plunger if necessary. Simple plumbing
compatibility has been added as well, in case you think the 6 units of
capacity of the reagent holder (enough to feed a fish 60 times) are not
enough. The preset fishing tank starts with enough feed to keep its
contents alive for 30 minutes.

Beside that, I've fixed a small oversight with the fish analyzer goodie
pack. It should cost 150, not 500.
The fish catalog is now a goodie pack you can get as a goodie for dirt
cheap (25 creds) and a subtype of `book/manual`, so there's a slim
chance you may find it at the library or somewhere else.
Fixed a small oversight inside the fish catalog.
Mapped in a single aquarium kit for each station map, in the service
hallway/storage room where the techfab and cargo consoles are also
found.
Aquarium kits are now compatible with slapcrafting.

## Why It's Good For The Game
Aquariums require too much maintainance for a gimmick, and it's quite
awful to see the fish inside preset aquariums die 5 minutes into the
round. Also, you cannot get fish catalogs anywhere but from the aquarium
kit crate, which costs 1k credits, though its pertinence with fishing
goes beyond aquarium stuff.
Lastiy, I think it's good to give the crew a free aquarium kit. The
price of the supply pack is a bit out of reach for many, service could
use a bit of fisciculture too (I may make it a service pack later, so
that it can be ordered through the service console).

## Changelog

🆑
add: Aquariums now have a small internal reagent holder, accessible when
the panel is open and used to automatically feed the fishes at
selectable intervals, also compatible with plumbing.
add: Fish catalogs can now be bought as a goodie pack, for 25 cr, or
rarely found at the library or maints.
fix: Fixed the prices of fish analyzers. It's supposed to be 150 cr, not
500.
map: Added an aquarium kit to each station, found in the room where the
service techfab and order console also are.
qol: Aquarium kits are now compatible with slapcrafting (crafted by
hitting them with the required material without opening the menu).
balance: Moved the aquarium kit and fish supply packs from the "General"
section to "Service" and "Livestock" respectively, meaning they can be
ordered for free from the service orders console.
/🆑

* Aquariums now have an internal feed storage. Fish catalogs as 25cr goodies.

* UpdatePaths

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-10-22 14:51:43 -04:00
lizardqueenlexi
1b8bcd0365 Basic drones (#79109)
## About The Pull Request

Fixes #68825
Fixes #72249
Fixes #70184

Converts maintenance drones to use the basic mob framework. As drones
don't use AI, this was mostly a perfunctory conversion, but I took the
opportunity to clean up drone code a bit and fixed a few bugs.

Noteworthy changes:
- Drones now have a `can_unhack` field. This is set to FALSE on
syndrones, because unhacking them doesn't make them stop being evil but
does cause some weirdness. Syndrones are unused right now, but you never
know.
- Drones use the Dextrous component for hand-having.
- Drones no longer have an internal ID card, instead being given
all-access with the `simple_access` component.
- Picking up drones now works the same as for other mobs, instead of
pointlessly copying the code into `attack_hand`. As a consequence, it is
now possible to punch drones if you want to for some reason.
- Drones can now reboot/cannibalize dead drones without being in combat
mode.
- Cannibalizing a drone that contains a client no longer runtimes - the
client is ghosted ahead of time.
- Drones now have TRAIT_ADVANCEDTOOLUSER, allowing them to properly
interact with machines.
- Trying to screwdriver a dead drone now gives a balloon alert about why
you can't do that.

In addition to these changes, I cleaned up the code quite a bit,
organizing things better and placing more useful comments throughout.
And removing a hell of a lot of single-letter variable names.

I will note that this PR does _not_ address #72129. The issue there is
that sprites for drones-as-hats are entirely nonexistent, and I'm not a
spriter. It shouldn't be too hard to fix if someone makes dronehat
sprites, though!

## Why It's Good For The Game
Kills 8 more simple animals.

In addition to that, drones were clearly a bit neglected, so this fixes
them up a bit and makes the code a little bit clearer. Maybe not that
much clearer, but it's something. It certainly leaves them in a better
place for further work if anyone wants to do that. Plus, a bunch of bugs
and other jankiness are fixed now, which is nice.

## Changelog
🆑
refactor: Maintenance Drones now use the basic mob framework. This
shouldn't come with any noticeable gameplay changes, but please report
any bugs.
fix: Drones can now interact normally with electrified doors.
fix: Drones' built-in tools can no longer be placed in storage objects
and/or thrown on the floor.
fix: Drones can now perform right-click interactions correctly, such as
deconstructing reinforced windows.
fix: Drones can now reboot or cannibalize other drones without being in
combat mode.
/🆑
2023-10-21 23:36:48 +00:00
SkyratBot
e091777544 [MIRROR] Tram door/panel hotfix [NO GBP] [MDB IGNORE] (#24505)
* Tram door/panel hotfix [NO GBP] (#79093)

## About The Pull Request

- The actions to open/close and lock/unlock are supposed to match
closets, but I got it backwards. Swaps them around.
- The lock now works as expected no matter if your ID card is in hand,
in a wallet, or in your PDA.
- Moves early return for when welder has no fuel.
- There was no indication spoilers were tampered/malfunctioning. Added
an overlay, examine text, context hint, and welder action so it's more
apparent to players.
- Fixing an emagged spoiler is now multitool-weld, to match the overlay.
- Added some missing var docs.
- Improved the wording of some tram error messages about why it's broken
(ie: no power.)
- Fixed crossing signals not showing correct status/examine text when
broken/no power

![image](https://github.com/tgstation/tgstation/assets/83487515/a5539303-88a4-469b-afaf-65c8d67ce2e8)

## Changelog

🆑 LT3
fix: Fixed tram cabinet LMB/RMB actions being reversed
fix: Tram cabinet can now read IDs inside PDAs and wallets
fix: Crossing signals now correctly indicate broken/no power
fix: Trying to repair tram (weld) without welding fuel fails
fix: You can actually unbolt the tram controller from the wall
qol: Tram spoilers now have visual and examine hints about being
malfunctioning/emagged
qol: Improved some tram error messages
/🆑

---------

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

* Tram door/panel hotfix [NO GBP]

* Update CODEOWNERS

---------

Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@ gmail.com>
2023-10-21 16:27:47 -07:00
lessthanthree
1abede91a1 Tram door/panel hotfix [NO GBP] (#79093)
## About The Pull Request

- The actions to open/close and lock/unlock are supposed to match
closets, but I got it backwards. Swaps them around.
- The lock now works as expected no matter if your ID card is in hand,
in a wallet, or in your PDA.
- Moves early return for when welder has no fuel.
- There was no indication spoilers were tampered/malfunctioning. Added
an overlay, examine text, context hint, and welder action so it's more
apparent to players.
- Fixing an emagged spoiler is now multitool-weld, to match the overlay.
- Added some missing var docs.
- Improved the wording of some tram error messages about why it's broken
(ie: no power.)
- Fixed crossing signals not showing correct status/examine text when
broken/no power


![image](https://github.com/tgstation/tgstation/assets/83487515/a5539303-88a4-469b-afaf-65c8d67ce2e8)

## Changelog

🆑 LT3
fix: Fixed tram cabinet LMB/RMB actions being reversed
fix: Tram cabinet can now read IDs inside PDAs and wallets
fix: Crossing signals now correctly indicate broken/no power
fix: Trying to repair tram (weld) without welding fuel fails
fix: You can actually unbolt the tram controller from the wall
qol: Tram spoilers now have visual and examine hints about being
malfunctioning/emagged
qol: Improved some tram error messages
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-10-21 22:37:41 +00:00
Ghom
9ed4bd202d Aquariums now have an internal feed storage. Fish catalogs as 25cr goodies. (#78958)
## About The Pull Request
Added a reagent holder to aquarium tanks and some code to enable the
fish to be automatically fed at selectable intervals of 1 minute to 7
(default 3). The holder can be accessed and filled by opening the
control panel, and emptied with a plunger if necessary. Simple plumbing
compatibility has been added as well, in case you think the 6 units of
capacity of the reagent holder (enough to feed a fish 60 times) are not
enough. The preset fishing tank starts with enough feed to keep its
contents alive for 30 minutes.

Beside that, I've fixed a small oversight with the fish analyzer goodie
pack. It should cost 150, not 500.
The fish catalog is now a goodie pack you can get as a goodie for dirt
cheap (25 creds) and a subtype of `book/manual`, so there's a slim
chance you may find it at the library or somewhere else.
Fixed a small oversight inside the fish catalog.
Mapped in a single aquarium kit for each station map, in the service
hallway/storage room where the techfab and cargo consoles are also
found.
Aquarium kits are now compatible with slapcrafting.

## Why It's Good For The Game
Aquariums require too much maintainance for a gimmick, and it's quite
awful to see the fish inside preset aquariums die 5 minutes into the
round. Also, you cannot get fish catalogs anywhere but from the aquarium
kit crate, which costs 1k credits, though its pertinence with fishing
goes beyond aquarium stuff.
Lastiy, I think it's good to give the crew a free aquarium kit. The
price of the supply pack is a bit out of reach for many, service could
use a bit of fisciculture too (I may make it a service pack later, so
that it can be ordered through the service console).

## Changelog

🆑
add: Aquariums now have a small internal reagent holder, accessible when
the panel is open and used to automatically feed the fishes at
selectable intervals, also compatible with plumbing.
add: Fish catalogs can now be bought as a goodie pack, for 25 cr, or
rarely found at the library or maints.
fix: Fixed the prices of fish analyzers. It's supposed to be 150 cr, not
500.
map: Added an aquarium kit to each station, found in the room where the
service techfab and order console also are.
qol: Aquarium kits are now compatible with slapcrafting (crafted by
hitting them with the required material without opening the menu).
balance: Moved the aquarium kit and fish supply packs from the "General"
section to "Service" and "Livestock" respectively, meaning they can be
ordered for free from the service orders console.
/🆑
2023-10-21 16:23:06 +01:00
SkyratBot
6e2fcee00b [MIRROR] Basic Constructs: Artificer [MDB IGNORE] (#24456)
* 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!
/🆑

* Basic Constructs: Artificer

* Modular

* Modular paths

* Modular paths

---------

Co-authored-by: lizardqueenlexi <105025397+lizardqueenlexi@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-10-20 02:54:31 -04: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
SkyratBot
7cf7be4b7b [MIRROR] Tram v6/Transport Subsystem [MDB IGNORE] (#24399)
* Tram v6/Transport Subsystem

* Update icon_smoothing.dm

* Update utility.dm

* defines/icon

* Update airlock.dm

* Update door.dm

* Update airlock.dm

* Update airlock.dm

---------

Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
2023-10-17 15:16:46 -07:00
lessthanthree
7626c3bd6c Tram v6/Transport Subsystem (#78230)
Co-authored-by: Unit0016 <50649185+unit0016@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
2023-10-17 10:52:38 -07:00
Paxilmaniac
854f662191 Updates a lot of security clothing, unifies a lot of the security blue colors that were all over the place, some other things (#23455)
* get real

* uhhh everything?

* some other stuff

* awawawa

* that can got too then

* reinstates the sprite changes

* man in suit gif

* Update packs.dm

---------

Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
2023-10-15 22:00:31 -07:00
SkyratBot
af9ed1ee04 [MIRROR] Basic Space Dragon [MDB IGNORE] (#24340)
* Basic Space Dragon (#78979)

* Basic Space Dragon

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-10-14 19:35:25 -04:00
Jacquerel
cf5c1fa08c Basic Space Dragon (#78979) 2023-10-14 15:53:28 -07:00
SkyratBot
3673d7c4cd [MIRROR] Remove tiered canister construction [MDB IGNORE] (#24296)
* Remove tiered canister construction (#78909)

## About The Pull Request

In https://github.com/tgstation/tgstation/pull/66210 we removed canister
tiers, but didn't change the construction code. Currently you still have
to build an unfinished frame with 5 iron, 'upgrade' it to tier 1 with
another 5 iron, then complete it.

This combines it all into a single 10 iron recipe.

## Why It's Good For The Game

Eliminates the extra steps in canister construction, since you can't
upgrade above tier 1 any more anyways.

## Changelog

🆑 LT3
qol: Canisters can now be built in one step, no upgrading required
/🆑

* Remove tiered canister construction

* Modular paths

---------

Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-10-12 11:50:35 -07:00
lessthanthree
b414387591 Remove tiered canister construction (#78909)
## About The Pull Request

In https://github.com/tgstation/tgstation/pull/66210 we removed canister
tiers, but didn't change the construction code. Currently you still have
to build an unfinished frame with 5 iron, 'upgrade' it to tier 1 with
another 5 iron, then complete it.

This combines it all into a single 10 iron recipe.

## Why It's Good For The Game

Eliminates the extra steps in canister construction, since you can't
upgrade above tier 1 any more anyways.

## Changelog

🆑 LT3
qol: Canisters can now be built in one step, no upgrading required
/🆑
2023-10-12 10:58:07 -06:00
SkyratBot
b2ccdeab8b [MIRROR] Basic Mob Gorillas [MDB IGNORE] (#24284)
* 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.
/🆑

* Basic Mob Gorillas

* Modular paths

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-10-11 21:27:23 -04: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
SkyratBot
ae2c7f8fbb [MIRROR] Basic Constructs: parent type + Harvester [MDB IGNORE] (#24258)
* Basic Constructs: parent type + Harvester (#78807)

## About The Pull Request

I kind of hate cult as a whole, but I like these little guys. Let's
basic-ize them.

This PR begins the process with the harbinger of the Red Harvest, the
Harvester! Their actual capabilities have been changed very little,
except that most of their unique properties have been moved to
components and elements. The basic parent type of constructs has also
been set up to make the next bunch of conversions easier.

- Constructs capable of repair now receive the healing hands component.
Healing hands has been extended, to allow the healing particles to come
in custom colors, and to allow it to print the target's health if the
target is not a carbon.
- Repairing constructs also receive a new element: Structure repair is a
lighter-weight variant on healing hands that allows repairing clicked-on
atoms of specified types.
- Constructs capable of damaging walls, meanwhile, receive the wall
smasher element.

Harvesters in specific have two special elements:
- The existing "amputating limbs" element, making them instantly rip a
limb off of any carbon they attack. As before, if they attempt this on a
carbon with no arms or legs, the harvester will hear Nar'Sie's call to
bring the victim to her.
- A new "wall walker" element, allowing them to walk through walls of
specified type (cult walls for harvesters) and allowing them to drag any
atom through as well.

Other than laying the groundwork, there's not much else here. I started
with Harvesters specifically because they are only ever
player-controlled, which makes things easy.

I'm not completely happy with the use of healing hands here - it gets
the job done, but currently loses a bit of the previous flavor (a
healing beam as a visual; printing the target's health in cult span). I
may extend it further to allow this behavior.

I've included an UpdatePaths script, even if these things shouldn't be
mapped, just in case something fucky is going on on a downstream. You
never know.
## Why It's Good For The Game

Constructs, currently, occupy _19_ spots on the simple animal list. This
is something close to 10% of all the remaining ones. Also, like
everything to do with cult, construct code is janky, old, and
desperately in need of updating. This is the first step.
## Changelog
🆑
refactor: Harvester constructs have been updated to the basic mob
framework. This should have very little impact on their behavior, but
please report any issues.
/🆑

---------

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

* Basic Constructs: parent type + Harvester

---------

Co-authored-by: lizardqueenlexi <105025397+lizardqueenlexi@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
2023-10-10 18:37:00 -04:00
lizardqueenlexi
ec4defe598 Basic Constructs: parent type + Harvester (#78807)
## About The Pull Request

I kind of hate cult as a whole, but I like these little guys. Let's
basic-ize them.

This PR begins the process with the harbinger of the Red Harvest, the
Harvester! Their actual capabilities have been changed very little,
except that most of their unique properties have been moved to
components and elements. The basic parent type of constructs has also
been set up to make the next bunch of conversions easier.

- Constructs capable of repair now receive the healing hands component.
Healing hands has been extended, to allow the healing particles to come
in custom colors, and to allow it to print the target's health if the
target is not a carbon.
- Repairing constructs also receive a new element: Structure repair is a
lighter-weight variant on healing hands that allows repairing clicked-on
atoms of specified types.
- Constructs capable of damaging walls, meanwhile, receive the wall
smasher element.

Harvesters in specific have two special elements: 
- The existing "amputating limbs" element, making them instantly rip a
limb off of any carbon they attack. As before, if they attempt this on a
carbon with no arms or legs, the harvester will hear Nar'Sie's call to
bring the victim to her.
- A new "wall walker" element, allowing them to walk through walls of
specified type (cult walls for harvesters) and allowing them to drag any
atom through as well.

Other than laying the groundwork, there's not much else here. I started
with Harvesters specifically because they are only ever
player-controlled, which makes things easy.

I'm not completely happy with the use of healing hands here - it gets
the job done, but currently loses a bit of the previous flavor (a
healing beam as a visual; printing the target's health in cult span). I
may extend it further to allow this behavior.

I've included an UpdatePaths script, even if these things shouldn't be
mapped, just in case something fucky is going on on a downstream. You
never know.
## Why It's Good For The Game

Constructs, currently, occupy _19_ spots on the simple animal list. This
is something close to 10% of all the remaining ones. Also, like
everything to do with cult, construct code is janky, old, and
desperately in need of updating. This is the first step.
## Changelog
🆑
refactor: Harvester constructs have been updated to the basic mob
framework. This should have very little impact on their behavior, but
please report any issues.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-10-10 15:55:09 -06:00
SkyratBot
ade3fb2813 [MIRROR] ice demon basic mobs [MDB IGNORE] (#24188)
* ice demon basic mobs

* Modular updates

* Modular updates

---------

Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-10-08 08:06:23 -04: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
SkyratBot
f6577ec049 [MIRROR] Refactors Sloths into Basic Mobs [MDB IGNORE] (#24171)
* 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.
/🆑

* Refactors Sloths into Basic Mobs

* Modular path

---------

Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-10-07 23:23:36 +00:00
SkyratBot
08f914ed28 [MIRROR] Basic Heretic Mobs: The Rest of Them [MDB IGNORE] (#24155)
* Basic Heretic Mobs: The Rest of Them

* Update tgstation.dme

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-10-07 19:13:32 -04:00
SkyratBot
3983623ac3 [MIRROR] Refactors Goats into Basic Mobs [MDB IGNORE] (#24142)
* Refactors Goats into Basic Mobs (#78759)

## About The Pull Request

Refactors goats into basic mobs, pretty clean refactor. They're a bit
smarter when it comes to retaliating mobs, and they're still just as
good as ever when it comes to munching on good ol' plantlife. I also
(finally) turned Pete into a goat subtype just in case people want to
inject more behavior into him in the future.
## Why It's Good For The Game

Cleaner implementation of code when it comes to doing stuff like eating
kudzu or just lusting after flora.
## Changelog
🆑
refactor: Refactored goats into basic mobs! Not much should have changed
beyond their endless desire to retaliate should you attack them, they're
still just as good as chomping away plant life as ever.
/🆑

* Refactors Goats into Basic Mobs

* UpdatePaths

---------

Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-10-07 22:08:27 +00:00
SkyratBot
39fba0fedc [MIRROR] adds directional helpers for empty fire axe and mech removal crowbar cabinets [MDB IGNORE] (#24158)
* adds directional helpers for empty fire axe and mech removal crowbar cabinets (#78722)

## About The Pull Request
title. it's mostly so they can be used conveniently in areas you don't
want to put fireaxes, but do want an empty cabinet for reasons.
## Why It's Good For The Game
more flexible options for mappers, more convenient than making
directional variants yourself. it's what the helper is for
## Changelog
🆑
qol: gives empty fireaxe and mech removal crowbars cabinets directional
helpers
/🆑

* adds directional helpers for empty fire axe and mech removal crowbar cabinets

---------

Co-authored-by: Lamb <110322848+CoiledLamb@users.noreply.github.com>
2023-10-06 20:57:24 -07: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
Lamb
0218d4277d adds directional helpers for empty fire axe and mech removal crowbar cabinets (#78722)
## About The Pull Request
title. it's mostly so they can be used conveniently in areas you don't
want to put fireaxes, but do want an empty cabinet for reasons.
## Why It's Good For The Game
more flexible options for mappers, more convenient than making
directional variants yourself. it's what the helper is for
## Changelog
🆑
qol: gives empty fireaxe and mech removal crowbars cabinets directional
helpers
/🆑
2023-10-06 16:10:19 -06: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
1b1fde4908 Refactors Goats into Basic Mobs (#78759)
## About The Pull Request

Refactors goats into basic mobs, pretty clean refactor. They're a bit
smarter when it comes to retaliating mobs, and they're still just as
good as ever when it comes to munching on good ol' plantlife. I also
(finally) turned Pete into a goat subtype just in case people want to
inject more behavior into him in the future.
## Why It's Good For The Game

Cleaner implementation of code when it comes to doing stuff like eating
kudzu or just lusting after flora.
## Changelog
🆑
refactor: Refactored goats into basic mobs! Not much should have changed
beyond their endless desire to retaliate should you attack them, they're
still just as good as chomping away plant life as ever.
/🆑
2023-10-06 13:09:53 +01:00
SkyratBot
c716294c2c [MIRROR] Basic Mob Raw Prophet [MDB IGNORE] (#24099)
* Basic Mob Raw Prophet (#78733)

## About The Pull Request

Might as well start on these now, should be easy enough.
The Raw Prophet actually comes with a couple of new components.

The `wheel` element is sort of like the `waddling` element in that you
give it to any movable atom to have it move like a raw prophet.

![dreamseeker_3qacWEKYQQ](https://github.com/tgstation/tgstation/assets/7483112/d5e1b0b9-79f7-4272-9c88-a21fee049e5f)
Whee!

The focused attacker component can be attached to any mob or item and
causes it to escalate its damage every time you attack the same target.
I'll be honest I consistently forget that the Raw Prophet does this.

The ones in the Ruin have the blinding gaze attack inherited from
Watchers instead of the point-target Blind spell in order to ensure that
you can actually "dodge" it.
I tried to make it jaunt if it got stuck but ran into too many problems.
Another time.

## Why It's Good For The Game

I do this to relax now.

## Changelog

🆑
refactor: Raw Prophets now use the basic mob framework. Please report
any unusual behaviour.
/🆑

* Basic Mob Raw Prophet

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-10-03 19:59:50 -04:00
Jacquerel
c78211835d Basic Mob Raw Prophet (#78733)
## About The Pull Request

Might as well start on these now, should be easy enough.
The Raw Prophet actually comes with a couple of new components.

The `wheel` element is sort of like the `waddling` element in that you
give it to any movable atom to have it move like a raw prophet.

![dreamseeker_3qacWEKYQQ](https://github.com/tgstation/tgstation/assets/7483112/d5e1b0b9-79f7-4272-9c88-a21fee049e5f)
Whee!

The focused attacker component can be attached to any mob or item and
causes it to escalate its damage every time you attack the same target.
I'll be honest I consistently forget that the Raw Prophet does this.

The ones in the Ruin have the blinding gaze attack inherited from
Watchers instead of the point-target Blind spell in order to ensure that
you can actually "dodge" it.
I tried to make it jaunt if it got stuck but ran into too many problems.
Another time.

## Why It's Good For The Game

I do this to relax now.

## Changelog

🆑
refactor: Raw Prophets now use the basic mob framework. Please report
any unusual behaviour.
/🆑
2023-10-03 14:26:50 -06:00
SkyratBot
8cdc0fbe61 [MIRROR] Refactors Snakes into Basic Animals [MDB IGNORE] (#23972)
* Refactors Snakes into Basic Animals (#78612)

* Refactors Snakes into Basic Animals

* Modular paths

---------

Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-09-28 03:21:34 -04:00