## About The Pull Request
This one is a double feature because Watchers and Basilisks share the
same typepath. You might see a couple more of those.
As is tradition I decided to fuck with them rather than just port them.
Here's what's up.
**Basilisks**


- Have a new soulless sprite which looks less like a living blue hedge.
- Walk at you and shoot you while you are not in range (just like
before).
- Become supercharged if they become "heated" by lava, lasers, or
temperature weapons. This was a feature they also previously had but
they would never encounter lava, so now it also works if you use the
wrong gun on them.
- Lose their supercharge if you cool them down.
- Otherwise pretty normal mobs.
**Watchers**
https://www.youtube.com/watch?v=kOq_Bf78k5A
Here's a traditional video of me intentionally getting hit by mechanics
(trust me its definitely on purpose)
- They glow emmissively a little bit so you can see them from further
away.
- Their eyes light up about 0.5 seconds before they are able to shoot at
you.
- No longer melee attack, instead try to stay out of melee.
- Will occasionally put you into "Overwatch", meaning they will shoot
you rapidly if you move or act while they're staring at you for a brief
time period (after which you become immune for 12 seconds, and during
which other watchers will play fair and stop shooting at you).
- If they start taking damage they will also start using their "Gaze"
attack, look away or suffer some kind of negative effect!
- - Normal watcher gaze flashes and confuses you.
- - Magmawing watcher gaze obviously burns (and briefly stuns) you.
- - Icewing watcher gaze freezes you and throws you backwards.
- Magnetically attract and eat diamonds. They also used to do this, but
just if they happened to coincidentally walk past some.
**Other accompanying changes**
All basic mobs will now adopt the "stop gliding" trait if they get
slowed down too much.
I moved behaviour for "fire a projectile from this atom" into a helper
proc because I was using it in three places and I will probably use it
in more places. There are probably other places in the existing code
which could be using this.
I think I made the basic mob melee attack forecast default a little more
forgiving, they were fucking me up too much and I am the playtester.
## Why It's Good For The Game
Another one off the list.
New tricks for old dogs.
Framework for making mobs with ranged attacks "fairer" (you can see when
they are ready to shoot you).
More (hopefully) versatile AI behaviours which we will reuse later (I
hope I'm not duplicating one someone already made).
If our players "enjoy" them enough we can give more mobs "don't look at
me" mechanics.
Removes some soul sprites.
## Changelog
🆑
refactor: Basilisks and Watchers now use the basic mob framework. Please
bug report any unusual behaviour.
sprite: Basilisks have new sprites.
add: Basilisks will go into a frenzy if heated by energy weapons or
temperature beams as well as by lava.
add: Watcher eyes will be illuminated briefly when they are ready to
fire at you.
add: Watchers can now briefly put you into "Overwatch" and penalise you
for moving while they can see you.
add: Wounded watchers will occasionally punish players who look at them.
balance: Unusual watcher variants are more likely to appear.
/🆑
## About The Pull Request
Converts Goliaths to the basic mob framework and gives them some new
moves because I can't leave things well enough alone.
I am planning on touching all the lavaland fauna and then maybe even the
icebox ones if I haven't got bored. The Golaith is the first because it
is iconic.
https://www.youtube.com/watch?v=JNcKvMwT4-Q
Here's me getting killed by one as a demonstration. Despite my poor
performance I would contend that they aren't a _lot_ more dangerous, but
they are a little more dangerous.
The chief difference here is that they have two new attacks which they
will only use in response to being attacked.
If fired at from range, they will target the attacker with a line of
tentacles (it doesn't track you, so is easily sidestepped).
If attacked in melee, they will surround _themselves_ with tentacles, on
a longer cooldown.
Something else you may notice in this video: I discovered that basic
mobs are actually _too smart_ to be Lavaland fauna.
Typically (unlike their old form) a mob on our new AI system is smart
enough to attack someone _the moment they come into range_ rather than
only checking on predictable ticks, which would make using the Crusher
an essentially unviable prospect.
To counteract this, Goliaths now have a delayed attack component which
gives you a visual warning and short duration to get out of range before
they swing at you. I will probably put this on all mining fauna that get
reworked, it wouldn't be a terrible thing to put on other mobs to be
honest.
Other changes: The goliath stun is now a status effect with _buckles_
you to the tentacle as if grabbed, as well as its previous effects.
While this seems purely worse, any nearby helpers can now help-click on
you to instantly remove the debuff.
Experiencing the effect of a Lobstrosity Rush Gland makes you immune to
being grabbed by tentacles and an implanted one will automatically
trigger and free you if you are hit, and the explosive effect of
Brimdust also causes the tentacle to retract (although you'd need to
take damage for this to happen). Using the tools of the land, you can
make these creatures less threatening.
The ability for a Goliath to chain-apply the ability has now also been
reduced, it won't refresh its duration if you are hit when already
buckled.
When not occupied hounding miners, Goliaths will intermittently dig up
the asteroid sand and eat any worms that this produces.
I also made some new sprites for riding a Goliath because they've been
broken since the Lavaland mob update and also kind of were ugly before
then anyway:

Other code changes:
- I made an element which only lets an attached object move every x
seconds. This is because Goliaths are far too slow to use the speed
system (the glide just looks bugged as hell) but one thing I am invested
in when converting these is to make sure that they share the same
behaviour when player or AI controlled. This is disabled while you're
riding them because it was interminably slow.
- The Goliath tentacle trail uses a supertype object now shared with the
Meteor Heart which did something kind of similar.
## Why It's Good For The Game
It begins the process of moving one of our larger subsets of NPCs onto
the newer framework for NPC behaviour.
It adds a little bit more life to an iconic but slightly uninteresting
foe which mostly just walked at you slowly.
This PR contains a few components I expect to apply more widely to other
mobs in the future.
## Changelog
🆑
refactor: Goliaths now use the Basic Mob framework, please report any
unusual behaviour.
add: Goliaths learned a couple of new attacks which they will use in
self-defence.
balance: Help-clicking a miner grabbed by Goliath tentacles will
immediately free them, as will the effect of several items you can
scavenge from around Lavaland.
image: New sprites for the Goliath saddle.
/🆑
This tracks the seconds per tick of a subsystem, however note that it is
not completely accurate, as subsystems can be delayed, however it's
useful to have this number as a multiplier or ratio, so that if in
future someone changes the subsystem wait time code correctly adjusts
how fast it applies effects
regexes used
git grep --files-with-matches --name-only 'DT_PROB' | xargs -l sed -i
's/DT_PROB/SPT_PROB/g'
git grep --files-with-matches --name-only 'delta_time' | xargs -l sed -i
's/delta_time/seconds_per_tick/g'
## About The Pull Request
Quite a lot of mobs had faction defines as a string, which always has a
chance for error. For example, the clown mob spawner had their faction
written as "clown", when the official faction name was "clowns", and a
define existed for it anyways! This PR moves every single string based
factions over here. No references or special role factions. Hopefully I
didn't miss anything.
I also moved a global define used for picking your uplink provider's
flavour to the only file that used it, datum_traitor.dm, and renamed
them a bit to avoid confusion.
I have also noticed that the mimic faction was assigned to the petrified
player with += instead of |=. |= would ensure no duplicate factions, so
I have changed it.
Future improvement:
I have noticed that there is a lot of bloat with factions that contain
only one or two entries (examples: gnomes, floating eyeballs, penguins,
the pet lizards), and some always appear in pairs (vines and plants, the
rare exceptions being killer tomatoes and strange reagent spawned pine
trees), but trimming consolidating them is a matter for a different
time.
## Why It's Good For The Game
Makes assigning factions a bit less error prone.
I can finally remove the ```/// Later all mob factions will be moved
here and their current factions replaced with faction defines.```
comment. Later is NOW.
## Changelog
Nothing player facing
## About The Pull Request
Went down a rabbit hole with touching the migo files... I noticed that
all of those mobs had a reference to `/datum/component/spawner` on them
which looked a bit off.
After investigation it seems like this component is breaking the
prinicple of using an ECS system by assigning a reference to itself on
every mob it creates? There doesn't seem to be a good reason to do that,
as we can just use signals.
This also doesn't work for basic mobs, because most of them don't _have_
this reference to assign to. If we don't want to add it to every basic
mob (and why would we?) it would make more and more converted mobs
invalid for spawners.
Also it means that it has never been valid to create a Monkey spawner,
which seems like a big oversight.
I replaced all of the parts dependent on telling the mob where it was
spawned from with signals.
Megafauna seemed to have a reasonable amount of code related to "not
straying a certain distance from what spawned them", but as far as I can
tell unless someone varedited one onto a map we have never had a spawner
which creates megafauna (nor would we want one? That would virtually
always cause it to respawn instantly after being killed).
## Why It's Good For The Game
Improves future maintainability
Brings implementation up to current standards.
Makes the code work the way I would have assumed it already worked in
the first place.
## Changelog
🆑
fix: Mob spawners will no longer break if instructed to spawn certain
kinds of basic mob, or monkeys.
/🆑
## About The Pull Request
Fixes#72677 and also converted the "Wumborian Fugu" mob to a basic mob
rather than a simple one.
I will be totally honest: I didn't need to do that in order to fix the
bug. I just didn't like looking at the rest of the code in that file.
Also I have some kind of sickness which makes me do this.
This ended up being one of those "see something related and fix it as
well" ones so there's a couple of only tangentially related changes in
here. If you want me to split it up I will but I think this one is
_probably_ fine because the wide-ranging changes are pretty simple ones?
So what this PR does is:
- Refactors simple mob into basic mob.
- Cleans up its really ugly ability to work in a hopefully nicer way.
- A one line fix to the linked issue above.
- Modifies the default cooldown on `basic_melee_attack` and
`attack_obstructions` to be a widely used cooldown rather than a random
value used by no mob that we have.
- Renamed behaviour "try_mob_ability" to "targeted_mob_ability" and
added a new AI behaviour called "use_mob_ability", the difference
between the two being that the former requires a target and the latter
does not. I... don't actually use this because I realised after adding
it that I still want a target for this mob, but someone will need it
eventually.
- Change everywhere that is passing references to abilities to actions
to pass weak references instead.
- Adds an element to handle "spawn this stuff when a related mob dies".
- Found a few places where people were setting `environment_smash ` as
if it did anything (including me) and replaced them with the proper
ai_controller implementation instead, updated the comment to make it
clearer although that won't prevent copy/paste errors.
- Registered to the "movement speed updated" signal to ensure that basic
mobs actually notice that you have applied a movement speed modifier.
## Why It's Good For The Game
Fixes a linked issue.
Refactors some code which made me sad whenever I saw it.
Restores some mob behaviour which nobody noticed was missing, but was.
Fixes some apparently unreliable code I added in a recent PR reliant on
basic mobs using movespeed modifiers.
Adds element we will definitely need again in the future.
## Changelog
🆑
fix: The Fugu Gland can once more be used on Ian, Carp, Giant Spiders,
or other basic mobs.
fix: Syndicate mobs will once again attack windows to try to reach you,
and space ruin spiders won't.
fix: Netherworld-themed mobs will correctly adjust their speed as they
take damage.
refactor: Made the Wumborian Fugu into a basic mob, which should act
largely the same way but may have slightly different speed and reaction
times.
/🆑
## About The Pull Request
This PR refactors netherworld mobs into basic mobs as best as possible.
Also makes some of them run faster when they are getting damaged or deal
more damage. Now the mobs might be able to keep up a little with the
players.
## Why It's Good For The Game
Makes the mobs have better movement and more dynamic movement. Makes the
quality of these mobs better.
## Changelog
🆑
add: Added new damage buffs for netherworld mobs
refactor: Refactors netherworld mobs into basic mobs
/🆑
## About The Pull Request
Wow we're finally here. This turns carp into Basic Mobs instead of
Simple Animals.
They use a variety of behaviours added in previous PRs to act in a
marginally more interesting way than they used to.
But don't worry there's still 2 or 3 PRs to follow this one until I'm
done with space fish.
Changes in this PR:
Carp will try to run away if they get below 50% health, to make use of
their "regenerate if not attacked" component.
Magicarp have different targetting behaviour for spells depending on
their spell;
- Ressurecting Carp will try to ressurect allied mobs.
- Animating Carp will try to animate nearby objects.
- Door-creating Carp will try to turn nearby walls into doors.
You can order Magicarp to cast their spell on something if you happen to
manage to tame one.
The eating element now has support for "getting hurt" when you eat
something. Carp eating can rings and hating it was too soulful not to
continue supporting.
## Why It's Good For The Game
Carp are iconic beasts and I think they should be more interesting.
Also we just want to turn mobs into basic mobs anyway.
## Changelog
🆑
add: Carp will now run away if their health gets low, meaning they may
have a chance to regenerate.
add: Lia will now fight back if attacked instead of letting herself get
killed, watch out!
balance: Magicarp will now aim their spells more intelligently.
add: Tame Magicarp can be ordered to use their spells on things.
refactor: Carp are now "Basic Mobs" instead of "Simple Mobs"
fix: Dehydrated carp no longer give you a bad feeling when they're your
friend and a good feeling when they're going to attack you.
balance: Tamed carp are now friendly only to their tamer rather than
their whole faction, which should make dehydrated carp more active.
Order them to stay or follow you if you want them to behave around your
friends.
/🆑
Hey there,
I was doing some codediving, and I stumbled upon this spawn_time silliness in mob spawner code, so I just swapped everything to use SECONDS defines (since units are very epic).
About The Pull Request
Reorganizes the entire icons/mob folder.
Added the following new subfolders:
nonhuman-player (this was initially just called "antag", but then I realized guardians aren't technically antags)
simplemob
silicon
effects (for bloodstains, fire, etc)
simplemob/held-pets (for exactly that -- I wasn't sure if this should go in inhands instead)
species/monkey
Moves the following stuff:
All human parts moved into species, with moth, lizard, monkey, etc parts moved to corresponding subfolders. Previously, there were some moth parts in mob/species/moth, and others just loose in mob. Other species were similar.
icemoon, lavaland, and jungle folders made into subfolders of simplemob
All AI and silicon stuff, as well as Beepsky et al. into the silicon folder, simplemobs into the simplemob folder, aliens into the nonhuman-player folder, etc.
Split up animal_parts.dmi into two bodyparts.dmi which were put in their respective folders (species/alien and species/monkey)
Code changes:
Filepath changes to account for all of this
Adds a check when performing surgery on monkeys and xenos, because we can no longer assume their limbs are in the same file
Turns some hardcoded statues and showcases that were built into maps into objects instead
Things I'd like to do in the future but cant be assed right now:
Remove primarily-antag sprites from simplemob/mob.dmi (Revenant, Morph, etc.) and put them in the nonhuman-player folder
Split up mutant_bodyparts.dmi into different files for Tizirans, Felinids, monkeys, etc and put them in their own folders. Those may have once been meant primarily for mutated humans but that's now how they're being used right now.
## About The Pull Request
stop forgetting to include mapload, if you don't include it then every single subtype past it by default doesn't include it
for example, `obj/item` didn't include mapload so every single item by default didn't fill in mapload

## Regex used:
procs without args, not even regex
`/Initialize()`
procs with args
`\/Initialize\((?!mapload)((.)*\w)?`
cleanup of things i didn't want to mapload:
`\/datum\/(.)*\/Initialize\(mapload`
Converts many proc overrides to properly use list/modifiers, fixes some spots where modifiers should have been passed, calls modifiers what it is, a lazy list, and cleans up some improper arg names like L, M, C, and N. Oh and I think there was a spot where someone was trying to pass M.name in as a string, but forgot to wrap it in []. I fixed that too.
* new clown mobs and spawners
adds several new types of clown mobs, a beacon to spawn them, and a honkrender that spawns clown hulks
* added more clown varieties and fixes to previous
* fixed unneeded capitalization and changed mob values
removed unneeded capitalization and text errors and altered mob attack values to create more variation. Honkmunculus now does very little damamge but injects a small amount of meth.
* Update clown.dm
* clown changes and new clown
new clown that spawns bananas. can leave large stacks if left unattended, so it may require some reworking. nerfed several overpowered clowns and gave chlown a beetle like stride
* added cluwne to uplink, fixed redundant variables, added new clowns
cluwne can now be purchased for 5 telecrystals as a clown exclusive uplink item. Bananas were greatly improved. new weak clown added. Gave some clowns extra parents to reduce variables.
* Update code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
Co-Authored-By: Pugnacious-Gnome <48869928+Pugnacious-Gnome@users.noreply.github.com>
* IT LIVES ONCE MORE
* forgive me for this sin
* i wish git would detect case changes
* this works
* lava arena is now not the default for swoop attack
adds mass fire attack, sends fire lines out from the drake in 360 degrees
lava pools now have a chance to be spawned with the fire breath attack
adds greater delay for lava pools on lesser ash drake so they don't just all instantly get placed
lava arena doesn't needlessly recalculate the turfs it will be using every pass now
enraged state, procs when you try to escape from the lava arena attack without fighting it normally, colors the drake turns its brightness up as it glows, then shoots out fire everywhere, also heals the drake for 250 health.
fixes a bug where fire lines wouldn't appear if their range would put the calculated end turf outside the map
fixes a bug where indestructible open turfs would turn into basalt on the lava arena attack
fixes a bug where lava arena safe spots would be on indestructible closed turfs
drake swoops now have a greater default recovery time
* fixes stupid text error
* adds vr mining sleepers to the lavaland mining base which can be used to train with megafauna and test out other items
removes useless code from colossus's file including having a dead icon of the drake and butchering results
adds virtual versions of each megafauna which don't drop any items and are deleted upon death
adds the vr mining map
* adds virtual megafauna spawners and their respective icons, spawn 1 megafauna at their location and are indestructible
changes default virtual megafauna hunter gear to be more like the default mining gear
* adds more items to spawning in mining vr
megafauna spawner nests can no longer be pushed
virtual megafauna now have a limit to how far they can move away from their nest
adds arenas and fast bluespace tile paths to each megafauna spawner and gives the mining base some walls to protect it
* adds mining vr map to the away mission config
adds perm portals, linked two way portals who are linked by id and can be set in mapping files by editing instance
adds megafauna portals for the arenas
fixes up some junk on the mining vr map
adds a spawn delay for megafauna spawners after the linked megafaunas death
fixes a bug where bubblegum could teleport outside of his arena
* adds true spawn var to bubblegum to easily handle clones / virtual versions of it spawning
fixes bug where virtual legion would release the real legion when damaged
moves vr mining code to the away missions code to adhere to contributing.md
* converts map files to tgm
adds arena cleanup and fixes runtime bugs on virtual megafauna spawn and death
* reverts local drake changes
* fixes bug where drake corpses still had a gps signal
removes worthless include
* adds the crusher trophies to the vr mining kit
no more granting null achievements you stinky virtual megafauna
this map really didn't need to be 255x255 im sorry
* even smaller map wowee also please compile
* adds respawning item crates for the lavaland items and healing junk
even smaller map and some filler spaces for possible future bosses
removes lavaland map changes
mining vr now works properly with other vr maps and is randomly selected working with normal vr sleepers on station
fixes permanent being permanant my bad
* lavaland map stop being changed
* maybe a bit overkill with the amount of healing items
* reordering i guess but why is the rum gone
* work please
* Update Lavaland.dmm
* Update Lavaland.dmm
* adds force stop option to portals so you can choose to not chain teleports with non linked portals.dm
permanent portals now can be var edited mid game and still work (cool admin events? idk)
permanent portals are no longer deleted if they don't have a linked portal
adds one way portals, portals that lead somewhere but have no return portal. basically non hardlinked portals but able to be done in map and edit stuff
adds recall portals for the vr megafauna arenas, one way portals but you can recall to them by using a one time use spell (no it is not tied to your real mind it is tied to the vr mind)
virtual megafauna can no longer escape their arenas
moves some virtual megafauna procs to the main megafauna file to reduce needless code
* recall portals can now be chained and the portal recall spell can now go back in a stack reverse style
* adds boss rush mode, fight all of the bosses successively with only one break in the middle without dying
object spawners can now choose their datum spawner type through a var
moves some virtual megafauna code from the megafauna file to the megafauna spawner datum
* adds new goodies to the end of the boss rush
removes a lot of the copy pastad code in the vr megafauna
adds true spawn var, decides whether or not the megafauna should grant achievements or have an internal gps, used for bubblegum hallucinations and virtual megafauna
internal gps are now added on the base megafauna path
hierophant's crusher trophy no longer spawns at its beacon (let's be honest some people missed it because of this) so it works properly with the crusher loot var
* Tendrils are now structure based
* Re-adds tendril wipe achievement
neatens up ash walker variables
gets rid of unnecessary variables in hivelord
* Marks spawner children as admin spawned