Commit Graph

82 Commits

Author SHA1 Message Date
Ben10Omintrix
fbb3079911 AI controllers interactions refactor (#86492)
## About The Pull Request
refactors all behaviors to work through clicking. also removes some now
redundant behaviors. in the future ill try to generalize more of these
behaviors

## Why It's Good For The Game
makes AI controllers work through clicks which may help with swing
combat implementation

## Changelog
🆑
refactor: basic mob AI interactions has been refactored. please report
any bugs
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-10-21 17:23:25 -06:00
Waterpig
bb70889f6e TG Upstream Part 1
3591 individual conflicts

Update build.js

Update install_node.sh

Update byond.js

oh my fucking god

hat

slow

huh

holy shit

we all fall down

2 more I missed

2900 individual conflicts

2700 Individual conflicts

replaces yarn file with tg version, bumping us down to 2200-ish

Down to 2000 individual conflicts

140 down

mmm

aaaaaaaaaaaaaaaaaaa

not yt

575

soon

900 individual conflicts

600 individual conflicts, 121 file conflicts

im not okay

160 across 19 files

29 in 4 files

0 conflicts, compiletime fix time

some minor incap stuff

missed ticks

weird dupe definition stuff

missed ticks 2

incap fixes

undefs and pie fix

Radio update and some extra minor stuff

returns a single override

no more dupe definitions, 175 compiletime errors

Unticked file fix

sound and emote stuff

honk and more radio stuff
2024-10-19 08:04:33 -07:00
Waterpig
4c4930c71d Merge branch 'master' of https://github.com/tgstation/tgstation into pulls-tg-to-fix-shit 2024-09-08 00:59:39 +02:00
Jeremiah
008876823c Adds two new BR maps, basic mobs, BR tweaks & fixes (#85292)
## About The Pull Request
Title. Adds two new maps: 
- Grasslands Hunt (peaceful)
- Meta Central (easy)

These maps add a new basic revolutionary mob and significantly upgrades
the ai of basic deer.
This fixes an issue where modular maps were not correctly spawning mobs
or adding them to the "mutable candidates" for antagonists.
There's also some balance changes to bitrunning vendor prices, which are
generally now lower. This change is unrelated to the PR as a whole so
I'm okay with removing it if there's concern

### photos
<details>
<summary>expand</summary>

![Screenshot 2024-07-26
151822](https://github.com/user-attachments/assets/61fd84f3-3768-4b7a-b421-a953fb8b8174)

![Screenshot 2024-07-26
151834](https://github.com/user-attachments/assets/27193237-858e-41ac-953c-6c30846c98c0)

</details>

### todo

- [x] Fix the revolutionary death anim
- [x] Make deer run when injured
## Why It's Good For The Game
New maps as a general positive for bitrunning
Bug fixes
Makes vendor choices for bitrunning-exclusive items generally less of a
chore to get
## Changelog
jlsnow301, MMMiracles, KikoWen0, Ben10Omintrix
🆑
add: Added two new bitrunning maps: Grasslands Hunt and Meta Central.
add: Deer are now more complex animals, granting them enhanced ability
to run amok and chew your favorite plants.
balance: Reduced the cost of most BR vendor items.
fix: Fixes an issue where modular virtual domains spawned less mobs than
intended.
fix: These modular spawns are now valid mutation targets to become an
antagonist.
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-09-06 01:53:50 +02:00
SpaceLoveSs13
55d1c715e5 Pulls2 (#27514)
* New docking port sprites (#82729)

* Adds text to lootpanel items [no gbp] (#82722)

## About The Pull Request
Just some qol, this captures a small portion of the item name and fixes
some icon clipping issues

I clipped it at 5 because monke
![Screenshot 2024-04-17
034211](https://github.com/tgstation/tgstation/assets/42397676/64d9ce18-3722-4382-a58d-f58eb6b9f26c)


![gXR2XjslzR](https://github.com/tgstation/tgstation/assets/42397676/3fc93110-e35e-434a-b63b-89aa669090e7)
## Why It's Good For The Game
Handy if youre in a rush and won't upgrade byond to fix the issue
## Changelog
🆑
fix: Lootpanel additions: Condensed item names for the quick of draw
/🆑

* Fixes tgui alert buttons (#82714)

<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request
Been on my mind for a long time
I did this while relatively inexperienced (how do I center a div etc)

Fixes an issue inherent to our stack implementation where reversing the
direction caused strange spacing issues. This effectively reverses the
extra margins in css so it looks identically spaced whether reversed/not

<details>
<summary>before/after</summary>

Before (normal buttons)

![image](https://github.com/tgstation/tgstation/assets/42397676/a91f5522-b363-4069-9e71-9852b15e9d98)

Before (large buttons)

![image](https://github.com/tgstation/tgstation/assets/42397676/1448b6db-9417-4f93-bbe3-3cb39c70d6a4)

After (normal buttons)
![Screenshot 2024-04-16
234002](https://github.com/tgstation/tgstation/assets/42397676/e19f6a71-bd11-4f21-8cfc-b29e89020f5c)

After (large buttons)
![Screenshot 2024-04-16
234015](https://github.com/tgstation/tgstation/assets/42397676/6adc55cc-42ca-4c1a-a18c-c2dadf3413ce)

Long buttons (normal)
![Screenshot 2024-04-17
174208](https://github.com/tgstation/tgstation/assets/42397676/b919c049-658c-4b9e-ab3f-6d06eb9d467e)

Long buttons (large buttons (I am 35 and yet still fight the forces of
chaos))
![Screenshot 2024-04-17
174202](https://github.com/tgstation/tgstation/assets/42397676/01fae7ff-8c51-4789-88ac-9d533e1f0eeb)
</details>

<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

## Why It's Good For The Game
Looks better, runs smoother, no clipping
<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
fix: TGUI Alerts shouldn't have such wonky buttons any more
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->

---------

Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>

* MetaStation: Replaces the tools in the Primary Surgery Theatre with filled surgery trays (#82730)

## About The Pull Request

Replaces the tools on the tables with 2 surgery trays.

![image](https://github.com/tgstation/tgstation/assets/139372157/91d195f0-10d4-4b73-843a-a2da88fc5d33)

## Why It's Good For The Game

Makes surgery a bit less painful in the surgery theatre, Using tools
from a tray is much nicer than having to open the context menu on the
piles of tools on the tables.

## Changelog
🆑

qol: Replaced the surgical tools in the Primary Surgery Theatre with 2
Surgery Trays.

/🆑

* Fixes smart pipe & cryo gas reallocation (#82701)

## About The Pull Request

**1. Smart Pipe Problem**
 - Fill a pipe with any gas, plasma for e.g.
 - Unwrench the pipe to deconstruct
- The pressure sends you flying but notice plasma is nowhere to be seen
from the now destroyed pipe
 
**2. Cryo pipe connector problem**
The gas gets reallocated when the object is deleted. We only want this
when its deconstructed not deleted to prevent any side effects

This PR fixes them

## Changelog
🆑
fix: smart pipes release their gases into the air when unwrenched
fix: cryo pipe connector component has no side effects of gas
reallocation when deleted
/🆑

* Fix Primal Instincts (#82741)

## About The Pull Request

#82539 randomly made these two lines switch their AI controllers to idle
rather than on, when the intent was for them to wake up immediately to
do make the mob attack or fight or do something

## Changelog

🆑 Melbert
fix: Primal Instincts and Living Flesh should be a tad more reactive
/🆑

* Fix handcuffing (#82760)

## About The Pull Request

Changed this to an early return but then didn't invert the condition


## Changelog

🆑 Melbert
fix: You can handcuff people with 2 arms and you can no longer handcuff
people with 0 arms
/🆑

* Gets rid of UNIT_TESTS compiler warning (#82695)

## About The Pull Request

Basically every single CI Run is throwing the following warning:
```txt
code/modules/unit_tests/lootpanel.dm:24:warning (unused_var): new_box: variable defined but not used
```

You may find an example here:
https://github.com/tgstation/tgstation/actions/runs/8698627681/job/23855921813#step:9:24

This is pretty silly but I don't really know why we even have this
variable (I assume there's something far more complicated underneath the
surface based on what the unit test is asserting), but assuming it is
important let's just insert a do-nothing procedure to get rid of the
compiler warning while ensuring the unit test is actually operating as
it should.

I also don't really like the fact that this is a warning instead of an
error but let's tackle this problem one step at a time by at least
getting rid of the compiler warning in a quick advance PR while I dwell
on this issue (is there a way to get the Dreamchecker linter to look at
the unit test files? it's caught perfectly fine in the langserver)

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>

* Makes dropdowns better (#82697)

## About The Pull Request
Kind of a pain to work with, confusing people with its prop names (many
such cases!)
After recently discovering deathmatch it's very obvious to me how broken
it is, so I made it less so
(now comes with a complete ui upgrade!)

It now scrolls with the selection and to the selection on open, which
felt like major QoL

<details>
<summary>pics/vids</summary>

In motion

![7627sWJ2nS](https://github.com/tgstation/tgstation/assets/42397676/982427b2-6dc8-4c91-90cf-6e17d211f5ae)

Deathmatch got some UI facelifts

![GAotCHxtZg](https://github.com/tgstation/tgstation/assets/42397676/769317ad-7a9f-410a-a60f-4ddfb377210c)


![Ca2UJSpxlY](https://github.com/tgstation/tgstation/assets/42397676/ea188cda-a79b-4ca0-9209-1c69f57231dc)

Fixes #75741

![image](https://github.com/tgstation/tgstation/assets/42397676/d30a1ae4-cf08-4512-9ce6-5499084647b4)

</details>

## Why It's Good For The Game
Better UX
Bug fixes
Potential exploit patched (ui validation for ai voice changer)
Fixes #81506
## Changelog
🆑
fix: Dropdowns received some much-needed QoL, like having the scrollbar
follow your selection.
fix: AI voice changer now shows its current voice selection.
fix: Deathmatch screen has been touched up.
fix: Prefs menu has their dropdowns simplified, hopefully fixing issues
/🆑

---------

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

* Fixes the NT SWAT helmet sprite (#82743)

* Mass Item Creation (#82455)

## About The Pull Request
Have you ever had to click the "Make" button a dozen times for a chef
making soup? I've also had it, so with this PR you can press the button
and everything will repeat itself as long as possible.

## Why It's Good For The Game
Makes life easier for chefs, now they can play chess on their cool
smartphone and craft food. (actually you can transfer it to other items
as well, see for yourself).

* Adds Retain volume flag on the ants reaction (#82718)

Fixes #82575

We'd expect feeding ants to always result in more ants I imagine.

* Borg movement now has sounds (#82704)

## About The Pull Request
adds sound effects to cyborgs when they move
Demo: 
https://imgur.com/a/7Mu98pQ

Open to feedback on this sound so please tell me what you think.
## Why It's Good For The Game
a hunk of metal moving at you without any sound is frightening
## Changelog
🆑 grungussuss
sound: cyborgs now have sounds to indicate they are moving
/🆑

* Use cell defined constants for various stuff (#82594)

## About The Pull Request
This re writes most cell power usage cases with 2 defines
`STANDARD_CELL_CHARGE`(Joules) & `STANDARD_CELL_RATE`(Watts) so changing
cell capacity values in the future won't cause discrepancies.

## Changelog
🆑
code: most cell power usages are scaled with defined constants to help
adapt to future changes
/🆑

* Plumbing machinery power & processing tweaks (#82702)

## About The Pull Request
- Plumbing machinery begins processing only when wrenched & ends
processing when unwrenched. The machines plumbing component
`/datum/component/plumbing/process()` already does this but the
underlying machines processing proc for e.g.
`/obj/machinery/plumbing/synthesizer/process()` is always processing
regardless of its wrenched state or not. We can optimize this & save
power when unwrenched

- Fixes #82621. This adds plumbing machines `idle_power_usage` on top of
its `active_power_usage` ensuring it only uses power when actively doing
work, So if your factory is say full of reagents & cannot do any more
work it will use less energy i.e almost enter an stand by mode,
efficiency

- Plumbing grinder chemical will grinds & juice stuff correctly i.e.
prefer grinding over juicing most of the time

## Changelog
🆑
fix: plumbing machinery begins processing only when wrenched & ends when
unwrenched
fix: plumbing machinery uses energy only when wrenched & doing work,
will stop/use less energy when idle
fix: plumbing grinder chemical will grinds & juice stuff correctly i.e.
prefer grinding over juicing for most stuff
/🆑

* Carps migrating through the station no longer idle so they don't get stuck after spawning until someone walks by. (#82744)

## About The Pull Request

Carps migrating through the station no longer idle so they don't get
stuck after spawning until someone walks by.

## Why It's Good For The Game

Bugfix for Carp Migrations.

## Changelog
🆑
fix: Carps migrating through the station no longer idle so they don't
get stuck after spawning until someone walks by.
/🆑

* Alt click no longer conflicts with mech suit [no gbp] (#82758)

## About The Pull Request
Get in the gundam shinji!!!

Context: Mech users hold ALT to disable strafe, which would trigger the
lootpanel to come up while committing war crimes (annoying!)

This prevents the panel from appearing and fixes the previous behavior,
meaning you can alt click your own mech to disable strafing.


![dreamseeker_mpU1ObsHNI](https://github.com/tgstation/tgstation/assets/42397676/59270585-a2c7-4fc6-a57a-aad6265d3543)

It also makes toggling strafe a balloon alert with sound. Parties for
all occupants!!
## Why It's Good For The Game
Fixes #82753
## Changelog
🆑
fix: Mecha pilots are no longer bothered by incessant loot panels while
holding ALT for strafe disable.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>

* Adds a Wizard-themed map to the deathmatch (#81640)

## About The Pull Request
Deathmatch is severely lacking in HIGH IMPACT MAGIC LARPING. So I added
a big ass wizard arena. The arena itself is based off the wizard den.

Loadouts:
**Wizard:** Standard all-rounder. Got magic missile, jaunt, and
forcewall. Regular gear.
**Pyromancer:** Fire guy. Red robes, fireball, smoke.
**Electromancer:** Zappy guy. Lightning and tesla shock.
**Necromancer:** Is a skeleton. Has Scream for Me and blink.
**LARPer:** Straight from Station & Spessmen. Fake robes and can only
throw lightning and repulse.
**Chuunibyou:** Classic animage. Got chuuni buff and magic cards.
**Battlemage:** Melee fighter. Got some armor and a big hammer with
instant summons.
**Apprentice:** Underpowered until they find a mystery box. Got charge.
**Gunmancer:** Who needs magic when you have guns? Starts with an m1911,
lesser gun summons, and knock.
**Monkeymancer:** Is a monkey. Can summon monkeys and gorillas. Has a
banana.
**Chaosmancer:** Jumbled robes. Starts with a chaos rod. Can rod form
and summon traps for high chaos.
**Funnymancer:** It's just a clown with a banana staff.

The map itself is a pretty standard arena with a long sightline in the
middle. Each participant spawns in their own room complete with a magic
item box. The very southern portion of the ship has a standard mystery
gun box. Soon after the round starts, a hostile gelatinous cube in the
center of the map will break out and attack whoever it sees. Inside its
enclosure is a free death wand. Map has been tested to make sure
deathmatch participants can't escape the deathmatch.
## Why It's Good For The Game
Deathmatch provides a unique opportunity for people to play with
mechanics they will not often get to use. Allowing people to play wizard
for a few minutes shouldn't cause too much harm aside from admin logging
from explosions, which hopefully a fix is in the pipeline for.
## Changelog
:cl:Motho
add: Added wizard-themed deathmatch map.
add: Added mystery wand box.
/🆑

* Makes viewers() defines (#82767)

* Fixes Pseudo circuit delay & some missed cell define usages (#82771)

## About The Pull Request
- Fixes #82688 
If the circuit cost is<= 1% of `STANDARD_CELL_CHARGE` then the delay is
5 seconds, if the circuit cost is >= 50% of `STANDARD_CELL_CHARGE` then
delay is 1 minute. All other delay values are interpolated in between
these 2.
- Pseudo circuits don't use power when used on cooldown
- Makes `INSPECTOR_ENERGY_USAGE_*` defines values use standard cell
values
## Changelog
🆑
fix: pseudo circuit adapter computes recharge delay durations correctly
& won't use power when on cooldown
code: uses standard cell defines for N-spect scanner
/🆑

* Lava/Plasma River tiles now immerse you in them (#82736)

## About The Pull Request

This adds the "immerse" element to lava tiles. 

![lava tests but smaller
file](https://github.com/tgstation/tgstation/assets/28870487/a03555bf-6d2a-46d9-a437-da49a636a61a)

It's a tad hard to see because you're super on-fire, but it still looks
nice.
## Why It's Good For The Game

Eye candy, pretty...
## Changelog
🆑 Rhials
qol: Lava and plasma rivers now immerse you in them.
/🆑

* Adds `ALLOW_RESTING` to a bunch of items (#82761)

## About The Pull Request

Allows you to alt-click a bunch of items while resting. 

Fixes #82788

## Why It's Good For The Game

Some of these, such as storage, are bugfixes. You shouldn't need to be
standing up to configure a spray can, or change the direction of your
bedsheet

Others are just sensible changes. 

## Changelog

🆑 Melbert
fix: You can open bags with alt click while resting again
qol: Many items which previously required you to stand to alt-click now
don't, such as bedsheets and spray cans
/🆑

* Fixes sight range on lootpanel [no gbp] (#82765)

## About The Pull Request
When asked to make lootpanel visible at range they did not just mean
_any range_
AI alt click was a little weird (still is) but now it works

(TM BUG)
Fixes #82768

* Adds Omnitools for engineer and medical cyborgs, reducing on inventory clutter. (#82425)

[This PR is a bounty requested by Ophaq and worked on by
Singul0.](https://tgstation13.org/phpBB/viewtopic.php?f=5&t=36013)

All of the following description in this PR is written by Ophaq as to
what this PR entails:
In this PR, the medical and engineering cyborg's tools are completely
reworked and condensed into an arm similar to the implant a carbon would
get. The tools are shown in a radial wheel around the character to quick
select what is needed instead of looking for it in a cluttered bag of
items. There are a few tools such as the blood filter for the medical
cyborg, as well as the welder, gas analyzer, and t-ray scanner for the
engineering cyborg excluded from the radial wheel. mostly due to their
inherent inmodularity

![image](https://github.com/tgstation/tgstation/assets/127663818/f66425b3-771a-46a0-86e5-958124a3dd6f)

![image](https://github.com/tgstation/tgstation/assets/127663818/45e75c47-8f61-42aa-9ba3-01b25f266941)

Each cyborg gets two arms in case the player wishes to have one on the
side to quick swap to, like having a scalpel in one arm and a hemostat
in the other on the hotbar for convenience or just preference. An
upgraded version of the tools has been added to each respective cyborg
upgrade node with somewhat faster action speed. The upgrade replaces the
arms and transforms them into the "advanced" version which is currently
the same sprite as the regular but just a faster and more efficient
version. The sprites for the surgical arm currently look good but may
need replacing later if someone who wishes to resprite them down the
line decides to do so.
As it currently stands, the medical cyborg's magical bag of gadgets
takes up a lot of your screen space and as a player who plays medical A
LOT, this was a MUCH NEEDED quality of life feature.

The amount of clutter in a medical cyborg's bag makes it in my opinion,
hard to see at the bottom of the screen and a nuisance to constantly
close compared to other models. My standard set up for playing medical
cyborg on the hotbar is 1=med analyzer, 2=usually a secondary surgery
tool or injector, and 3=another surgery tool. The flow of gameplay
during surgery ends up being surgery tool, hit 3 and drop it, surgery
tool, repeat or for efficiency using X to swap between the two surgery
tools I need on 2 and 3. This gets tedious especially after so many
hours of playing medical cyborg. I know some people may disagree, but I
think it would help a lot of help to speed up this flow of gameplay
during surgery and declutter.

By turning the medical cyborg's toolset into an omni-surgery tool which
functions like the surgery arm implant's radial wheel, this would
greatly declutter by like an entire row and make things easier on
medical cyborg players. Having a secondary in the bag helps with
efficiency for those players who like having an extra tool on their
hotbar and swapping back and forth would also improve efficiency and
make less swapping by hitting Z needed. Additionally with the upgraded
version as an optional upgrade in the mediborg tech, this also lets them
be on par with players who use advanced tools late game but not at the
level of alien tools where players would obviously out compete a
mediborg in terms of action speed.

Engineering models also benefit from this rework but at a slightly
different and lesser way whereas certain tools are excluded such as the
welder, due to the way they work on refill and the gas scanner and t-ray
scanner not counting as tool components are not included in the arms.

Syndicate versions of the engineering and medical cyborg also get these
arms, unupgraded.
🆑
add: Adds an omnitoolset for both engineering and medical cyborgs,
containing various basic tools
qol: Engineer and Medical module inventory space is now significantly
decluttered
/🆑

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>

* Fixes dropdown displaytext not working for numeric values (#82778)

## About The Pull Request

https://github.com/tgstation/tgstation/pull/82697 broke the prefs menu
downstream; we have a couple of dropdown choices that are numeric but
that make use of `display_names` to map those choices to appropriate
strings.

The code was assuming that `value` would always be a string when calling
`capitalizeFirst(value)`. Basically it should be doing
`display_names[value]` when `display_names` are present.

## Why It's Good For The Game

Fixes an oversight/bug.

## Changelog

🆑
fix: dropdowns that use display_names as an alias for numeric values
will no longer cause tgui bluescreens
/🆑

* [NO GBP] HPLC can purify inverted chems (#82727)

## About The Pull Request
- Fixes #82725

Inverted chems are now coloured green and classified as clean (like
before my general maintenance PR) which means they can be purified
again.

Only chems that are too impure to use & have an inverted chem value are
coloured red in the UI and not when they are just of the inverted type

## Changelog
🆑
fix: HPLC can purify inverted chems and are now coloured green(clean) in
the UI
/🆑

* Lathes compute their local storage size correctly (#82770)

## About The Pull Request
Basically we have to add the material container before we call parent
Initialize(which calls `RefreshParts()`), else the container doesn't get
initialized early and we skip over computing storage sizes

## Changelog
🆑
fix: off station & round start lathes with local storage don't have
infinite storage size.
/🆑

* Arcmining QoL: GPS component to scanned vents and vent(pin)pointer (#82724)

## About The Pull Request
Scanning ore vents will now tag them on GPS so you can find them easily
when you are prepared (and remove them when they are tapped). Also adds
special pinpointer to help with finding unscanned vents in a first
place. And adds missing uranium overlays for scanned vents. Because why
not.
<details>


![image](https://github.com/tgstation/tgstation/assets/8430839/d13df20f-79c0-46a7-a602-81c630309a2d)


![image](https://github.com/tgstation/tgstation/assets/8430839/72690bec-dffd-41a8-8a5e-1ceb7ae182d0)
</details>

## Why It's Good For The Game
While looking at mineral density to find vents is somewhat fun and
entertaining, having some sort of upgrade to make finding them easier
adds a bit of a progression. Also re-finding already scanned vents can
be a bit annoying. You need to fill your backpacks with GPSs and tag
them manually. It is also inconsistent with geysers that are added to
positioning after you scan them. And with tendrils, which are always
visible.
## Changelog
🆑
add: added ventpointer that points toward nearby ore vents and can be
bought with mining points
balance: scanned ore vents can now be found with GPS
fix: fixed ore vents missing overlay icon for uranium
/🆑

* Fix oven tray runtime (#82782)

## About The Pull Request
Fixes a lil typo from the interaction refactors that broke the ability
to load oven trays from containers
## Why It's Good For The Game
squamsh bug
## Changelog
🆑
fix: loading oven trays from serving trays and other containers works
again
/🆑

* Fix flaky test detection (#82790)

- Add missing job pagination.
- Fix multiple jobs being able to fail if they aren't in
`CONSIDERED_JOBS`

* Add utf8 support for state laws button (#82789)

## About The Pull Request
Adds UTF-8 support for state laws HTML page. Now it supports more than
just English

## Why It's Good For The Game
Support for other symbols, such as cyrillic
![Screenshot 2024-04-21
015220](https://github.com/tgstation/tgstation/assets/31931237/57ca6d56-14da-4f10-a9b6-63b541c5eb5b)

* Update highest available sound channel (#82780)

Current channels are:
```
```
So, the highest available now is 1013

Updating the thing which everyone forgot for 7 years. Not that many
special channels were added either way

* Revert "Borg movement now has sounds" (#82795)

Reverts tgstation/tgstation#82704

The sound ingame appears much louder than the original author intended.
Not to mention that the sound loops stack for every borg moving near
you.

* Use defines for "General Research" where it's not used (#82785)

## About The Pull Request
There is a define for it, so why not use it?

## Why It's Good For The Game
Defines good

* [READY] the unfuckening of clothing rendering (#79784)

refactors clothing visors to use the same system, including masks being
toggled and stuff like riot helmets toggling using the same system and
welding helmets and such
adds a handler that updates all visuals in slots that an item has
obscured, each visual proc calls that so you no longer have weird shit
happening like having to hardcode a proc for heads where you need to
also update hair, mask, glasses everytime you put on an item

one thing here i could also do is make check_obscured_slots return the
HIDEX flags instead of item slots, because in 99% of cases its hardcoded
to be ran against specific slots (like eye code running it against the
glasses slot), but maintainers didnt seem to like that :/

fuck this 2003 bullshit

theres like several bugs here i fixed but i forgot them all and they are
small

* Allows vv investigate /appearance + better checking image (#82670)

* Fixes Alien Numerical Identifier Transfer System (#82762)

## About The Pull Request

Fixes #82756

I'm not sure what the root cause of the issue is or why it broke so
recently (this has been a thing since #49150) but I went and cleaned up
the code and ensured that we always reset the `name` to the `initial()`
value we have for it if we determine that we need to transfer over the
`numba` from the old xenomorph. This is done by a new proc which is a
lot less convoluted from the old system (always respecting var-edited
names and stuff like that) that should make it flow a lot better and
make it more hardy against double-addition of the `numba` to the name.
## Why It's Good For The Game

Having two numbers in your name is weird, should only have one.

[x] I tested this PR
## Changelog
🆑
fix: Evolved aliens should no longer have two numbers in their name.
/🆑

* [NO GBP] Fixes runtime in advanced camera console (#82699)

## About The Pull Request
We only unset machine if we have a user who has logged in

## Changelog
🆑
fix: Fixes runtime in advanced camera console when power is turned off
/🆑

* Refactors how basic ais do their success/failures (#82643)

* Rocky DLXIII: Fitness to Athletics, Athletics skill influences Boxing against Boxers, Boxing overhaul, Evil Boxing (#82611)

as the only meaningful reward

Basically just a rebranding so that it is more broad in its concept. It
isn't just about peak physique. It's about how you can apply it too.

Reaching Legendary rewards you with the Golden Gloves.

I started it in this pr here
https://github.com/tgstation/tgstation/pull/80635

But this is a more significant overhaul of boxing from the ground up.
Namely, it now is majorly influenced by the Athletics skill, and also
more thoroughly aligns with conventional punching in its current state.
However, a major component of this is that boxing's breadth of mechanics
is only relevant when used against another boxer. Non-boxer targets are
only ever going to get smacked by a stamina punch, as it is currently
(and more or less the same values too). Additionally, boxers cannot
punch someone who is either unconscious or in stamina crit, so it can't
be used to maintain stamcrit.

- Boxing now has a One-Two Punch mechanic. Swapping between the left and
right mouse buttons to punch and maintaining this causes every second
punch to do more damage (to boxers). Breaking this chain by punching
with the same button twice will cause you to lose damage (against
boxers).

- Boxing now can have crits occur below 50 stamina damage (against
boxers). However, to knock someone out clean, the target must be
staggered from a previous crit first. (Or I guess be staggered at all,
maybe their shoelaces were tied or something). Crit probabilities are
determined by adding your Athletics probability skill bonuses to your
unarmed effectiveness, and then reduced by the targets own Athletics
skill bonuses. It is hard for two athletes to knock each other out in
one blow. It is trivial for a legendary boxer to knock out a novice in a
single punch. Cybernetically enhanced boxers are dangerously effective
at boxing.

- Boxers can block other boxers by using throw mode, but the chances of
doing so is based on Athletics skill bonuses. A successful block causes
the attacker to take stamina damage (as does the blocker, but less so).

- Participating in boxing increases the Athletics skill. Your gains are
probably slower than normal training, but you at least get some reward
for doing so. Only relevant if your opponent is a boxer. Get a sparring
partner!

So this is all well and good, but what if you're a scoundrel with no
care for the other person in this equation? Well, that's where Evil
Boxing comes in. Evil Boxing has absolutely no restrictions at all, and
can freely use its boxing abilities against anyone. Even non-boxers. You
can even grab people! Wow, what a scumbag. I bet you even king hit
people. Thankfully, only an admin can make you into an Evil Boxer.

(against boxers)

Both mutations have a flimsy increase to instability of 5 because of how
incredibly particular the bonus is.

Strength now reduces the amount of stamina damage inflicted via
exercising by half. Strength also adds a +2 damage bonus on boxing
punches while boxing against boxers (this doesn't influence normal
unarmed attacks whatsoever, or boxing against nonboxers). Obviously,
evil boxers just get this benefit against everyone because they're
knaves.

Stimmed increases the duration of the exercised status effect by one
factor. (That is, if you have no other modifiers, it will double the
duration on its own)

@Jacquerel was racking their brain trying to come up with an alternative
to the skill rewards of Fitness. At the moment, sprite growth is not
only a really bad bonus (it does literally nothing but make you big, and
thus is actually a detriment due to how intrusive sprite size is with
interaction, and plays weird with other sprite changing effects), but
isn't really all that interesting for all the effort put in.

Problem is, how do you make Fitness meaningful without making it a
powergame mechanic? Simple! You make it applicable to a really niche,
self-contained but still utilized game mechanic that is engaging to
participate in and makes you meaningfully very good in it. AND scratches
that power scaling itch that many players have.

Boxing is reasonably self-contained as is, but pretty bland due to how
old it is. While maintaining that self-contained nature, I hoped to
expand the interactivity of boxing a little bit by giving it a small
mini-game in of itself. And also introduce ways to simulate the idea of
boxing a bit better.

The idea of being an Evil Boxer is funny. For every Rocky, there is a
[Insert Rocky Villain Here that isn't Creed]. But in this case, it's
probably some Syndicate douchebag looking to punch clowns into a coma
and inspire the mime to take up shadowboxing in revenge.

🆑
add: Replaces Fitness with Athletics; same skill, but now more
specifically applicable to boxing.
add: Athletics does not increase sprite size.
balance: Overhauls Boxing to add a lot more depth to the interactions.
Only applicable to other boxers, however. You can still punch the snot
out of non-boxers though. But only up to stamcrit or unconsciousness. No
hitting someone who can't fight back!
balance: Adds Evil Boxing, which is the evil and fucked up version of
boxing that you kill people with and are allowed to flout the sacred
rules of boxing as you please. Everyone is a victim!
/🆑

* Cargo ui refactor -> TS (#82745)

Refactors cargo ui, fixing some visual bugs, just making it look better
in general

Should be no gameplay effect other than it looking better

<details>
<summary>pics</summary>

![Il0e6EWjUa](https://github.com/tgstation/tgstation/assets/42397676/d16e83a5-ee36-4346-9411-7ea76907994d)

![Screenshot 2024-04-17
230621](https://github.com/tgstation/tgstation/assets/42397676/f5e15b04-c148-4be4-8f7e-7a195ac8e815)

![Screenshot 2024-04-17
235319](https://github.com/tgstation/tgstation/assets/42397676/d3085f70-74ca-41fb-bbcd-e3bd6c990cee)

![Screenshot 2024-04-17
234758](https://github.com/tgstation/tgstation/assets/42397676/95df59ae-e7e3-4349-a63c-7bfbe6777561)

Fixes #81442
![Screenshot 2024-04-18
000750](https://github.com/tgstation/tgstation/assets/42397676/2d97ba9c-68d7-4ac3-9ff8-3bc5cfecf0f6)

Made a type grabber for backend data in case you want to make your own
typescript uis
`logger.log(getShallowTypes(data))`

![image](https://github.com/tgstation/tgstation/assets/42397676/ff914895-3302-4aca-982c-46af3299a4af)
Otherwise cargo's data is unreadable

</details>

Any UI over 500 lines should get broken up to reduce cognitive load
~~Any ui in javascript shouldn't exist~~
Cargo UI is better
Typescript
🆑
fix: Cargo's supply console has been upgraded visually.
/🆑

---------

Co-authored-by: EricZilla <81941674+EricZilla@users.noreply.github.com>
Co-authored-by: Helg2 <93882977+Helg2@users.noreply.github.com>

* Makes lavaland stone tiles prevent immersion (#82807)

## About The Pull Request
Adds the same trait that lavaproof rods have to the stone tiles, so
things can continue being visually outside of the lava
## Why It's Good For The Game
this shit looks goofy

![324271923-9c1e353d-70ff-4321-839c-8bac2fd03c01](https://github.com/tgstation/tgstation/assets/25628932/d120458d-8f65-418c-a0c8-7d1f939a472b)
## Changelog
🆑 FlufflesTheDog
fix: Stone tiles (and things on them) no longer get immersed in lava
/🆑

* Getting up from prone, z movement, and mod de/activation don't do cogwheels (#82794)

Adds `hidden` to getting up (from prone), moving up (z-movement), moving
down (z-movement), and de/activating MODsuits

- Getting up from prone happens very often, makes it a bit hard to
differentiate when people are doing actions or just crawling around.
    - If we want feedback for getting up, should just be a chat message.
- Moving up and down is just movement. Only affects using the verbs.
- Same as before: If we want feedback, it should just be a chat message.
- Other methods of moving up/down (IE, ladders) are untouched / retain
their cogwheel.
- De/activating modsuits have their own visual feedback and sound
effects associated. Both feels unnecessary.

🆑 Melbert
qol: Getting up from prone, moving up or down a z-level (not via
ladders, naturally. Like flight), and de/activating your modsuit no
longer shows cogwheel effect
/🆑

* [NO GBP]Inversely scale mechanical favor with STANDARD_CELL_CHARGE. (#82801)

## About The Pull Request
Makes the mechanical sect cell sacrifice favor adjustment inversely
scale with STANDARD_CELL_CHARGE. This reduces it by a factor of 1,000.
## Why It's Good For The Game
So they don't get 1,000 times the favor as intended from a cell.
## Changelog
🆑
fix: Fixes mechanical sect gaining 1,000 times the favor from a cell
sacrifice.
/🆑

* Fix all types of damage to the head causing brain damage (#82763)

## About The Pull Request

5 months ago when I separated this stuff out to its own proc I forgot a
damagetype check.

## Changelog

🆑 Melbert
fix: Only brute damage causes brain damage when applied to the forehead,
rather than all damage types
/🆑

* Converts ListInputModal to actually be a Modal | Adds ListInputWindow which uses it (#82792)

## About The Pull Request

If we say something is a Modal it should actually be a Modal

## Why It's Good For The Game

You can now use this system in other windows if you want.
Fixed the misnomer.

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>

* Higher capacity SMES variant for low maintenance areas; miners can access their maintenance area on mining base, gulag no longer saps all power from the main base (#82713)

## About The Pull Request

Creates a higher capacity version of the SMES unit that spawns in with
super capacity cells, as well as a full version. Places the full version
into all the AI sats (which all have independent grids for the most
part), some remote space ruins and the mining base. These SMES units are
intended for areas where players aren't expected or cannot reasonably be
expected to constantly monitor power usage within the length of a
standard round.

Miners can access their power stations, telecommunications box and
atmospheric station on the mining base. They're really the only people
who care, after all.

The gulag's SMES (also now upgraded) no longer saps power from the main
base due to having its input terminal rigged to the main base power
grid, and thus demanding all power from the grid greedily. To revert
this in-game is a single power cable placed back east of the SMES unit.

## Why It's Good For The Game

The power changes made some of the once largely low-maintenance areas
much more likely to run out of power more quickly than you would expect.
These aren't areas expected to be maintained or monitored by engineering
(probably because they're not easily accessed), and they're just kind of
troublesome to deal with on a round-to-round basis.

Mining had this problem triple-fold. It had significant drain with no
convenient method of installing power generation at all, miners couldn't
access what power generation there was without using their 'skeleton
key' to open the way (only engineers could, and they aren't expected to
come down to mining at all), and even then, there was the gulag SMES
just eating all the power anyway. I'm pretty sure that SMES unit was the
biggest culprit of them all, but I think this conveniently future proofs
these issues for the time being.

## Changelog
🆑
add: Adds a higher capacity SMES unit to lower maintenance areas and
maps.
fix: Miners can actually access and fix their engineering issues on the
lavaland base via the engineering section of the base.
fix: The gulag SMES unit is no longer needlessly draining the entire
power grid of the main mining base.
/🆑

* Revert "Higher capacity SMES variant for low maintenance areas; miners can access their maintenance area on mining base, gulag no longer saps all power from the main base (#82713)"

This reverts commit af8d69f889.

* New views for mc controller ui (#82769)

## About The Pull Request
Lots of qol improvements for controller tgui

- Auto sort order based on type
- Bar view for items in deciseconds

<details>
<summary>vids</summary>

in a live round

![image](https://github.com/tgstation/tgstation/assets/42397676/52fd4677-763a-4ea9-965a-386ab59cd353)

modals

![Tzp0i9yfwP](https://github.com/tgstation/tgstation/assets/42397676/06ca6d9e-c528-4f02-8dbb-d302d2380396)

bar view with defaults for decisecond sorts

![2X6IqQIE7c](https://github.com/tgstation/tgstation/assets/42397676/88b80fd4-1116-4ba1-aa0b-6bac56827e6b)

</details>

## Why It's Good For The Game
Better admin tools
## Changelog
🆑
add: Admin tools buffed, check the Controller Overview
add: Controller Overview moved to debug tab
/🆑

* Revert "Converts ListInputModal to actually be a Modal | Adds ListInputWindow which uses it" (#82841)

Reverts tgstation/tgstation#82792

* [no gbp] Fixes cargo express console (#82843)

## About The Pull Request
Cargo express console does not send amounts by name

Fixed and touched up the express console a bit
![Screenshot 2024-04-22
195254](https://github.com/tgstation/tgstation/assets/42397676/c099cdc0-6b4d-4348-9b5b-f9d4cc325d0b)
## Why It's Good For The Game
Bug fix (no issue yet)
## Changelog
🆑
fix: Cargo express console fixed: No more bluescreen
/🆑

* Plumbing & chem reaction chamber patches (#82781)

## About The Pull Request
1. Both Plumbing & Chem reaction chamber will use the beakers
`heat_capacity()` proc instead of the formulae `SPECIFIC_HEAT_DEFAULT *
reagents.total_volume`. This yields the exact same results as before but
will mean in the future if individual reagents heat capacities are
changed then the heating effects will be accurately reflected here. It
also uses that amount of power for heating
2. Plumbing rection chamber will not use energy when its either
'emptying' or when no reagents are present in its internal buffer
3. You can hit the chem reaction chamber with items like beakers,
screwdrivers, crowbars and what not

## Changelog
🆑
fix: plumbing & chem reaction chamber heating effects accurately reflect
the beakers heat capacity & power usage
fix: plumbing reaction will not use power when emptying or when there
are no reagents to heat
fix: you can hit the chem reaction chamber with items like beakers,
screwdrivers, crowbars and what not
/🆑

* fixes brimdemon AI (and some other mobs) (#82831)

## About The Pull Request
i noticed brimdemons werent attacking when i tried investigating the
problem i saw it extends to other mobs

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

## Changelog
🆑
fix: brimdemons (and other mobs) will act normally
/🆑

* Implements data systems (#82816)

## About The Pull Request
Subsystems currently come in two different flavors:
1. Systems that process at intervals with the master controller
2. Global data containers that do not fire

And I think they should be split up...


This moves 4 non firing, non init subsytems -> datasystem

## Why It's Good For The Game
Clarity in code

* fixes ammo_bench data system

* [no gbp] express console: Bluescreen on cart (#82844)

## About The Pull Request
Truly,
## Why It's Good For The Game
Bug fix before you even issue report it

* Adds Medieval Pirates (and small assault_pod change) (#82392)

## About The Pull Request

(short, slightly outdated video compilation of the pirates)
https://youtu.be/j9BNFzcUSjc

Adds the **MEDIEVAL WARMONGERS** pirate gang, these pirates are focused
on causing chaos directly on the station with the use of melee weaponry
and swarming tactics.
they are not very smart when it comes to using technology, so they crash
in the station in an attempt to dock.

the pirates spawn with the NOGUN trait as they have never used guns
before but have access to dashing and the unbreakable component(small
heal burst upon reaching crit).
Warlord spawns with a better version of hulk(isnt removed upon crit and
can still do stuff while critted) and gigantism mutation by default
because ~~Chad Maximus~~ the other pirates require someone to run to
when stuff like flashbangs, batons or lasers are present. The warlord
spawns with a boarding axe which is a better axe that is good at
destroying things and a meat hook. **there's a total of 5 pirates.**

the pirate shuttle has:
- thermite barrel and 3 large beakers
- single weak claymore
- 3 extra military spears
- 3 kite shields
- 3 heavy bolas
- 4 regular bolas
- a stack of wood
- 2 stacks of mourning poultice (15 uses each)
- one burn medkit

**shuttle was made by striders18, big thanks to him**

![image](https://github.com/tgstation/tgstation/assets/114047053/766d0b96-4487-47d3-b524-70d811ce4d73)


things added:

- the new pirate gang
- a gamberson jumpsuit
- crude armor (good melee and wound protection but lacks on the rest)
- warlord armor (extreme protection at the cost of slowdown)
- a shortsword(bootleg claymore with 30 block chance and goes on belt
instead of back)
- military spear (better at throwing, better wounding, deals blunt
wounds instead of sharp)
- axe with better damage and demolition mod for the warlord
- a var to specify the name of the landing zone destination for the
assaultpod
- an assault pod targeting device item for the medieval shuttle
- a thermite barrel
- kite shields
- new hulk variant that doesnt go away when crit and has tenacity
## Why It's Good For The Game
I always liked the chaotic nature of the russian bounty hunters that
would come from their extra numbers and lack of tools. i thought
something of a similar idea on pirates would be good, a very direct and
scary militia rushing in with sword and faith would create some awesome
scenarios

## Changelog
🆑
add: New heavy weight pirates, medieval warmongers
add: Adds military spear, shortsword, boarding axe, kite shields
add: Adds warlord and crude armor
add: Adds medieval shuttle (made by striders18)
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>

* fix for pirate suit

* Adds sorting options and a search bar to the crew monitor (#82732)

## About The Pull Request
This PR adds buttons in the crew monitor UI to sort by name, position,
or vitals, as well as a search bar for searching for specific people.
For vitals, people are sorted first by life status (living, crit, dead,
etc), then by damage. Also TS-ifies the UI.



https://github.com/tgstation/tgstation/assets/42454181/a7c0c262-8ea7-4e9f-8de6-6b9cf7481b23


## Why It's Good For The Game
Currently, finding a specific person, or a person in a specific place,
is a pain in the butt with the crew monitor. You have to go through an
unsorted list of people grouped only by department. Don't know the
person's job? Tough luck, you're going down the list one by one. It is
not at all a friendly user experience. With this PR, it becomes a
breeze, and makes the crew monitor much easier to use.
## Changelog
🆑
add: The crew monitor now has sorting options and a search bar.
/🆑

* Accessing Datasystem Manager from MC controller panel (#82848)

* [NO GBP] fixes issues with human rendering fixes (#82852)

## About The Pull Request
fixes #82838, forgot to add the attack_self there
fixes #82869
fixes the atmos hardhat not using flags_inv and transparent_protection
correctly (you could pull off someones glasses through it for example
makes modsuits use the new rendering stuff
fixes rendering stuff not working correctly with adjustable clothing
fixes quick equip dropping the item if you cant equip it

## Why It's Good For The Game
waow its awesome

## Changelog
🆑
fix: you can no longer take off someones glasses or mask through atmos
hardhat
fix: once you adjust a welding helmet or something it no longer makes
your cigarette or sunglasses invisible
fix: welding gas mask works once again
fix: quick equips dont drop the item if you cant equip it
/🆑

* fixes erp slots

* Redoes how appearance VV works because it scares me (#82851)

* [NO GBP] Critical fixes for cyborg omnitools (#82825)

## About The Pull Request
Fixes several critical fixes for cyborg omnitools, surgical omnitools in
peculiar. Which is:
1. bonesetter omnitool can do compound fracture surgery now
2. omnitool butchering not properly disabled works (why didn't that
runtime. fucking dreammaker)
3. omnitool surgery_initiator not properly disabled
4. cautery in offhand not working

Fixes #82805
Fixes #82868

Honestly I have now regretted for doing this kind of implementation at
the start. with how shoddily coded it is.
Planning to refactor cyborg omnitools, admin omnitool and ayys omnitool
(all have the same base of implementation) to be less snowflakey. but
that's for the future. and will take some time. This is a bandaid fix
for now
## Why It's Good For The Game
this is cbt
## Changelog
🆑
fix: fixed cyborg bonesetter not working for compound fractures
fix: butchering not disabling in cyborg omnitool
fix: fixes a bug where if you select the omnitool it would be stuck in
surgery initiator mode
fix: cautery in off hand for cyborg omnitools not working
/🆑

* fixes ai controllers hard deletes (#82861)

## About The Pull Request

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

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

## Changelog
🆑
/🆑

* [no gbp] actually fixes bot access (#82809)

## About The Pull Request
real fix to bots having AA. also i forgot to address simple bots in my
previous attempt so this fixes them too

## Why It's Good For The Game
fixes bots having AA 

## Changelog
🆑
fix: all bots have their normal accesses restored
/🆑

* [no gbp] Adds silicon interaction flags (#82822)

## About The Pull Request
A few items with special silicon interactions did not have the proper
flags to permit their use at distance (airlocks for instance)
## Why It's Good For The Game
Fixes #82800
## Changelog
🆑
fix: Restored silicon alt-clicking capability
/🆑

* Monkey eyes fix and noticable organ display refactor; AI monkeys no longer catatonic (#82669)

## About The Pull Request

It turns out monkeys being catatonic got broken 2 years ago in a PR that
was meant to fix something else; also, it turns out monkeys are supposed
to have primal eyes when turned into humans, and that got broken too. I
fixed both of those things, and while I was at it I did a refactor to
make it easier to give noticable organs (or anything else that you'd
want correct pronoun and verb tenses) easier to implement.

1) AI controlled mobs now properly display their noticable organs when
appropriate
2) Added some macros and a helper proc for replacing appropriate
pronouns and verb tenses in text
3) The noticable organ HTML is no longer broken, so you can pass text
with spans into it, if you want the text to be pretty or big or whatever
4) Monkeys are no longer catatonic if they have an active AI controller;
this goes for any carbon actually but I think monkeys are the only one
with AI controllers at the moment
## Why It's Good For The Game

Fixes the logic for displaying organs on AI controller mobs (currently
monkeys)
Makes it easier to add these kind of organs for carbons, AI controlled
or not, in the future

Look! An actual use-case for split editor:

![image](https://github.com/tgstation/tgstation/assets/49173900/8cd0d69e-8091-4431-9418-6bd29e1713b5)
## Changelog

Humanized monkeys now have their primal eyes again; monkeys with active
AI are no longer catatonic.
🆑 Bisar
fix: AI controlled monkeys are no longer catatonic, and they have primal
eyes again when turned into humans.
spellcheck: Noticable organs now have more modular grammar, and their
current grammar is fixed.
refactor: Refactored the code for displaying the messages for noticable
organs.
config: Added a documented define of all our pronouns
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>

* DNA Infusion Refactor: Separates DNA Infusion Behavior from DNA Infuser (#82829)

## About The Pull Request

- infuser entries global is now an assoc list type -> singleton. makes
it easier to pick specific entries as needed
- separated infusion behavior onto both movable level (for machine
occupants and things that can potentially be infused) and human level
(for the actual infusion into a human)

- [x] tested

## Why It's Good For The Game

Upcoming plans is to fix up maintenance sect's organ replacement system
that just so happens to work a lot like how infusions do with actual
infusion mechanics, and that requires this prerequisite. In general
outside of that vision I see a lot of potential in alternate infusion
sources, from wherever they may be.

## Changelog
no player side changes, this is a refactor

---------

Co-authored-by: Thunder12345 <Thunder12345@users.noreply.github.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
Co-authored-by: starrm4nn <139372157+starrm4nn@users.noreply.github.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Bm0n <92271472+Bm0n@users.noreply.github.com>
Co-authored-by: Yaroslav Nurkov <78199449+AnywayFarus@users.noreply.github.com>
Co-authored-by: Pink <sightld2@gmail.com>
Co-authored-by: Sadboysuss <96586172+Sadboysuss@users.noreply.github.com>
Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
Co-authored-by: Name <w4rd3nn@gmail.com>
Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
Co-authored-by: Singul0 <127663818+Singul0@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: Iajret <8430839+Iajret@users.noreply.github.com>
Co-authored-by: FlufflesTheDog <piecopresident@gmail.com>
Co-authored-by: Jordan Dominion <Cyberboss@users.noreply.github.com>
Co-authored-by: larentoun <31931237+larentoun@users.noreply.github.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
Co-authored-by: EvilDragonfiend <87972842+EvilDragonfiend@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
Co-authored-by: EricZilla <81941674+EricZilla@users.noreply.github.com>
Co-authored-by: Helg2 <93882977+Helg2@users.noreply.github.com>
Co-authored-by: Pickle-Coding <58013024+Pickle-Coding@users.noreply.github.com>
Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: uaioy <114047053+uaioy@users.noreply.github.com>
Co-authored-by: Nick <42454181+Momo8289@users.noreply.github.com>
Co-authored-by: Joshua Kidder <49173900+Metekillot@users.noreply.github.com>
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
2024-04-29 21:15:33 +02:00
LemonInTheDark
1e78db8471 Refactors how basic ais do their success/failures (#82643) 2024-04-22 05:23:04 -07:00
SkyratBot
34abde5249 [MIRROR] Instrument editor now uses TGUI (#26889)
* Instrument editor now uses TGUI (#81923)

## About The Pull Request

Instruments now use TGUI as their editor which is pretty cool.
It's mostly a 1:1 remake of the HTML UI except I did make a change to
make the playback options a little more compact, leaving some more space
for the editor before you have to scroll, and some other minor things
that were made to make the UI hopefully nicer to look at and mess with.

When there's a song to play - While playing, Repeat section can't be
edited

![image](https://github.com/tgstation/tgstation/assets/53777086/33f21ca3-98d8-4147-83e7-74e7611463e6)

Help section and UI when there's no song put in

![image](https://github.com/tgstation/tgstation/assets/53777086/babd30ab-9551-448b-9fe6-24e0b0535caf)

## Why It's Good For The Game

It is yet another step in finishing up
https://hackmd.io/XLt5MoRvRxuhFbwtk4VAUA?view
Instruments especially were in a poor spot because they didn't respect
things like ``IN_USE`` to not refresh if it's not the "UI" you are on,
and such.

## Changelog

🆑
refactor: Instruments now use TGUI.
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>

* Instrument editor now uses TGUI

---------

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
2024-03-15 13:42:52 -04:00
John Willard
bd8c1aebff Instrument editor now uses TGUI (#81923)
## About The Pull Request

Instruments now use TGUI as their editor which is pretty cool.
It's mostly a 1:1 remake of the HTML UI except I did make a change to
make the playback options a little more compact, leaving some more space
for the editor before you have to scroll, and some other minor things
that were made to make the UI hopefully nicer to look at and mess with.

When there's a song to play - While playing, Repeat section can't be
edited

![image](https://github.com/tgstation/tgstation/assets/53777086/33f21ca3-98d8-4147-83e7-74e7611463e6)

Help section and UI when there's no song put in

![image](https://github.com/tgstation/tgstation/assets/53777086/babd30ab-9551-448b-9fe6-24e0b0535caf)

## Why It's Good For The Game

It is yet another step in finishing up
https://hackmd.io/XLt5MoRvRxuhFbwtk4VAUA?view
Instruments especially were in a poor spot because they didn't respect
things like ``IN_USE`` to not refresh if it's not the "UI" you are on,
and such.

## Changelog

🆑
refactor: Instruments now use TGUI.
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-03-14 18:43:05 +01:00
SkyratBot
9cea942da4 [MIRROR] Fixes a spurious runtime in AI code (#26356)
* Fixes a spurious runtime in AI code (#81253)

## About The Pull Request

Tin.

![300618628-255ded6c-09c8-4c5b-8557-2f8f2dfcc821](https://github.com/tgstation/tgstation/assets/13398309/4c30ab2d-cd15-411d-92fc-470effef8af3)

No more of this. It's been annoying downstream for the past few days, so
here's the fix. `find_this_thing()` should not be getting called when
`controller.pawn` is qdeleted so I just moved that check up a couple
lines.

## Why It's Good For The Game

Makes CI functional again. Tested downstream with 5 CI runs, the runtime
did not occur in any of them where it was happening just about every run
previously.

## Changelog

🆑
fix: fixes a runtime in AI search_tactic
/🆑

* Fixes a spurious runtime in AI code

---------

Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2024-02-05 21:19:37 +01:00
Bloop
6a64a1a645 Fixes a spurious runtime in AI code (#81253)
## About The Pull Request

Tin.


![300618628-255ded6c-09c8-4c5b-8557-2f8f2dfcc821](https://github.com/tgstation/tgstation/assets/13398309/4c30ab2d-cd15-411d-92fc-470effef8af3)

No more of this. It's been annoying downstream for the past few days, so
here's the fix. `find_this_thing()` should not be getting called when
`controller.pawn` is qdeleted so I just moved that check up a couple
lines.

## Why It's Good For The Game

Makes CI functional again. Tested downstream with 5 CI runs, the runtime
did not occur in any of them where it was happening just about every run
previously.

## Changelog

🆑
fix: fixes a runtime in AI search_tactic
/🆑
2024-02-05 12:15:49 -05:00
SkyratBot
7f252e6e94 [MIRROR] [no gbp] fixes ai controller runtime (#26278)
* [no gbp] fixes ai controller runtime (#81134)

## About The Pull Request
fixes the flaky error that would happen in cleanbot controllers. i
discovered thru the profiler that a proc i was using to stop tracking
unreachable targets and caching them to a blacklist in selectbehavior
had a bit of a high real time cost, so if the mob got deleted midway
through for any reason would cause a runtime error. ive moved this proc
off selectbehavior and im instead letting the move loop cache this
target into the blacklist if it reaches the max pathing attempts
## Why It's Good For The Game
fixes a runtime that sometimes happens in ai controllers

## Changelog
🆑
fix: fixes a runtime that sometimes happens in ai controllers
/🆑

* [no gbp] fixes ai controller runtime

---------

Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
2024-01-29 02:34:58 +01:00
Ben10Omintrix
dd5234b401 [no gbp] fixes ai controller runtime (#81134)
## About The Pull Request
fixes the flaky error that would happen in cleanbot controllers. i
discovered thru the profiler that a proc i was using to stop tracking
unreachable targets and caching them to a blacklist in selectbehavior
had a bit of a high real time cost, so if the mob got deleted midway
through for any reason would cause a runtime error. ive moved this proc
off selectbehavior and im instead letting the move loop cache this
target into the blacklist if it reaches the max pathing attempts
## Why It's Good For The Game
fixes a runtime that sometimes happens in ai controllers

## Changelog
🆑
fix: fixes a runtime that sometimes happens in ai controllers
/🆑
2024-01-28 23:53:05 +01:00
SkyratBot
09351396ec [MIRROR] Fixes AI behavior with breaking cuffs and resisting aggressive grabs [MDB IGNORE] (#25888)
* Fixes AI behavior with breaking cuffs and resisting aggressive grabs (#80328)

## About The Pull Request

Makes it so that ai's recognize they're in a do_after after resisting,
preventing them from processing and interrupting the do_after while
they're in a condition that necessitates it. If it gets interrupted then
they'll process as normal, or if they finish they'll be free.
## Why It's Good For The Game

Monkeys can now resist things that they should've been, such as
aggressive grabs or cuffs, instead of having their ai completely freeze
when they're cuffed.
## Changelog
🆑
fix: ai can now tell if it is in a do_after for resisting and will not
interrupt it. monkeys also now don't freeze up when aggressively grabbed
and will resist out of those and cuffs.
/🆑

* Fixes AI behavior with breaking cuffs and resisting aggressive grabs

---------

Co-authored-by: Diamond_ <novadiamonddigger@gmail.com>
2023-12-28 08:09:15 -08:00
Diamond_
37cd61c0fa Fixes AI behavior with breaking cuffs and resisting aggressive grabs (#80328)
## About The Pull Request

Makes it so that ai's recognize they're in a do_after after resisting,
preventing them from processing and interrupting the do_after while
they're in a condition that necessitates it. If it gets interrupted then
they'll process as normal, or if they finish they'll be free.
## Why It's Good For The Game

Monkeys can now resist things that they should've been, such as
aggressive grabs or cuffs, instead of having their ai completely freeze
when they're cuffed.
## Changelog
🆑
fix: ai can now tell if it is in a do_after for resisting and will not
interrupt it. monkeys also now don't freeze up when aggressively grabbed
and will resist out of those and cuffs.
/🆑
2023-12-28 15:43:19 +01:00
SkyratBot
b79167c173 [MIRROR] Organ movement refactor *Un-nullspaces your organs* [MDB IGNORE] (#25530)
* Organ movement refactor *Un-nullspaces your organs*

* Fix conflicts

I checked the conflicts on the two weird conflicts and no previous TG pr touches them i assume its just github being github because those shoulden't be conflicts *shrug

* Fix #1 uhh...this is going to be a long one

* Fix #2 Modular Movement Flags

* Fix #3 It builds now

* Fix #4 Oh god it builds now, I missed some things

* Fix #5 No more Runtimesplosion Now time for Synths

* Update nightmare_organs.dm

* on_mob_insert

* https://github.com/Skyrat-SS13/Skyrat-tg/pull/25664

* https://github.com/Skyrat-SS13/Skyrat-tg/pull/25685

* https://github.com/Skyrat-SS13/Skyrat-tg/pull/25582

* https://github.com/Skyrat-SS13/Skyrat-tg/pull/25686

* bro the fucking brain does not go into the chest.

* seriously? undocumented code causing shit. if it breaks ghouls, so be it.

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Co-authored-by: SomeRandomOwl <somerandomowl@ratchtnet.com>
Co-authored-by: SomeRandomOwl <2568378+SomeRandomOwl@users.noreply.github.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
2023-12-24 19:06:09 +00:00
SkyratBot
2ed6af479c [MIRROR] [NO GBP] Fixes even more AI related CI runtimes [MDB IGNORE] (#25682)
* [NO GBP] Fixes even more AI related CI runtimes (#80262)

## About The Pull Request

Consider this a continuation of
https://github.com/tgstation/tgstation/pull/80202

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

~~It seems I missed a few.~~

Edit: Modified per request to handle this more broadly. If a pawn gets
`qdel`'d, the ai controller should be set to off and get removed from
the list of active controllers, and all their actions should be
canceled.

Also adds some qdeleted checks to `finish_action()`, which can still run
after the pawn gets qdeleted as part of the `CancelActions()` chain.

## Why It's Good For The Game

Less spurious CI failures.

## Changelog

Nothing player facing really.

* [NO GBP] Fixes even more AI related CI runtimes

* Update _ai_controller.dm

---------

Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-12-17 15:00:53 +00:00
Bloop
4a989723e1 [NO GBP] Fixes even more AI related CI runtimes (#80262)
## About The Pull Request

Consider this a continuation of
https://github.com/tgstation/tgstation/pull/80202


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

~~It seems I missed a few.~~

Edit: Modified per request to handle this more broadly. If a pawn gets
`qdel`'d, the ai controller should be set to off and get removed from
the list of active controllers, and all their actions should be
canceled.

Also adds some qdeleted checks to `finish_action()`, which can still run
after the pawn gets qdeleted as part of the `CancelActions()` chain.

## Why It's Good For The Game

Less spurious CI failures.

## Changelog

Nothing player facing really.
2023-12-17 05:04:28 -05:00
SkyratBot
c2520730a5 [MIRROR] Fixes a bunch of AI related CI runtimes [MDB IGNORE] (#25552)
* Fixes a bunch of AI related CI runtimes (#80202)

## About The Pull Request

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

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

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

</details>

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

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

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

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

---

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

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

## Why It's Good For The Game

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

## Changelog

🆑
fix: fixes some AI runtimes that were caused by the pawn becoming null
/🆑

* Fixes a bunch of AI related CI runtimes

---------

Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-12-10 20:49:07 -05:00
Bloop
18047d74fe Fixes a bunch of AI related CI runtimes (#80202)
## About The Pull Request

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


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


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

</details>

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

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

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

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

---

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

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

## Why It's Good For The Game

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

## Changelog

🆑
fix: fixes some AI runtimes that were caused by the pawn becoming null
/🆑
2023-12-10 18:22:56 -07:00
Time-Green
54ab1e3936 Organ movement refactor *Un-nullspaces your organs* (#79687)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

closes #53931, #70916, #53931

## About The Pull Request

Organs were previously stored in nullspace. Now they are stored in their
prospective bodyparts. Bodyparts are now stored in the mob.

I've also had to refactor a lot of code concerning organ movement.
Previously, organs were only moved into bodyparts once the bodyparts
were removed. To accomodate this change, two major distinctions have
been made:

**Bodypart removal/insertion**
Called only when an organ is taken out of a bodypart. Bodypart overlays,
damage modifiers or other changes that should affect a bodypart itself
goes here.

**Mob insertion/removal**
Called when an organ is removed from a mob. This can either be directly,
by taking the organ out of a mob, or by removing the bodypart that
contains the organ. This lets you add and remove organ effects safely
without having to worry about the bodypart.

Now that we controle the movement of bodyparts and organs, we can fuck
around with them more. Summoning someones head or chest or heart will
actually kill them now (and quite violently I must say (chest summoning
gibs lol)).


https://github.com/tgstation/tgstation/assets/7501474/5efc9dd3-cfd5-4ce4-b70f-d0d74894626e

I´ve also added a unit test that violently tears apart and reconstructs
a person in different ways to see if they get put toghether the right
way

This will definitely need a testmerge. I've done a lot of testing to
make sure interactions work, but more niche stuff or my own incompetence
can always slip through.

## Why It's Good For The Game

<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->

A lot of organ work is quite restricted. You can't C4 someones heart,
you cant summon their organs and a lot of exceptions have to be made to
keep organs in nullspace. This lets organs (and bodyparts) play more
nicely with the rest of the game. This also makes it a lot easier to
move away from extorgans since a lot of their unique movement code has
been removed and or generalized.

I don't like making PRs of this size (I'm so sorry reviewers), but I was
in a unique position to replace the entire system in a way I couldn't
have done conveniently in multiple PRs

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
refactor: Your organs are now inside your body. Please report any issues
with bodypart and organ movement, including exotic organ, on github and
scream at me
fix: Cases of unexpected organ movement, such as teleporting bodyparts
and organs with spells, now invokes a proper reaction (usually violent
death)
runtime: Fixes HARS runtiming on activation/deactivation
fix: Fixes lag when species swapping
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
2023-12-09 17:50:46 +00:00
SkyratBot
7dd661f342 [MIRROR] basic cats and mini kitchen helpers [MDB IGNORE] (#25330)
* basic cats and mini kitchen helpers (#79800)

## About The Pull Request
this pr transforms cats into basic pets! cats now have some new
behavior. they can carry fish and hunted mice in their mouths to deliver
it to kittens, and kittens will eat them.

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

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

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

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

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

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

## Changelog
🆑
refactor: cats are now basic pets. please report any bugs.
add: the cake cat and bread cat can now help the chef around in the
kitchen
/🆑

* basic cats and mini kitchen helpers

* Modular

---------

Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-12-03 00:37:58 -05:00
Ben10Omintrix
ce6f2724cd basic cats and mini kitchen helpers (#79800)
## About The Pull Request
this pr transforms cats into basic pets! cats now have some new
behavior. they can carry fish and hunted mice in their mouths to deliver
it to kittens, and kittens will eat them.


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

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

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


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

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

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

## Changelog
🆑
refactor: cats are now basic pets. please report any bugs.
add: the cake cat and bread cat can now help the chef around in the
kitchen
/🆑
2023-11-28 21:51:37 -07:00
SkyratBot
6627b1a9c1 [MIRROR] Refactors Parrots into Basic Mobs (ft. Ben10Omintrix/Kobsamobsa) [MDB IGNORE] (#25100)
* Refactors Parrots into Basic Mobs (ft. Ben10Omintrix/Kobsamobsa)

* UpdatePaths

* Modular, cleanup, porting parrot commands into the new system

* makes poly slightly less of a dick

* Update parrot.dm

* Update parrot.dm

* Update tgstation.dme

* Revert "Update tgstation.dme"

This reverts commit a8b40c4aba524c271db02c271089664649dea1eb.

---------

Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-11-20 09:57:34 -05:00
san7890
b251b9dbb0 Refactors Parrots into Basic Mobs (ft. Ben10Omintrix/Kobsamobsa) (#79762) 2023-11-18 19:24:32 -08:00
SkyratBot
aff60235a2 [MIRROR] improve find_and_set/in_list behavior [MDB IGNORE] (#24995)
* improve find_and_set/in_list behavior (#79614)

## About The Pull Request
improves the find_and_set behavior a bit. this is after and before
observing 5 gorillas for 10 minutes

![image](https://github.com/tgstation/tgstation/assets/138636438/d8f5cdcb-71bd-41bd-a069-10b0367224ec)

![image](https://github.com/tgstation/tgstation/assets/138636438/1fd70fea-5769-4021-95ec-038137ce7423)

## Why It's Good For The Game
improves the find_and_set/in_list behavior

## Changelog
🆑
not player facing
/🆑

* improve find_and_set/in_list behavior

---------

Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
2023-11-13 23:04:34 -05:00
Ben10Omintrix
e8259f1819 improve find_and_set/in_list behavior (#79614)
## About The Pull Request
improves the find_and_set behavior a bit. this is after and before
observing 5 gorillas for 10 minutes

![image](https://github.com/tgstation/tgstation/assets/138636438/d8f5cdcb-71bd-41bd-a069-10b0367224ec)

![image](https://github.com/tgstation/tgstation/assets/138636438/1fd70fea-5769-4021-95ec-038137ce7423)



## Why It's Good For The Game
improves the find_and_set/in_list behavior

## Changelog
🆑
not player facing
/🆑
2023-11-13 18:05:58 -07:00
SkyratBot
ddbe19d806 [MIRROR] [No GBP] Traders use Pick() to select their first customer [MDB IGNORE] (#24819)
* [No GBP] Traders use Pick() to select their first customer (#79455)

## About The Pull Request

In my trader PR, I made
`/datum/ai_behavior/find_and_set/conscious_person` return the first
person the trader found, since all they had to know was that they found
someone. However, I realized that I made the jumpscare subtype actually
move towards the target, meaning they would always move to the first
target they found in their vision range. This PR makes them use Pick().

## Why It's Good For The Game

Its good if an AI randomly picks from a search list instead of returning
the first one.

## Changelog

Nothing player facing

* [No GBP] Traders use Pick() to select their first customer

---------

Co-authored-by: Profakos <profakos@gmail.com>
2023-11-06 10:36:33 -05:00
Profakos
ebc8ac7dc2 [No GBP] Traders use Pick() to select their first customer (#79455)
## About The Pull Request

In my trader PR, I made
`/datum/ai_behavior/find_and_set/conscious_person` return the first
person the trader found, since all they had to know was that they found
someone. However, I realized that I made the jumpscare subtype actually
move towards the target, meaning they would always move to the first
target they found in their vision range. This PR makes them use Pick().

## Why It's Good For The Game

Its good if an AI randomly picks from a search list instead of returning
the first one.

## Changelog

Nothing player facing
2023-11-06 15:34:00 +01: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
SkyratBot
fa31acc3ec [MIRROR] Fixes a runtime with AI targeting code, refactors faction checking to be at the atom/movable level [MDB IGNORE] (#24386)
* Fixes a runtime with AI targeting code, refactors faction checking to be at the atom/movable level (#78803)

## About The Pull Request

Saw this in CI.

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

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

## Why It's Good For The Game

Fixes an issue with basic mob AI targeting and turrets.

## Changelog

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

---------

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

* Fixes a runtime with AI targeting code, refactors faction checking to be at the atom/movable level

* Modular updates

---------

Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
2023-10-16 21:41:24 -04:00
Bloop
847514310d Fixes a runtime with AI targeting code, refactors faction checking to be at the atom/movable level (#78803)
## About The Pull Request

Saw this in CI.


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

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

## Why It's Good For The Game

Fixes an issue with basic mob AI targeting and turrets.

## Changelog

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

---------

Co-authored-by: san7890 <the@san7890.com>
2023-10-16 17:22:44 -06:00
SkyratBot
0d5a0c0bb9 [MIRROR] Goats will randomly attack you [MDB IGNORE] (#24312)
* Goats will randomly attack you (#78930)

## About The Pull Request

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

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

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

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

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

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

## Changelog

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

---------

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

* Goats will randomly attack you

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: san7890 <the@ san7890.com>
2023-10-13 00:30:01 -07:00
Jacquerel
41699c260e Goats will randomly attack you (#78930)
## About The Pull Request

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

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

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

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

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

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

## Changelog

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

---------

Co-authored-by: san7890 <the@san7890.com>
2023-10-13 00:27:21 -06:00
SkyratBot
37a8f73ae3 [MIRROR] Basic Legion & Hivelord [MDB IGNORE] (#23964)
* Basic Legion & Hivelord

* Update modular + fix diffs

* Fixing diffs

* More diffs

* Adds an AI behavior to replace the 'wander = 0' varedit for the hivelord gate guardians

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-09-27 22:30:02 -04:00
Jacquerel
f861532d24 Basic Legion & Hivelord (#78624) 2023-09-27 18:41:07 -04:00
SkyratBot
f5781b2aa1 [MIRROR] Add new sounds for animals, basic animals make sound on audible emote [MDB IGNORE] (#23917)
* Add new sounds for animals, basic animals make sound on audible emote (#78499)

## About The Pull Why It's Good For The Game Request
More sound immersion. Also just makes sense for sounds to play when an
animal is both saying something and using an audible emote.

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

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

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

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

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

Co-authored-by: tattle <article.disaster@ gmail.com>

* Add new sounds for animals, basic animals make sound on audible emote

* Sound path changes

---------

Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
Co-authored-by: tattle <article.disaster@ gmail.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-09-27 02:41:08 -04:00
tattle
2a73427ee0 Add new sounds for animals, basic animals make sound on audible emote (#78499)
## About The Pull Why It's Good For The Game Request
More sound immersion. Also just makes sense for sounds to play when an
animal is both saying something and using an audible emote.

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


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


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


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

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

Co-authored-by: tattle <article.disaster@gmail.com>
2023-09-25 15:55:16 -06:00
SkyratBot
7509292edd [MIRROR] Basic Mob Brimdemon [MDB IGNORE] (#23863)
* Basic Mob Brimdemon (#78424)

## About The Pull Request

Fixes #71330

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

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

## Why It's Good For The Game

Simple mobs must die

## Changelog

🆑
add: Brimdemon corpses release an explosion shortly after death, just to
keep you on your toes.
refactor: Brimdemons now use the basic mob framework which (should)
improve their pathfinding somewhat. Please bug report any unusual
behaviour.
admin: The brimdemon's beam ability can be given to any mob, for your
Binding of Isaac event
/🆑

* Basic Mob Brimdemon

* Modular

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-09-23 03:52:28 -04:00
Jacquerel
b2ecd81be4 Basic Mob Brimdemon (#78424)
## About The Pull Request

Fixes #71330

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

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

## Why It's Good For The Game

Simple mobs must die

## Changelog

🆑
add: Brimdemon corpses release an explosion shortly after death, just to
keep you on your toes.
refactor: Brimdemons now use the basic mob framework which (should)
improve their pathfinding somewhat. Please bug report any unusual
behaviour.
admin: The brimdemon's beam ability can be given to any mob, for your
Binding of Isaac event
/🆑
2023-09-22 19:12:43 -06:00
SkyratBot
35e28a5b4a [MIRROR] Goliath basic mob [MDB IGNORE] (#22412)
* Goliath basic mob (#76754)

## 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:

![image](https://github.com/tgstation/tgstation/assets/7483112/90580403-d82f-4c29-b3e1-6c462e01edda)

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.
/🆑

* Goliath basic mob

* Update ash_rituals.dm

* fixes icon diff

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: Pinta <68373373+softcerv@users.noreply.github.com>
Co-authored-by: Giz <vinylspiders@gmail.com>
2023-07-14 03:10:50 +00:00
Jacquerel
16cecf864d Goliath basic mob (#76754)
## 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:

![image](https://github.com/tgstation/tgstation/assets/7483112/90580403-d82f-4c29-b3e1-6c462e01edda)

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.
/🆑
2023-07-12 18:52:02 -06:00
SkyratBot
2ba69d8b54 [MIRROR] basic mobs & co no longer indiscriminately perform close-range actions in the presence of obstacles. [MDB IGNORE] (#21521)
* basic mobs & co no longer indiscriminately perform close-range actions in the presence of obstacles. (#75687)

## About The Pull Request
Currently, we don't have any such thing as a general ai_behavior flag
for behaviors that need a check for if the current_movement_target is
within reach or not. We could fix it case by case by slapping a
`CanReach()` check in the `performBehavior()` definition of every
`ai_behavior` datum that warrants it, the general issue will keep
resurfacing as long as new behaviors are added to the game anyhow, while
there's a lot less copypasta involved easier to apply solution to
current and future instances of such issue.

Worth mentioning not all ai_behaviors with required_range of 1 have this
flag. Some are fairly innocuous, such as the follow command, some others
kind of handle it already in a more peculiar or complex way, which is
also an argument against making it a hardcoded heck for when the
required_range is 1 or 0.

This has been tested, though there are some rough edges and oddities
also unrelated to his PR that might have evaded scrutiny.

## Why It's Good For The Game
This should fix #74823, fix #69254, and fix #74713 (I guess? it could
have been phrased better).

## Changelog

🆑
fix: basic mobs & co no longer indiscriminately perform close-range
actions in the presence of obstacles such as directional windows between
them and their target.
fix: Doggos should look at you with longing eyes once again if you dare
pick up an edible they are trying to eat.
/🆑

* basic mobs & co no longer indiscriminately perform close-range actions in the presence of obstacles.

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-05-31 23:15:23 +12:00
Ghom
54dd3c864a basic mobs & co no longer indiscriminately perform close-range actions in the presence of obstacles. (#75687)
## About The Pull Request
Currently, we don't have any such thing as a general ai_behavior flag
for behaviors that need a check for if the current_movement_target is
within reach or not. We could fix it case by case by slapping a
`CanReach()` check in the `performBehavior()` definition of every
`ai_behavior` datum that warrants it, the general issue will keep
resurfacing as long as new behaviors are added to the game anyhow, while
there's a lot less copypasta involved easier to apply solution to
current and future instances of such issue.

Worth mentioning not all ai_behaviors with required_range of 1 have this
flag. Some are fairly innocuous, such as the follow command, some others
kind of handle it already in a more peculiar or complex way, which is
also an argument against making it a hardcoded heck for when the
required_range is 1 or 0.

This has been tested, though there are some rough edges and oddities
also unrelated to his PR that might have evaded scrutiny.

## Why It's Good For The Game
This should fix #74823, fix #69254, and fix #74713 (I guess? it could
have been phrased better).

## Changelog

🆑
fix: basic mobs & co no longer indiscriminately perform close-range
actions in the presence of obstacles such as directional windows between
them and their target.
fix: Doggos should look at you with longing eyes once again if you dare
pick up an edible they are trying to eat.
/🆑
2023-05-29 18:13:13 -06:00
SkyratBot
e6f66d3a4a [MIRROR] Experiment with replacing weakrefs in AI blackboard with deleting signals, ideally making it easier to work with and harder to cause hard deletes [MDB IGNORE] (#20719)
* Experiment with replacing weakrefs in AI blackboard with deleting signals, ideally making it easier to work with and harder to cause hard deletes (#74791)

## About The Pull Request

Replaces weakref usage in AI blackboards with deleting signals

All blackboard var setting must go through setters rather than directly

## Why It's Good For The Game

This both makes it a ton easier to develop AI for, and also makes it
harder for hard deletes to sneak in, as has been seen with recent 515
prs showing hard deletes in AI blackboards

(To quantify "making it easier to develop AI", I found multiple bugs in
existing AI code due to the usage of weakrefs.)

I'm looking for `@ Jacquerel` `@ tralezab` 's opinions on the matter, also
maybe `@ LemonInTheDark` if they're interested

## Changelog

🆑 Melbert
refactor: Mob ai refactored once again
/🆑

* Experiment with replacing weakrefs in AI blackboard with deleting signals, ideally making it easier to work with and harder to cause hard deletes

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-04-26 21:17:15 +01:00
MrMelbert
ed2f04f486 Experiment with replacing weakrefs in AI blackboard with deleting signals, ideally making it easier to work with and harder to cause hard deletes (#74791)
## About The Pull Request

Replaces weakref usage in AI blackboards with deleting signals

All blackboard var setting must go through setters rather than directly

## Why It's Good For The Game

This both makes it a ton easier to develop AI for, and also makes it
harder for hard deletes to sneak in, as has been seen with recent 515
prs showing hard deletes in AI blackboards

(To quantify "making it easier to develop AI", I found multiple bugs in
existing AI code due to the usage of weakrefs.)

I'm looking for `@Jacquerel` `@tralezab` 's opinions on the matter, also
maybe `@LemonInTheDark` if they're interested

## Changelog

🆑 Melbert
refactor: Mob ai refactored once again
/🆑
2023-04-23 17:07:17 -06:00
SkyratBot
7cd65785c5 [MIRROR] Farm Sounds DLC (basic mobs can make sounds when speaking) [MDB IGNORE] (#20704)
* Farm Sounds DLC (basic mobs can make sounds when speaking) (#74906)

## About The Pull Request

https://user-images.githubusercontent.com/66640614/233747544-aac153b9-a100-486c-9a7a-4a436b8303b8.mov

Cows, pigs, and sheep make noise when their AI makes them speak.
~~Also House Flipper Farm DLC came out but that's incidental.~~

## Why It's Good For The Game
It's funny, also more sound effects are fun. Gives basic mob creators
more customizability.

## Changelog
🆑 Tattle
qol: basicmobs can now make sounds when their speech is triggered
qol: pigs will now make sounds and emote on their own
sound: cows, pigs, and sheep have new sound effects!
/🆑

---------

Co-authored-by: tattle <article.disaster@ gmail.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>

* Farm Sounds DLC (basic mobs can make sounds when speaking)

---------

Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
Co-authored-by: tattle <article.disaster@ gmail.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
2023-04-23 00:08:24 +01:00
tattle
403506439f Farm Sounds DLC (basic mobs can make sounds when speaking) (#74906)
## About The Pull Request

https://user-images.githubusercontent.com/66640614/233747544-aac153b9-a100-486c-9a7a-4a436b8303b8.mov

Cows, pigs, and sheep make noise when their AI makes them speak. 
~~Also House Flipper Farm DLC came out but that's incidental.~~

## Why It's Good For The Game
It's funny, also more sound effects are fun. Gives basic mob creators
more customizability.

## Changelog
🆑 Tattle
qol: basicmobs can now make sounds when their speech is triggered
qol: pigs will now make sounds and emote on their own
sound: cows, pigs, and sheep have new sound effects!
/🆑

---------

Co-authored-by: tattle <article.disaster@gmail.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-04-22 15:33:48 -07:00
SkyratBot
9a594755f3 [MIRROR] Renames delta time to be a more obvious name [MDB IGNORE] (#20507)
* Renames delta time to be a more obvious name

* updates to our code

---------

Co-authored-by: oranges <email@oranges.net.nz>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
2023-04-12 20:45:43 +01:00
oranges
4c48966ff8 Renames delta time to be a more obvious name (#74654)
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'
2023-04-11 21:31:07 -07:00