Files
Bubberstation/code/modules/mob/dead/observer/logout.dm
John Willard a15a1b88ed Basic mobs now use z-level turnoff instead of simple (#82469)
## About The Pull Request

On one compile of MetaStation, I saw that there's 45 basic mobs on the
station, 256 on lavaland (the number growing from tendrils), and 59 in
all other z levels combined.

While we do expect Lavaland to be visited every round, at least it won't
be running during the times when no one is there, but even more
importantly, space exploration is something not done every round, so we
don't have any reason to waste our resources on AIs that will never be
interacted with.

Simple animals had an easy solution to this:
If no one is on the Z level, their AI turns off
If someone is on the Z level, they are idle unless needed.

The last simple animals that exists right now are bots, megafauna,
geese, gondolas, and some minor ones like mimic, zombie, dark wizard,
soulscythe, etc.
Point is, we're very much nearly done going through all simple animals,
so this code is being wasted just to ensure things like cleanbots won't
work if no one is on the z level, something I doubt happens often, so I
took their code and made it work for basic mobs instead. I could've done
both but I thought it would look very bad, and maybe this is a good
incentivize to get more basic mob conversions.

There's one major change here and it's that we're missing the "Idle"
mode, some basic mobs like the Lavaland village seems to be made with
intent that they'll be running even if players aren't around, so this
sets up a future PR that makes idle AI easier to add, and I want to make
sure those cases are taken into account.

## Why It's Good For The Game

We don't need to always be processing these basic mobs, and sets us in
the future to hopefully also implement idle AIs.

## Changelog

🆑
balance: Basic mob AIs with no mobs on the Z level now stop.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2024-04-06 15:17:53 -06:00

15 lines
548 B
Plaintext

/mob/dead/observer/Logout()
if (client)
client.images -= (GLOB.ghost_images_default+GLOB.ghost_images_simple)
if(observetarget && ismob(observetarget))
cleanup_observe()
..()
// This is one of very few spawn()s left in our codebase
// Yes it needs to be like this
// No, you're not allowed to use spawn() yourself, unless you're making something that needs to work outside timers
// Don't be a dumbass, I will always be watching
spawn(0)
if(src && !key) //we've transferred to another mob. This ghost should be deleted.
qdel(src)