Fixes a few drink container issues:
- The `/obj/item/reagent_containers/cup/glass/drinkingglass/filled`
subtypes runtimed whenever their reagents changed because of the strict
way that `/datum/component/takes_reagent_appearance` compares container
types.
- `/datum/component/takes_reagent_appearance` now allows for an
alternate type to check against `glass_style.required_container_type`
via a var called `base_container_type`. The filled glasses now set this
var to the main drinking glass type.
- As well, filled glasses didn't have their appearance set up to match
the corresponding glass style. Thus, the
`/obj/item/reagent_containers/cup/glass/drinkingglass/filled` type now
updates its appearance on initialization.
- Seperately, the small carton's appearance broke if you put a reagent
in that doesn't match a glass style, reverting to the "water_cup" icon
state which doesn't exist in the boxes.dmi file. This is because it was
a subtype of sillycup, but there is nothing gained as far as I can see
from that type relationship, so the small carton was repathed to
`/obj/item/reagent_containers/cup/glass/smallcarton`.
# Requires https://github.com/tgstation/tgstation/pull/72320
## About The Pull Request
https://user-images.githubusercontent.com/35135081/209700892-e54be6cf-d18c-4d12-acd1-e5eb46e9d82d.mp4https://user-images.githubusercontent.com/35135081/209700911-751b8a0e-d770-49fa-a6eb-ce50aa0fa670.mp4
---
Adds a system for tutorials that:
- Are contextually given
- Are not given again after completion
- Can optionally not trigger for anyone who first played before a
certain date
Uses this system for a tutorial for switching hands/dropping items. This
tutorial is triggered when you try to click on an item with another
item, and `afterattack` return FALSE. In order for this to work as
smoothly as possible, I'm going to open a separate PR that cleans up the
`afterattack` on everything to either return TRUE/FALSE.
## Why It's Good For The Game
SS13 is an extremely confusing game, being able to do tutorials in a
non-intrusive way (like a separate tutorial mode) is nice.
The system in place is going to be perfectly usable for introducing
mechanics to both fresh players and experienced players alike (such as
for future content).
## Changelog
🆑
qol: New players will now get a contextual tutorial for how to switch
hands and drop items.
/🆑
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
## About The Pull Request
Previous to this PR Ian (and any other dog) would swear allegiance and
kill (or at least growl aggressively) in the name of anyone who clicked
on them sufficiently with combat mode disabled, which is boring.
Now instead Ian wants Jumbo Dog Bones.
The HoP and Warden (as dog owners) both start with one of these mythical
items which otherwise can be ordered from cargo if you want to get into
a dog's heart, but they're not cheap.
You can also use regular bones of the kind you may harvest from Lavaland
animals or Skeleton crew members but these dogs are picky and so you
have significantly less chance of success than if you buy the premium
package.
Jumbo Dog Bones also fully heal dogs, as a bonus.
Additionally to this, I added functionality to the `tameable` component
to allow it to not delete itself upon successful taming, to preserve
Ian's ability to have more than one friend.
Additionally to that, I split the "stop being friends if you attack me"
behaviour into its own element rather than being part of the "start
being friends if you pet me a lot" one, so he could also keep doing
that.
And finally I added a new signal `COMSIG_ATOM_AFTER_ATTACKEDBY` which is
sent by an atom after an item attacks it (so if it manages to get
through the attack chain and is probably actually being used for an
attack) and registered to this in the `relay_attackers` element in place
of `COMSIG_PARENT_ATTACKBY`. This means that dogs can now recognise that
when you use a bone on them you are trying to feed them, not attack
them.
## Why It's Good For The Game
The loyalty of Ian and McGriff will now be most easily available to
their owners rather than anyone with access to their office.
... which doesn't really effect very much, I just think spam-clicking
Ian was boring as a solution and spending money is at least marginally
better.
Gives you something to spend money on if you want to befriend a dog, for
instance if you're a mailperson or felinid who is tired of getting
growled at by one. Or if you bought a dog from cargo.
Removes some unintuitive edge cases where a mob might get mad at you
doing something helpful to them.
## Changelog
🆑
balance: While Ian still enjoys being petted, his heart will now most
closely belong to anyone who gives him an expensive luxury dog bone.
code: Using an item which _can_ deal damage on a mob tracking hostile
actions (such as a dog) won't automatically be considered to be a
hostile action if you aren't actually hitting it with the item.
/🆑
## About The Pull Request
We shouldn't try to add the reagent container itself as an ingredient,
so let's ignore that. I believe the actual reagent adding is handled
well elsewhere, we just need to ignore the case here.
## Why It's Good For The Game
Fixes#72270
Confusing user feedback is never good.
## Changelog
🆑
fix: You should now no longer get a confusing message whenever you try
to add flour from a flour sack into a bowl.
/🆑
Co-authored-by: Time-Green <timkoster1@hotmail.com>
Necessary for #72292 to work effectively, and probably not very useful
out of that context. Split out of its own PR because this is long and
boring.
I want to make sure that we're catching actual mistakes there, and not
just experiencing side effects of how shitty the attack chain is.
## About The Pull Request
So, a huge issue with memories and - what I personally believe is the
reason why not many have been added since their inception is - they're
very annoying to add!
Normally, adding subtypes of stuff like traumas or hallucinations are as
easy as doing just that, adding a subtype.
But memories used this factory argument passing method combined with
holding all their strings in a JSON file which made it just frustrating
to add, debug, or just mess with.
It also made it much harder to organize new memories keep it clean for
stuff like downstreams.
So I refactored it. Memories are now handled on a subtype by subtype
basis, instead of all memories being a `/datum/memory`.
Any variety of arguments can be passed into memories like addcomponent
(KWARGS) so each subtype can have their own `new` parameters.
This makes it much much easier to add a new memory. All you need to do
is make your subtype and add it somewhere. Don't need to mess with jsons
or defines or anything.
To demonstrate this, I added a few memories. Some existing memories had
their story values tweak to compensate.
## Why It's Good For The Game
Makes it way simpler to add new memories. Maybe we'll get some more fun
ones now?
## Changelog
🆑 Melbert
add: Roundstart captains will now memorize the code to the spare ID
safe.
add: Traitors will now memorize the location and code to their uplink.
add: Heads of staff winning a revolution will now get a memory of their
success.
add: Heads of staff and head revolutionaries who lose their respective
sides of the revolution also get a memory of their failure.
add: Completing a ritual of knowledge as a heretic grants you a quality
memory.
add: Successfully defusing a bomb now grants you a cool memory. Failing
it will also grant you a memory, though you will likely not be alive to
see it.
add: Planting bombs now increase their memory quality depending on how
cool the bomb is.
refactor: Memories have been refactored to be much easier to add.
/🆑
You can move around shuttles during transport now! Instead of them
teleporting you instantly into deepspace, you can move around somewhat
depending on your space-mobility and grip-strength.

**Please watch the demonstration aswell, it should answer most
questions:**
https://www.youtube.com/watch?v=Os77qDOVSXE
Interactions:
- Being within armsreach of a wall or solid object means you 'cling',
where the shuttle pull is very weak and you can basically run around the
shutt;e (but dont fuck up or you're gone)
- Being in range of nothing gives you a very heavy pull, you can barely
resist if you have a decent jetpack
- Objects are instantly power-yeeted
- Being pulled or riding something excempts you from hyperspace pull
- Touching a space tile while being on hyperspace dumps you in
deepspace, you either go back to the shuttle or enjoy deepspace
- On shuttle hyperspace tiles are a lot less dangerous, and will instead
launch and freeze you instead of teleporting you into deepspace
- In-case it wasn't obvious, you can rest outside the shuttle as long as
something is blocking your path. I think it's funny but I might nerf it
🆑
add: You can now fly around the shuttle during transit! Woohoo! You can
either cling to the side or grab a jetpack and try and keep up with the
shuttle! Carps can move around freely in hyperspace
qol: Increased shuttle hyperspace size from 8 tiles to 16
/🆑
- [x] Find a way to detect when a shuttle arrives and do something with
the shit left in hyperspace
Things I will do in another PR:
- Engines spit fire and hurt (almost finished but I want to keep this
small)
- Random shuttle events. You might run into dust meteors or migrating
carps OR A CHANGELING INFILTRATOR
- Hyperspace turfs on the shuttle pull you under the shuttle
### Why it's good for the game
It's so much more immersive than being instantly teleported into
deepspace. It gives you a chance to recover if you get spaced or for
daredevils to look cool
It's also just very cool idk
## About The Pull Request
What it says on the tin. Since the contents weren't emptied you could
get infinite beakers, donk pockets, chicken nuggets etc. by making and
remaking a box over and over.
Fixes #72385.
## Why It's Good For The Game
Bugfix. The world does not deserve infinite chicken nuggets yet
## Changelog
🆑
fix: Boxes created through the crafting menu no longer spawn with their
contents full
/🆑
## About The Pull Request
adds more ammunition, and also signing on the psyker ship
fixes some minor stuff
you can see other echolocation receivers as fully purple now, rather
than just their outline
echolocating people have night vision, to prevent bugs with them not
being able to see echolocated tiles
psyker pirates have headsets that increase their echolocation range
partially fixes the shuttle docker. need someone smarter to look at it
with me though, you can physically use it at least, just cant see yet.
## Why It's Good For The Game
they are not very playable right now
## Changelog
🆑
balance: adds more ammunition, and also signing on the psyker ship
qol: you can see other echolocation receivers as fully purple now,
rather than just their outline
fix: echolocating people have night vision, to prevent bugs with them
not being able to see echolocated tiles
add: psyker pirates have headsets that increase their echolocation range
fix: partially fixes the psyker ship shuttle docker
/🆑
Rescaling because i saw someone think that the number on the supermatter
UI are actually the percent damage over time, which is wrong.
Added delta symbol to damage and energy since they actually denote
change, not the actual value.
Chose the numbers that look good instead of doing a 1:1 rescale of the
old one (i.e. im dividing or multiplying things by 10 instead of 9). In
practice this means I'm lowering the damage cap but increasing damage
over the board for atmos (since it's mostly divisors). Lowered the
damage overall for external stuffs.
A bit of modification on the filter helpers to suit my needs. Added
documentation because I'm awesome.
<!-- 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
The instant summons spell will cause embedded weapons to be violently
torn out from victims upon being recalled away. This comes with bonus
removal damage and a piercing wound. If you are near the victim as this
happens, they will be violently launched towards you. Make sure not to
let them fly into you!
Feel free to try it with the High-Frequency Blade (100% embed chance)
next time you're wizard.
Also, if the numbers on this seem a bit extreme, give me a heads up.
Combat balance isn't exactly my forte.
https://user-images.githubusercontent.com/28870487/206542566-0cf72e21-332e-48a5-801b-0f8478ef24ff.mp4
<!-- 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
Adds an interesting synergy to one of the more commonly accessible
spells. Get creative, get violent.
Encourages people to use summons for more interesting things than
shove/steal insurance.
<!-- 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. -->
🆑
balance: Instant Summons will now violently tear out embedded objects as
they are summoned, and will drag embedee to you if nearby.
/🆑
<!-- 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: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Adds lints for `balloon_alert(span_xxx(...))` (which is always wrong),
and balloon alert where the first letter is a capital (which is usually
wrong). Fixes everything that failed them. As a reminder, abbreviations
like "AI" and "GPS" shouldn't be capitalized in a balloon alert.
In cases where this is intentional for flavor (there was one case), you
can `UNLINT` like so:
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
About The Pull Request
Chiefly this refactors dogs to use the newer component/datum system for "pet which follows instructions". It also refactors it a little bit because I had better ideas while working on this than I had last week. Specifically, instead of passing around keys we just stick a weakref to our currently active behaviour in the blackboard. Basically the same but skipping an unecessary step.
Additionally it adds a component for the previous "befriending a mob by clicking it repeatedly" behaviour which hopefully we won't use too much because it's not very exciting (I am planning on replacing it for dogs some time after Christmas).
The biggest effort in here was making the Fetch command more generic, which includes multiple behaviours (which might be used on their own?) and another component (for holding an item without hands).
Additionally I noticed that dogs would keep following my instructions after they died.
This seems unideal, and would be unideal for virtually any AI controller, so I added it as an AI_flag just in case there's some circumstance where you do want to process AI on a dead mob.
Finally this should replicate all behaviour Ian already had plus "follow" (from rats) and a new bonus easter egg reaction, however I noticed that the fetch command is supposed to have Ian eat any food that you try to get him to fetch.
This has been broken for some time and I will be away from my desk for a couple weeks pretty soon, so I wrote the behaviour for this but left it unused. I will come back to this in the future, once I figure out a way to implement it which does not require adding the "you can hit this" flag to every edible item.
Also I had to refit the recent addition of dogs barking at felinids to fit into this, with a side effect that now dogs won't get mad at a Felinid they are friends with. This... feels like intended behaviour anyway?
Why It's Good For The Game
It's good for these to work the same way instead of reimplementing the same behaviour in multiple files.
Being able to have Ian (or other dogs) follow you around the station is both fun and cute, and also makes him significantly more vulnerable to being murdered.
Changelog
cl
add: Ian has learned some new tricks, tell him what a good boy he is!
add: Ian will come on a walk with you, if you are his friend.
refactor: Ian's tricks work the same way as some other mobs' tricks and should be extendable to future mobs.
fix: Dogs no longer run at the maximum possible speed for a mob at all times.
add: When Ian gets old, he also slows down. Poor little guy.
add: Dogs will no longer dislike the presence of Felinids who have taken the time to befriend them.
/cl
## About The Pull Request
Most PRs are now passing after #72299 but a couple of them still failed
for the below reason, this hopefully fixes it
Unfortunately because it only fails _sometimes_ the tests passing on
this PR isn't proof that I actually fixed anything
## Why It's Good For The Game

## Changelog
Not player facing
<!-- 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
<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->
improves a bit more guardian code, notably lightning
removes the simplemob -100 wound bonus from assassin holoparas when they
are in stealth mode, so your backstab has a fair chance of doing a
piercing wound
similarly, the standard holopara now doesnt have a -100 wound bonus, so
they can break some bones too
the charger holopara has received a bit of an overhaul
its charge is faster, but it is overall slower, the speed going from -1
to -0.5, and it's armor has fallen a bit too, to 25% from 40%.
however, the user can now buckle to it! (the charge breaks when doing
that, fixed by https://github.com/tgstation/tgstation/pull/72261)
## 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. -->
guardians cost a lot and some of them arent that good, and they really
havent been looked at in the context of newer game mechanics like
wounds, i think this expands on them in a neat way
## 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. -->
🆑
balance: standard holoparasites and assassin holoparasites in stealth
mode can deal wounds
balance: you can now ride charger holoparasites
balance: charger holoparasites have a bit less armor and speed
/🆑
<!-- 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. -->
<!-- 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
War item checked for being on the CC zlevel which is no longer where the
nukie base is loaded.
Instead it now checks for being in a reserved area, which it will be if
loaded in __correctly__
fixes https://github.com/tgstation/tgstation/issues/72214
Also restricts loading lazy templates until the game has fully started,
i've noticed that trying to load pregame has a tendency to get stuck in
a runtime loop when SSicon_smoothing fires at the same time loading is
occurring
<!-- 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
War Good
<!-- 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: War can once again be declared
/🆑
<!-- 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. -->
## About The Pull Request
Wow we're finally here. This turns carp into Basic Mobs instead of
Simple Animals.
They use a variety of behaviours added in previous PRs to act in a
marginally more interesting way than they used to.
But don't worry there's still 2 or 3 PRs to follow this one until I'm
done with space fish.
Changes in this PR:
Carp will try to run away if they get below 50% health, to make use of
their "regenerate if not attacked" component.
Magicarp have different targetting behaviour for spells depending on
their spell;
- Ressurecting Carp will try to ressurect allied mobs.
- Animating Carp will try to animate nearby objects.
- Door-creating Carp will try to turn nearby walls into doors.
You can order Magicarp to cast their spell on something if you happen to
manage to tame one.
The eating element now has support for "getting hurt" when you eat
something. Carp eating can rings and hating it was too soulful not to
continue supporting.
## Why It's Good For The Game
Carp are iconic beasts and I think they should be more interesting.
Also we just want to turn mobs into basic mobs anyway.
## Changelog
🆑
add: Carp will now run away if their health gets low, meaning they may
have a chance to regenerate.
add: Lia will now fight back if attacked instead of letting herself get
killed, watch out!
balance: Magicarp will now aim their spells more intelligently.
add: Tame Magicarp can be ordered to use their spells on things.
refactor: Carp are now "Basic Mobs" instead of "Simple Mobs"
fix: Dehydrated carp no longer give you a bad feeling when they're your
friend and a good feeling when they're going to attack you.
balance: Tamed carp are now friendly only to their tamer rather than
their whole faction, which should make dehydrated carp more active.
Order them to stay or follow you if you want them to behave around your
friends.
/🆑
holoparasite types have improved code
admins can now give someone a holoparasite through a new menu in vv
dropdown
alt click holopara abilities were moved to right click (support's beacon
wasn't, but support's heal mode was)
holoparas have less hardcoded stuff so admins can edit them easier
holoparasites now get their light color from their guardian color
holoparasites no longer have the hostile faction, things will attack
them
holoparasites now have a damage overlay, so you can see how much your
summoner is damaged
holoparasite health updating is now event based rather than running on
life, so you'll see health changes everytime they happen, rather than
every 2 seconds
holoparasites fly properly again (they cant spacewalk, but count as
flying for stuff like chasms)
holoparasite creation now uses a radial menu with tooltips for each
subtype. it also shows ghosts which type you picked
holoparasites can no longer be fugu'd
adds support for ownerless holoparasites
fixes mildly related bugs along the way
## About The Pull Request
Updated crafting menu, adding a lot of new functions and recipes that
were not in the crafting menu before.
<img alt="cult"
src="https://user-images.githubusercontent.com/3625094/206009533-aec3a1dd-cbe5-45eb-8515-1b75fabb65c5.PNG">
<img alt="nH77dLyyGx"
src="https://user-images.githubusercontent.com/3625094/206009786-b6706f70-0599-40bf-b051-8f499de43abd.png">

https://user-images.githubusercontent.com/3625094/206009841-738e4a03-0660-45b7-8d83-15eeb6501967.mp4
## Why It's Good For The Game
It is easier to use, and it has a lot of recipes that were spread
throughout the game, some of which weren't even on the wiki.
Crafting and cooking now count about 1200 recipes in total, including
conditionally available ones.
## Changelog
🆑
qol: Rewrote the crafting/cooking menu UI
qol: Split crafting and cooking menus in two different menus
qol: Crafting is no longer blocking the entire UI, only the "Make"
buttons are disabled
qol: Added stack crafting recipes to the crafting menu
qol: Added cooking recipes that were absent in the crafting menu before
(tool recipes, machine recipes, reactions)
qol: Added option to search recipes by title
qol: Added option to filter recipes by required materials/ingredients
qol: Added food types to the cooking menu, highlighting diet of your
species (liked, disliked foods)
qol: Added total nutrition value of the result to the cooking menu
qol: Added option to filter cooking recipes by the food type of the
resulting food
qol: Added "Can make" category that lists all currently craftable
recipes throughout all categories
refactor: changed categories and reshuffled some items in them
code: Reagents now have default container to get an icon from the
reagent datum
code: Objects now have `desc_controls` var for OOC information about
mouse controls that are visible on examine, but not in the description
fix: Fixed alignment on many food icons
fix: Fixed missing icon for beef stroganoff
/🆑
Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
## About The Pull Request
[fixes solor trackers offsetting wrong, and panels not using plane
offsets](8f461ab8ec)
[fixes cyborg hats offsetting phyiscally over their
head](5fd5b4240e)
[fixes reflector parts z fighting with their neighbors. if we physically
offset them, they'll have nothing to fight
with](088dcfe91f)
[fixes burgers layering wrong. uses a combo of pixel z to do the visual
offsets, and pixel_y to modify
layering](ec39e2bcd3)
[fixes signs, needed to use pixel_w instead of x, I think we may be
living under iso rules? I'm not totally sure I need to investigate
more](560d152fd7)
[fixes paperbin
rendering](e6c57ec00e)
## Why It's Good For The Game
Closes#72094Closes#72035
## About The Pull Request
There's probably a better way to do this to be honest, but I think it's
silly for both to potentially be the same and this should work alright.
## Why It's Good For The Game
Fixes#71446.
I don't think the Syndicate is that stupid.
## Changelog
🆑
fix: After a recent mishap with a high-ranking Syndicate operative, the
uplink's unlock code and failsafe code (the one that makes it blow up if
you say it) should never turn out to be the same.
/🆑
## About The Pull Request
Fixes#72116
I've had a persistent issue with basic mob actions reporting this error
and think I finally cracked it
When replanning with `AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION` it can run
`Setup` on one action leading to the plan changing, meaning that it runs
`finishCommand` to cancel all other existing commands
If you triggered a replan by setting up a movement action in the middle
of another movement action, cancelling the existing action would remove
the target already set by the current one.
We want actions to be able to remove _their own_ movement target but not
if it has been changed by something else in the intervening time.
I fixed this by passing a source every time you set a movement target
and adding a proc which only clears it if you are the source... but this
feels kind of ugly. I couldn't think of anything but if you have a
better idea let me know.
Also while I was doing this I turned it into a feature because I'm
crazy.
If you feed a mouse cheese by hand it will stop being scared of humans
and so will any other mice it attracts from eating more cheese. This is
mostly because I think industrial mouse farming to pass cargo bounties
is funny.
Mice controlled by a Regal Rat lose this behaviour and forget any past
loyalties they may have had.
https://user-images.githubusercontent.com/7483112/208779368-3bd1da0f-4191-4405-86e5-b55a58c2cd00.mp4
Oh also I removed a block about cancelling if you have another target
from the "hunt" behaviour, everywhere using this already achieves that
simply by ordering the actions in expected priority order and it was
messing with how I expected mice to work.
Now if they happen to stop by some cheese they will correctly stop
fleeing in order to eat it before continuing to run away.
## Why It's Good For The Game
Fixes a bug I kept running into.
Makes it possible to set up a mouse farm without them screaming
constantly.
Lets people more easily domesticate mice to support Ratatouille
gameplay.
## Changelog
🆑
add: Mice who are fed cheese by hand will accept humans as friends, at
least until reminded otherwise by their rightful lord.
fix: Fixed a runtime preventing mice from acting correctly when trying
to flee and also eat cheese at the same time.
/🆑
## About The Pull Request
my friends been doing makeshift surgery and gets mad about having to do
harm intent to start surgery and then having to turn it off to do every
single other surgery step and i agree, thats silly
~~instead, now, the bedsheet attack does not check for harm and ALWAYS
COVERS with left mouse button and ALWAYS PREPARES SURGERY with right
mouse button~~
to be more consistent all surgery initiators now work on left mouse
click and covering with your bedsheet is the right mouse button

## Why It's Good For The Game
while obviously a lot of the time makeshift surgery IS about harming
someone else its inconsistent with how all other surgery tools function
and also isn't very clear at all. the screentip in addition to having
them be separate buttons means that bedsheets two functions are overall
much clearer and its surgery drape function will no longer lead to an
assistant accidentally knifing someone when theyre trying to save
someones life
## Changelog
🆑
qol: added makeshift surgery screentip
qol: you no longer have to go in and out of harm intent to do surgery
with a bedsheet
/🆑
## About The Pull Request
[Fixes area lighting not working on turf change in multiz
cases](7b92deffbc)
If you modify a area lit turf when using multiz, it'd end up using the
wrong plane for its light, because of stupid shit on my part.
Stupid shit resolved
[Fixes some uses of plane masters that only specified one rather then
all](a59ec96d29)
We almost never only want to show SOME hidden planes.
Should really make a helper for this someday
## About The Pull Request
After all, the Syndicate loves a good throwback.

This PR does a few things with the goal of reimplementing and
revitalizing syndicate traitor kits and the syndicate surplus crate.
Of note is that I have added in a way for limited stock items to share
their limited stock.
Following maintainer guidance the syndicate traitor kits have increased
in price and as a result some of the lower value ones have been
adjusted. I've given all active bundles current TC costs per item
knowing full well they will be inaccurate eventually.
<details>
<summary>Changes as a result of my audit of syndikits</summary>
### UNCHANGED
Recon, Spai, Stealthy, Screwed, Sniper, Nukie Meta, Implants
Mad Scientist, Bees
Lord Singuloth is also unchanged and disabled, I think that it should
turn into a new supermatter themed kit maybe. outside of current scope.
### Gun Kit
Replaced emag with doorjack and gave it a chameleon holster, literally
moved 1 tc elsewhere
### Murderer
replaced emag again, no additions its a lot of tc and Just Good
### Hacker
added doorjack, otherwise unchanged
### Sabotage
no changes other than adding in extra bombs it didnt have
### James Bond
gave him some gadgets with the freedom implant, emp flashlight, and one
x4. also a cyanide pill and deck of cards for fun
### Ninja
Added in miner Jump Boots, smoke spell, and doorjack. dont just want it
to be space ninja
### Dark Lord
Added in new lightning bolt spell granter and made the desword default
to red. probably overbudget.
### White Whale
dehydrated carp added so you can ride it alongside the ones you grenade
out. hard to imagine changing this
### Mr Freeze
changed temperature gun to be cryo only so that i could give him the
cryo thermal pistol. cold attacks only.
### 2006 Traitor
doorjack.
</details>
tl;dr theyre all about 30 tc worth of shit more or less some are more
but thats what rarity should be for
you can only buy from one type of syndicrate per round

Next up is the return of the surplus crate.
Crate is generated, gives you gear **based on your progression at the
time of buying the crate**, you can use it all at the start and get some
chameleon kits and not a lot of dangerous weapons or wait till later.
I've changed the weight on some items here and there and given weight to
role and species locked items, though I will admit that latter is
unimportant because I set moth lanterns to be unable to appear in these
two crates.

But who cares about that your eyes instantly went to the United Surplus
Crate and the United Surplus Key lets be honest.
The united surplus crate is 80 TC worth of uplink items relative to your
current progression when you purchase it and gives you a locked box. It
**will explode if you try to break it** so be careful with it. It gives
you 80 TC and costs 20 TC because it is impossible to open without key.
The rub of course is that the Syndicate forbids agents from buying more
than one surplus item of any kind, you need to find another traitor and
make them buy you a key to open your box. Or I guess you can share the
box?

Regardless, if the crate is opened with any other means it doesn't spawn
its contents, you need 2 traitor uplinks.
Both of these items have a 30 minute timer because you don't want a
crate that has 5 emp flashlights in it. You at least want one energy
sword.
I did a lot of code shit and changed various things to be proc based to
allow for more editing and interjection of things, as I wrote in code
comments making a crate thats locked to a specific set of progression
just means changing the proc that generates a list of valid uplink items
to check items' progression values to a specified value instead of your
characters progression.
Ok I think that goes over everything more or less????
## Why It's Good For The Game
I've heard that people liked these and I think they are quite fun, being
able to go from "i dunno what to do as a traitor" to "ah, of course, I
will become the Bombler" is a fun thing to be able to have, and people
like to get a bunch of random shit in the mail. Some of it even feels
free!!!!!!!!!!!!!!!!!!! Brain points go up!!!
The division of procs allows for more creativity with this system than
existed before as well as other possibilities for interacting with the
uplink handler in funny ways.
## Changelog
🆑
add: the syndicate is once again distributing syndi-kits, some now with
new technology
add: a fresh batch of syndicate surplus crates have been sent out,
though they seem a bit lighter than before
add: in an effort to encourage cooperation, a traitor can now purchase
either the new United Surplus Syndicate Crate or its key, but not both
add: lightning bolt book granter for wizard event and one syndie-kit
bundle
add: temperature gun that only makes things colder for one syndie-kit
bundle
code: it is now possible to have uplink items share limited stock
bal: role-restricted items no longer can be delivered by the stray
syndicate drop pod event
/🆑
## About The Pull Request
Two year old bug that was filling the food_made table with
/datum/component/edible instead of actual food
## Why It's Good For The Game
Means I don't have to parse two different tables instead of one
convenient one
## Changelog
🆑 Tattle
fix: crafted foods are logged in the blackbox once more
/🆑
Co-authored-by: tattle <article.disaster@gmail.com>
## About The Pull Request
Curse of hunger did some funky stuff by checking for
`slot_equipment_priority` (which ONLY BUCKETS use) and registering
certain signals based on that
The signals they were using instead didn't pass the unequipper, so the
curse never got removed on unequip.
Replaced them with just equip and drop, as equipped and dropped work
just fine for it.
Unit tests this.
## Why It's Good For The Game
Infinite curse of clumsy and pacifism is kinda bad
## Changelog
🆑 Melbert
fix: Dufflebag Curse no longer lasts forever after the bag is destroyed.
fix: Dufflebag Cursing someone already afflicted properly doesn't try to
add the curse again
/🆑
## About The Pull Request
- Refactors bar drink icons.
- Juice boxes no longer have a hard-coded list of a bunch of reagent
types in their update state, and use a system similar to bar drinks.
- Glass and shot glass icon information are no longer stored on the
drink. Instead, they are now stored in glass style datums. These datums
store name, description, icon, and icon state of a certain container +
reagent type.
- Glass styles are applied via the `takes_reagent_appearance` component.
Glasses, shot glasses, and juice boxes have this component.
- This comes with support for being able to have drink icons from
different files, rather than requiring the drinks DMI.
- The britmug is now a subtype of mug.
- 1 new icon: britmug filled.
- Various small code clean-up around drink reagents.
- Unit tests icon state setups for glass styles as well as all `/drink`
reagent container subtypes.
- Splits up the massive `drinks.dmi` into separate files.
*Disclaimer: Much of the drinking glass datums were written via script
automatically, so there may be errors present.*
## Why It's Good For The Game
- Much easier to add new drink styles, much more modular.
- It is no longer necessary for new drinks to be added to the massive
`drinks.dmi`. People working with drinks in the future can simply add
their glass style datum and point it to their file wherever it may be.
- Expandable system. Adding a new type of reagent container that works
similarly to bar drinks but for different types of icons is a breeze.
- Ensures going forward no bar drinks have invisible sprites.
## Changelog
🆑 Melbert
refactor: Refactored how bar drinks set their icons. Juice boxes now use
the same system.
/🆑
## About The Pull Request
Another atomisation of #71421 but I had a fun idea while I was testing
it.
This adds a component based on the existing system for giving
instructions to tamed carp or dogs, but hopefully more modular.
It also gives it to the rat minions of a regal rat.
The basic function allows the mob to listen and react to spoken
commands, which passes things to its AI blackboard. Additionally if you
alt-click a commandable mob it will show a radial menu which both allows
you to select a command, and also contains tooltips explaining what they
do and what audible words trigger it.
<details>
<summary>Video</summary>
https://user-images.githubusercontent.com/7483112/204308693-0eccebec-75c9-411c-81c5-5aa0d682d1a5.mp4
</details>
Now if you riot some rats, you can alt click on them individually to
give them specific orders (more useful for other creatures than rats),
or you can speak out loud to command your legion.
Rats aren't very smart so you can't give them many instructions, but
this is expandable for other creatures.
Additional change: Mice don't squeak if stepped on by other mice because
this made an absolutely unholy noise and I am not sure there's a way to
get non-dense mobs to spread out.
## Why It's Good For The Game
Allows for giving more mobs the ability to be tamed and instructable by
their owner, without copy/pasting code which lives inside a specific
mob.
Yelling at your rats to give them commands is funny. It also adds the
possibility of telling your rats to stop biting someone if they have
agreed to your demands, allowing for more courtly roleplay.
When Regal Rat is converted to a basic mob its AI can also give other
AIs instructions by yelling at them which I think is a good feature.
## Changelog
🆑
add: The followers of Regal Rats will now respond to simple
instructions, if given by their rightful lord. Except frogs. They're too
busy licking themselves and watching the colours.
/🆑
## About The Pull Request
Likely the most trival issue from the [Dev Cycles
Initiative](https://github.com/orgs/tgstation/projects/11) project:
Closes https://github.com/tgstation/dev-cycles-initiative/issues/20
## Why It's Good For The Game
On the face of how useful they may seem, these verbs are basically
surclassed by the more accessible click shortcuts, while also being an
additional cost, which I cannot readily quantify on my subpar hardware,
but likely to be but a smidge compared to loading the nukie outpost and
wizard shuttle everytime rather than on demand, for example.
## Changelog
🆑
del: Removed object rotation related verbs, overwhelmingly overshadowed
by the click shortcuts anyway.
/🆑
Overhauls the fornesics scanner system, letting items modify the readout
and adding additional information through the COMSIG_DET_SCANNED signal.
Buffs the forensics scanner by letting it reveal more info, makes the
code look nicer, and allows for a bit more flavour text to be added to
items.
## About The Pull Request
- Traitors now have the old two kill + escape objectives from before
progressive traitors. These objectives are for greentext/victory
conditions only, and are known as "Primary Objectives".
- The Progressive Traitor system remains in place for unlocking
dangerous gear.
- Completing the Final Objective from the progressive list is an
alternate route to victory.
- Traitor Uplinks now have a new tab that lists Primary Objectives,
which will also indicate when the Traitor has a secured victory by Final
Objective.
- Also cleaned up the round end report, see below.
## Why It's Good For The Game
See https://hackmd.io/WVjTLp6xTJiTFEkhSqqWIQ?view for my complete
thoughts.
TL;DR:
- Getting Rep is too much of a time commitment for Greentext.
- Most of ProgTraitor is quiet sabotage that no one cares about, leading
to less conflict with the crew.
- Losing the Uplink creates an unwinnable state.
This PR fixes the above, by bringing back the 2 kill + escape system.
Traitors are now required to actually negatively affect at least some
crewmembers, and actually survive the round, to gain a victory state.
Alternatively, if they reach the Final Objective, they are given a free
pass, as an alternate route if they cannot find their Primary Objective
targets. Final Objectives will count as a victory even if the traitor
dies.
The Progressive Traitor system is still used for unlocking gear, and no
values for items, or restrictions based on role, have been changed.
## Changelog
🆑
balance: Traitors now have two kill and an escape objective for
Greentext purposes, though completing a Final Objective will Greentext
too.
/🆑
New Primary Objective Tab:

If the Final Objective is done, the traitor's victory condition is
secured, and the Primary Objectives no longer matter.

Round-end report, showing one traitor that greentexts through
traditional means, and one that doesn't get their kill target or escape,
but greentexts via Final Objective anyway.

## About The Pull Request
All investigate logs start with [src], which can be any atom. So
sometimes names and items get printed twice. Adds ckeys to the
investigate_logs of living mobs.

## Why It's Good For The Game
Better logging, includes the ckey for living mobs in investigate logs,
and fixes some investigate_death logs that weren't properly attributed
to mobs.
## Changelog
🆑 Tattle
admin: investigate logs include ckey of source (if applicable)
/🆑
Co-authored-by: tattle <article.disaster@gmail.com>
<!-- 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
<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->
Fixes#69798Fixes#71621
When using hypnosis on a victim, the language should be accounted for
and whether the victim can properly hear it. Before the hearing code
would magically translate any message, this is no longer the case.
This also fixes the language barrier involving hearing for:
- Mind echo trauma
- Phobia trauma
- Hypnotic trigger trauma
- Split Personality brainwashing trauma
- Codeword hearing
- Hypnotize status effect
- Impure Inacusiate reagent
## 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. -->
Better consistency, improved readability, and less bugs in the future.
## 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: Fix hypnosis, mind echo trauma, phobia trauma, hypnotic trigger
trauma, split personality brainwashing trauma, codeword hearing, and
impure inacusiate reagent all bypassing language and hearing checks. If
you try to give commands to a victim in a language they don't
understand, they will no longer magically understand the words.
fix: Fix sign language having accent modifications
refactor: Refactored saycode to be more robust, readable, and have more
unit tests.
/🆑
<!-- 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: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
## About The Pull Request
This changes stamina damage from a damage that affects limbs (like brute
and burn) to a damage that affects the body at whole (such as tox or
oxy)
Stamina being run like brute or burn is rooted all the way back to when
it was halloss, and used exclusively for holodeck items and
hallucinations.
Most coders probably didn't even know that stamina worked like this, and
most implimentatiosn of stmaina mechanics use a generic "adjust stamina"
or a "apply_damage(type = stamina zone - body_zone_chest)" to avoid the
issues that come when stamina is evenly distributed among limbs (and
some limbs only count as a fraction to stamina damage total)
The only thing that is truly lost here, is disabling limbs (arms and
legs) with stamina damage, by aiming specifically at them with disablers
(batons always apply their stamina damage to the chest, no matter where
they hit) our through smashing limbs on tables.
The idea of making an opponent drop a weapon out of pain is fun, but
stamina doesn't support it, or make sense in context.
A depth filled limb-based pain system that has interactions with
painkillers and replaces damage based move slowdown would be fun, and
maybe something that could be implemented in the future.
## Why It's Good For The Game
The biggest draw here, is that it will make stamina easier to maintain
## Changelog
🆑 itseasytosee
code: Stamina no longer affects individual limbs.
/🆑
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Get linters working again, I was never using the correct directory
expansion syntax for checks, so why some of them still worked anyway is
beyond me.
Fixes https://github.com/tgstation/tgstation/issues/71695
## About The Pull Request
1: Start cleaning something.
2: Clean the same thing again before the original cleaning manages to
finish. This removes the cleaning bubbles animation early, before the
actual cleaning is done. You can also spam the start cleaning message
with this.
The cleaning overlay is removed after the do_after that makes you wait
the time it takes to clean. When you're already waiting and you clean it
a second time the do_after returns instantly and removes the overlay
while the first one is still waiting.
But it seems that we don't even need to bother with any of that code if
we're already cleaning the thing, so we can just return early and
prevent the issue.
## Why It's Good For The Game
Fixes a graphical bug.
## Changelog
🆑
fix: trying to clean something while it's already being cleaned will no
longer prematurely remove the cleaning animation
/🆑
## About The Pull Request
Adds the modular computer subsystem which is meant to replace mod PC's
reliance on networks and radios, specifically the network subsystem, the
ntnet interface, and /datum/ntnet. This PR removes station_root ntnets
entirely, but I tried to keep it small.
This PR also removes a ton of unused vars and defines, such as NTNet
channels that were unused (peer2peer and systemcontrol), atmos networks
(as they were removed a while ago) and NTNet var on relays (its stated
purpose is so admins can see it through varedits, but that's useless now
that it's a subsystem)
I also removed ``setting_disabled`` as a thing the RD can do, it turned
off ALL ntnet systems. However, this was when there were 4 different
ones, now that there's only 2 I thought it was redundant and he could
just click 2 buttons to close them.
## Why It's Good For The Game
``/datum/ntnet``, ``/datum/component/ntnet_interface``, and
``/datum/controller/subsystem/networks`` are all old-code messes that
depend on eachother and is hard for people to understand what exactly it
adds to the game. 90% of its features is allowing the Wirecarp app to
see all the ruins that spawned in-game, which I don't think is something
that we even WANT (why does the RD need to know that oldstation spawned?
Why should they know this anyway??)
This hopefully starts to simplify networks/ntnet to make it easier to
remove in the future, because surely there are better alternatives than
**this**
## Changelog
🆑
refactor: Modular computers NTnet and applications run on its own
subsystem, please report any new bugs you may find.
/🆑
About The Pull Request
Made a basic version of the pet base called /mob/living/basic/pet. It's significantly more stripped down from the old simple_animal one, because its half collar stuff and...
Made the collar slot a component that you could theoretically remove from a pet to disable the behavior, or add to any other living mob as long as you set up the icon states for the collar (or not, the visuals are optional).
The corgi's collar strippable slot is now generally the pet collar slot, and in theory could be used for other pet stripping screens.
I also gutted the extra access card code from /mob/living/basic/pet as it's only being used by corgis. Having a physical ID is now just inherent to corgis, as they're the only ones that could equip it anyway.
Ported the make_babies() function from simple_animals to a new subtree and associated behavior, called /datum/ai_planning_subtree/make_babies that uses blackboards to know the animal-specific info.
Note that it's marginally improved, as the female walks to the male first instead of bluespace reproduction.
Tweaked and improved the dog AI to work as a basic mob, including making /datum/idle_behavior/idle_dog fully functional.
Made a /datum/ai_planning_subtree/random_speech/dog that pulls the dynamic speech and emotes to support dog fashion.
I've tested base collars across multiple pet types.
For dogs, I've tested general behavior, fetching, reproduction, dog fashion, and deadchat_plays, covering all the oddities I'm aware of.
image
Why It's Good For The Game
Very big mob converted to a basic mob.
Changelog
cl
fix: Lisa no longer uses bluespace when interacting with Ian.
refactor: A large portion of dog code was re-written; please report any strange bugs.
/cl
## About The Pull Request
### Refactor
Pirate gangs are now datumized for extendability, custom dialogue, etc.
### Psyker Gang 🧠
Psyker-gang Members are pirates who are... yes, Psykers. They're on a
gore-binge and need some money for more hits of gore!
- Gore autoinjectors, filled with dirty kronkaine. Don't overdose,
you'll go splat.
- Psykerboost armor, reactive armor that refreshes psychic abilities.
Given to the leader.
- [x] @Fikou is making the map :D
## Why It's Good For The Game
God I fucking love variety also now we can add as many different pirates
as we so desire
<details>
<summary>Spoiler warning</summary>

</details>
## Changelog
🆑 Tralezab code, Fikou's map, PigeonVerde and Halcyon for sprites!
add: Psyker-gangers are new pirates
refactor: refactored pirate code so we can add more in the future
/🆑
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
## About The Pull Request
- Rewrites how action button icons are generated.
- Prior, generated an action button icon was fairly simplistic and
didn't allow for many changes. Someone recently added the option for
overlays to be generated over action buttons, but the framework was very
weak.
- Now, action button icon generation is split across multiple procs,
like atom icon updates.
- The background of action buttons are underlays
- The actual icon of the action button is the icon and icon state of the
action button movable
- The rim / border of the button is an overlay, layered overtop the
button.
- Allows observers to see what action buttons a mob has. They even
update in real time! And no, the observers cannot click on them.
## Why It's Good For The Game
- Runechat text of action buttons are no longer hidden behind the actual
icon. This was very ugly with cooldown actions, as the cooldown text was
hidden behind a lot of spell icons.
- Cuts down on a lot of icon duplication.
- Gives much finer control over action button icons
- Saves a bit of processing from generating full action button icons
when not necessary. Not implemented in many places, but is in some.


## Changelog
🆑 Melbert
add: Observers can now see what action buttons an observed mob has. No,
you can't click them. And no it doesn't show EVERY action.
refactor: Refactored how action button icons are generated. Some actions
will now use a colored border when active instead of just turning green.
Cooldown text will also appear on the top layer of actions too. If you
see any funky lookin' icons (namely their borders), let me know.
refactor: Bluespace Golem's teleport action is now a cooldown action.
fix: Construct actions go to the middle of the screen like expected.
/🆑