* hygeienbots basic bots (#80435)
## About The Pull Request
turns hygenic bots into basic bots. also now PAIs and people can play as
hygeinebots. and they can wear hats
## Why It's Good For The Game
transforms hyginebots into basic bots. their old AI used to handle all
the logic. i moved some of the logic to the mob itself so players can
also clean (or burn) things. also this pr will add pathing limits to
bots, in the case the jps movement thinks it can reach something, but
actually cant, in which case the bot will give up the chase
## Changelog
🆑
refactor: hygeinebots are now basic bots. please report all the bugs
fix: fixes hygenebots not being able to patrol
add: hygeinebots can now be controlled by Players
/🆑
* hygeienbots basic bots
---------
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
* Fixing the transhumanist quirk. (#80603)
## About The Pull Request
Apparently `get_bodypart_score` was being called on simple/basic mobs
too.
## Why It's Good For The Game
I've seen a few runtimes about it on Terry.
## Changelog
🆑
fix: The transhumanist quirk now should work as intended.
/🆑
* Fixing the transhumanist quirk.
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: Pinta <68373373+softcerv@users.noreply.github.com>
* [NO GBP] Poll Alerts cleanup (#80572)
~Hopefully the candidates number and signed up overlay should show up
for everyone now and be more responsive~
Ghommie tackled most of it in
https://github.com/tgstation/tgstation/pull/80610
I think the candidate number overlay updating is done incorrectly in his
PR though.
Candidate number overlay should be updated for ALL candidates' poll
alert buttons, whenever ANY candidate enters/leaves the poll
* [NO GBP] Poll Alerts cleanup
---------
Co-authored-by: 13spacemen <46101244+13spacemen@users.noreply.github.com>
* Fixing the constant poll alert runtimes, and the selector outline not being updated. (#80610)
* Fixing the constant poll alert runtimes, and the selector outline not being updated.
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Makes immerse use weakrefs (#80594)
## About The Pull Request
Immerse was causing harddels due to it having references to mobs. Makes
it use weakrefs for mobs instead.
## Why It's Good For The Game
Immerse would cause harddels if a mob was deleted while it was in it's
list. It could probably also happen if a turf was deleted too, but doing
that here would be much harder.
no CL since nothing playerfacing
* Makes immerse use weakrefs
---------
Co-authored-by: Arturlang <24881678+Arturlang@users.noreply.github.com>
* Micro-optimize qdel by only permitting one parameter (#80628)
Productionizes #80615.
The core optimization is this:
```patch
- var/hint = to_delete.Destroy(arglist(args.Copy(2))) // Let our friend know they're about to get fucked up.
+ var/hint = to_delete.Destroy(force) // Let our friend know they're about to get fucked up.
```
We avoid a heap allocation in the form of copying the args over to a new
list. A/B testing shows this results in 33% better overtime, and in a
real round shaving off a full second of self time and 0.4 seconds of
overtime--both of these would be doubled in the event this is merged as
the new proc was only being run 50% of the time.
* Micro-optimize qdel by only permitting one parameter
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* 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>
* Add system for safely manipulating JSON databases and apply it to photo albums and photo frames (#80519)
We frequently have issues with data loss in our long storage .json files
for various reasons, such as the file being completely blanked out on
write etc.
This introduces a system that tries to safely handle that by saving the
known working json file into a backup that will be loaded in the case a
write fails.
This system queues updates in order to send through to the next tick.
This is an improvement over the existing implementation of photo albums
and photo frames (I think all persistence, even) which do not save until
the end of a properly rebooted round, but not during a server crash.
Also saves the jsons in pretty prints, which make them easier to read
but especially make them easier to diff in a git repository, which MSO
wants to setup (and hopefully make public so I can make a dashboard on
bus.moth.fans for looking at photo albums and their history, which is
something I've wanted to do for a very long time).
## Changelog
🆑
refactor: Photo albums and photo frames are now more resilient to data
loss, especially when a server crashes.
/🆑
* Add system for safely manipulating JSON databases and apply it to photo albums and photo frames
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* Add 50% graffiti speed boost to tagger quirk (#80567)
## About The Pull Request
This gives the tagger quirk a 50% speed boost when drawing graffiti.
There was also some unused variable intended to make large graffiti more
time consuming that is now fixed.
## Why It's Good For The Game
It'd be nice to be able to spraypaint messages on the floor quicker.
Especially if you are doing a gimmick that requires making a shop sign
using letters.
## Changelog
🆑
add: Add 50% graffiti speed boost to tagger quirk
fix: Fix time duration of large graffiti not applying properly
/🆑
* Add 50% graffiti speed boost to tagger quirk
---------
Co-authored-by: Tim <timothymtorres@gmail.com>
* Fixes for mat container & ORM (#80573)
## About The Pull Request
- Fixes#80559
1) The ORM now hooks onto the local container only if off station. The
ui act if statement was also messed up but that's fixed now too.
2) Creates a dedicated signal for items inserted into the silo for
clarity & uses the helper proc defined inside remote materials for
inserting items so we don't have to specify the `context` manually.
3) Properly updates the auto Doc for the container signal defines
## Changelog
🆑
fix: Off station ORM's can redeem points again.
/🆑
* Fixes for mat container & ORM
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
* Optimize find_potential_targets self cost (#80602)

`find_potential_targets/perform` currently has a pretty bad self cost in
part due to it running a second "loop over everything in range" check to
find turrets and mechs. This doesn't drop it down by as much as I'd like
because it still needs `hearers`, it still shows up pretty high, but
this at least cuts out some unnecessary work.
Best case is likely to minimize work AIs need to do when there are no
players on their z-level, as there are a lot of calls from Lavaland.
* Optimize find_potential_targets self cost
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* Fixes wallmounted lights falling on drag (#80609)
## About The Pull Request
Being able to move around lights when using the light debugger is
important
Can't just be qdeling em whenever you try
Closes https://github.com/tgstation/tgstation/issues/78662
## Changelog
🆑
fix: Dear mappers, the light debugger tool no longer deletes dragged
wall lights
/🆑
* Fixes wallmounted lights falling on drag
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Reverts Canister Wiring (#80265) (#80607)
## About The Pull Request
Reverts #80265
It's a cool idea, but the ability to toggle valves/control pressure make
this just a ttv but without the access issues we tie to that.
Eats into that space way too much.
Removing those but not the rest results in disappointment, so I'm just
full removing this.
I am keeping the code quality changes, screentips, that sort of thing
tho. That bit goes hard.
Also, refactored a few procs slightly to make them easier to read. Early
returns, sane loops, etc.
## Why It's Good For The Game
Closes#80604
Cheap remote mass producible maxcaps are a bad idea actually
Sorry I didn't catch this in review, been resting for the week
## Changelog
🆑
del: Removes the wires from canisters. It's a cool idea, but cheap
controlled maxcaps are bad actually
/🆑
* Reverts Canister Wiring (#80265)
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* basic bot path huds and medbot research (#80277)
## About The Pull Request
this pr integrates the bot path huds to ai controllers and move loops to
allow basic bots to display their paths in the hud.
also closes#80280 and closes#80330
## Why It's Good For The Game
basic bots now can display their path on huds
## Changelog
🆑
add: basic bots can now display their paths on huds
fix: medbots can research healing again
/🆑
* basic bot path huds and medbot research
---------
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
* General maintenance for chem heater (#80495)
## About The Pull Request
1. Converted UI to typescript
2. Removed all tutorial code(and the icon files it used) Also removes
the reward that came with it. Both were not a big deal to begin with so
you know no one will miss it, In the name of code clean up and reducing
dmi file sizes it serves us better removing them
It did not compile in the new UI

And the text to display is way too clunky to be readable code wise (no
indentation just big raw blobs of unorganized text)
9983b883f7/code/modules/reagents/chemistry/machinery/chem_heater.dm (L334-L339)
And the steps manually set chem temps and volumes without calling the
appropriate procs basically its a mess so best to throw it all away.
3. Fixed the debug chem heater only absorbing 100 units of buffer from
the beaker even though it has a capacity of 2000. This is because it
used a constant of 100 for calculating how much volume to absorb
9983b883f7/code/modules/reagents/chemistry/machinery/chem_heater.dm (L449)
Even though the debug chem heater has a capacity over 1000
9983b883f7/code/modules/reagents/chemistry/machinery/chem_heater.dm (L495-L497)
Now the absorbing mechanism is based on the `maximum_volume` of the
holder and not on a fixed constant
4. Fixed the chem heater showing the wrong overlay when its panel is
opened and then closed while a beaker is inside
It would use the same icon for both open & closed state
9983b883f7/code/modules/reagents/chemistry/machinery/chem_heater.dm (L164)
But it should actually use this state
9983b883f7/code/modules/reagents/chemistry/machinery/chem_heater.dm (L59)
That's fixed now too.
5. Removed unused procs, variables and a whole lot of tracking which
UI's are opened/closed. All this is not necessary because the `SStgui`
subsystem tracks them for you so it was a lot of code bloat. autodocs
vars, procs and the regular stuff
6. Added more examines & tooltips for chem heater
## Changelog
🆑
fix: debug chem heater now withdraws more than 100 units from its
inserted beaker.
fix: chem heater has correct overlay when its panel is closed with a
screwdriver while a beaker is inside.
qol: added more examines and tooltips for the chem heater.
code: converted chem heater UI to typescript. removed unused procs,
vars, ui tracking code. Added auto doc for everything.
refactor: removed chem heater tutorial help button & its related reward,
chem heater code has been optimized as a whole.
/🆑
* General maintenance for chem heater
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
* Stops the automute from triggering for pet commands (#80421)
## About The Pull Request
Thanks goodness they've done the signal already for the deadchat control
component.
## Why It's Good For The Game
This will fix#78640.
## Changelog
🆑
fix: Regal rats (and others), won't be punished by the automute system
for repeating the same command several times.
/🆑
* Stops the automute from triggering for pet commands
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Removes material breakdown flags, traits & miscellaneous fixes. (#80389)
## About The Pull Request
1. Removes material breakdown flags i.e. all flags with the format
`BREAKDOWN_XXX`. These flags do nothing, there are no special checks to
transform materials based on these flags, they are passed around just
because certain procs require them for syntax purposes only.
Apparently there were plans to make these flags do something special
from the comment
302247c0d1/code/__DEFINES/construction/material.dm (L43)
But nobody got any ideas for years now. The only special thing we can do
with them now is remove them and reduce code clutter, so let's do that
The only flag that ever did something was the
`BREAKDOWN_INCLUDE_ALCHEMY` flag. This only worked when coupled together
with `TRAIT_MAT_TRANSMUTED` trait(which is only used by the reagent
metalgen) and when both this trait & flag are combined together... they
still do nothing
302247c0d1/code/game/atom/atom_materials.dm (L41-L42)
Yup they cancel out each other to prevent returning an empty list, the
traits only job was to prevent materials from being recycled (like why?
what's the benefit of that? nothing) and the flag was meant to bypass
this restriction so both the trait & the flag cancel out each other
therefore doing nothing meaningful. Best remove them both and call it a
day.
2. Fixes an error in displaying number of sheets inserted into a mat
container when that sheet is made up of alloy materials. it would count
as 2 or more because it would take the sum of total material amount
inserted and not the actual sheets. That's fixed now.
3. Remote materials now properly respect the `MATCONTAINER_NO_INSERT`
flag
4. Adds helper proc to insert materials via the remote material
component with proper context
## Changelog
🆑
fix: mat container displays correct number of sheets inserted for alloy
materials.
fix: remote materials now properly respect the `MATCONTAINER_NO_INSERT`
flag.
code: removes material breakdown flags and related traits.
code: adds helper proc to insert materials via the remote material
component with proper context.
/🆑
* Removes material breakdown flags, traits & miscellaneous fixes.
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
* Canisters: Wires, Rigging and Screentips (#80265)
## About The Pull Request
Added 6 wires to gas canisters, accessible when you screw open the panel
Toggle valve, toggle shielding, min pressure, max pressure, eject tank,
toggle reaction suppression (only works with hypernob crystal'd
canisters)
Pulsing the wires only works if the canister has a cell
You can attach dual assembly combos to canisters too, doesn't have to be
an igniter combo, could be a prox-signaler or timer-signaler. These are
visible on the canister sprite and can be removed by right-clicking the
canister. Visible assemblies don't trigger anything inside the canister,
it's like taping it to the canister, also looks more menacing.
Also added screentips to canisters
## Why It's Good For The Game
Emergent gameplay, more possibilities with atmos automation and
contraptions, can make traps like a proximity sensor N2O canister in
maint for cult conversions, anything
AND YES EVERYTHING IS LOGGED NO STEALTH GRIEFING POSSIBLE
## Video
https://github.com/tgstation/tgstation/assets/46101244/922465b3-9f9c-4b7b-8769-fca6df3b87a3
## Changelog
🆑
add: Canisters now have wires! You can pulse wires to do various
canister functions like opening/closing the valve. Make sure it has a
cell though.
add: You can rig assembly combos (igniter-timer, prox-signaler, etc.)
onto canisters
qol: Canisters now have screentips
/🆑
* Canisters: Wires, Rigging and Screentips
---------
Co-authored-by: 13spacemen <46101244+13spacemen@users.noreply.github.com>
* PDA update (Messenger works while dead, Microwave works, etc). (#80069)
This is an update that touches many more things all at once (compared to
my other PRs) meant to make PDAs in general feel more consistent and not
take away from one of the experiences we want to encourage: interaction
between players.
1. Replaced all checks of a 'pda' with a 'modular pc'. This means
technically (though not done in-game currently) other modpcs can hold an
uplink, and microwaves can charge laptops.
2. Speaking of microwave, they now don't break and require
deconstruction if the cell is removed mid-charge.
3. When a Mod PC is out of power, it will now allow the Messenger to
work (which now also doesn't consume any additional power), if the app
exists on the PC. Here's a video demonstration
https://github.com/tgstation/tgstation/assets/53777086/7ae12f81-a271-49b8-95fa-2ba54d2e2d1f
4. Flashlights can't be turned on while the cell is dead
5. I replaced a bunch of program vars with ``program_flags`` and renamed
``usage_flags`` to ``can_run_on_flags``.
6. Added a debug modPC that has every app installed by default. Mafia
had some issues in the past that were unknown because Mafia wasn't
preinstalled with any tablet so was never in create & destroy nor in any
other unit test. This was just an easy solution I had, but PDAs should
get more in-depth unit tests in the future for running apps n stuff- I
just wanted to make sure no other apps were broken/harddeling.
Currently when a PDA dies, its only use is to reply to PDA messages sent
to you, since you can still reply to them. Instead of just fixing it and
telling players to cope, I thought it would be nice to allow PDA
Messenger to still work, as it is a vital app.
You can call it some emergency power mode or whatever, I don't really
mind the reason behind why it is this way.
When I made cells used more on PDAs, my main goal was to encourage
upgrading your PDA and/or limiting how many apps you use at once, I did
not want this to hit on players who use it as a form of interaction.
This is the best of both worlds, I think.
The rest of the changes is just for modularity, if some downstream wants
to add tablets, phone computers, or whatever the hell else, they can
still get just as far as PDAs should be able to get to, hopefully.
🆑
add: PDAs with a dead power cell are now limited to using their
Messenger app.
fix: Microwaves now stop charging PDAs if the cell was removed
mid-charge.
fix: Microwaves can now charge laptops.
fix: PDA Flashlights can't be turned on while the PDA is dead.
fix: You can now hold a laptop up to a camera (if it has a notekeeper
app installed) like PDAs already could.
/🆑
---------
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
* ok
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
* Save json savefiles to disk in pretty print form (#80512)
Pretty printed json files are easier to store file history for.
* Save json savefiles to disk in pretty print form
---------
Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
* Color matrix defines for filters and identity (#80320)
This PR converts the procs `color_matrix_identity`,
`color_matrix_lightness` and `color_matrix_contrast` into
defines/macros. Also adds in defines for common color matrix filters.
I don't like how `color_matrix_identity` is a one-line proc with no arg.
Also these help people identify the sort of color matrix filter is being
used.
* Color matrix defines for filters and identity
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Fix "/datum/element/damage_threshold looks unharmed!" (#80546)
Fixed a bug that would give you the chat message
* Fix "/datum/element/damage_threshold looks unharmed!"
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* Replaces cyborg lover with transhumanist (#80509)
<!-- 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! -->
This reworks cyborg lover to be more interesting. Taking this quirk will
start the user off with a robotic limb. The user gains mood buffs by
being around silicon based lifeforms and loses mood by being around
organic based lifeforms.
Additionally, they can gain mood buffs by replacing all of their limbs
to their silicon counterparts but can also gain a massive mood debuff if
they lose or replace their starting robotic limb with an organic one.
The idea being here that they hate organics and seek to become robotic
Also, transhumanists won't be scared of people who have two or more
augments.
## 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. -->
Cyborg lover isn't really all that interesting since it's just a basic
mood buff upon clicking on a silicon.
This makes it more interesting by making it a dynamic between silicons
and organics and may adapt the playstyle of anyone choosing to take this
perk as they will need to stay away from organics to avoid mood debuffs.
## 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: Cyborg lover has been replaced with Transhumanist.
Transhumanists start with a robotic limb and get mood buffs by being
near to silicon-based lifeforms. However, they get mood debuffs by being
near organics, so there is a tradeoff to taking this quirk. The cost for
this quirk has been reduced from 2 to 0.
/🆑
<!-- 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: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
* Replaces cyborg lover with transhumanist
---------
Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
* Fake Virus doesn't affect virus immune mobs (#80447)
## About The Pull Request
Fake Virus random event won't pick Virus Immune mobs.
Plus some code cleanup.
## Why It's Good For The Game
Feeling a virus when you can't feel a virus makes it pretty obvious
what's going on.
## Changelog
🆑 Melbert
fix: Crewmembers immune to viruses won't be picked by the fake virus
event.
/🆑
* Fake Virus doesn't affect virus immune mobs
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* New Quirk! Cyborg Lover! (#80023)
## About The Pull Request
This PR adds a new quirk for people, who want to play as
silicon-friendly crew.
Basic quirk info:
- It costs 2 points.
- It has minor additions to person's mail goodies list (cable coils,
basic cells, etc).
- It has a few simple mood events, when you pet a borg or being
touched/hugged by borg.
## Why It's Good For The Game
I think it is nice to have a chance to play as ~~robo-creep~~ person who
loves borgos.
## Changelog
🆑
add: Added new quirk: Cyborg Lover!
/🆑
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* New Quirk! Cyborg Lover!
---------
Co-authored-by: SSensum <121913313+SSensum@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* initial d
* holy shit i forgot
* i got so much cheese in my pocket, they thought I was a fucking calzone
* opp was sneak-dissing on the 'gram, turned his city into pompeii
* Just fixing some diffs (line breaks should match tg)
* Fixes these edit comments
---------
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* qm uses cargo tech icons (#80411)
## About The Pull Request
qm now has the "x-in-training" intern title instead of "intern
quartermaster", similar to the other heads of staff
qm's hud and id card icons are now the cargo tech's icon (but blue),
following the other heads of staff which have blue versions of their
dept (blue wrench, blue cross, blue... sec badge?? blue exclamation)
## Why It's Good For The Game
makes the qm more visually consistent with the other heads, makes it
clearer that the qm is the head of the cargo department
the current icon is kinda hard to decipher too? you can tell the cargo
tech's is a crate, but the qm's is just like a weird head dude (which
the hop already has, making those ids hard to distinguish since theyre
both blue)? or a stamp?
## Changelog
🆑
fix: qm's intern id is now "quartermaster-in-training"
image: qm's id and hud icons now use the cargo tech icons (but blue) to
be consistent with the other heads of staff
/🆑
* qm uses cargo tech icons
* Removes the icon from modular as well
* Revert "Removes the icon from modular as well"
This reverts commit ac6a674887ca74a1231a8433373d55aa8df912e8.
* Updates the modular icons with the new version
---------
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Fixes a hard del in monkey AI (#80425)
## About The Pull Request

Fixes this hard del, caused by a del-on-death mob being qdeleted after
being victim to the monkey's attack. When a mob gets qdeleted, they
remove themselves from the blackboard.
Monkey code was then adding it back immediately after, resulting in the
hard del. Adds safeties to ensure that won't happen.
## Why It's Good For The Game
Less annoying CI failures
## Changelog
🆑
fix: monkeys will no longer cause other monkeys to get angry at the mobs
they just poofed by attacking
/🆑
* Fixes a hard del in monkey AI
---------
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* Crafting now transfers reagents from ingredients to final product (#80391)
## About The Pull Request
- Fixes#80143
- Fixes#80381
Based on the ingredients required reagents of the final product can
differ. It now transfers the olive oil from the bottle to the toasted
seeds & the orange juice and grenadine reagent from the ingredients into
the kasei dango.
Snow cones are now also edible
## Changelog
🆑
fix: crafting now transfers reagents from ingredients to final product
making previously inedible foods (toasted seeds, kasei dango & snow
cones) edible. Other crafted food products/items now differ in reagents
based on the ingredients required.
/🆑
* Crafting now transfers reagents from ingredients to final product
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
* Intern assistants are Interns (#80413)
Revive of #78498
This is what I tried to explain in the PR, it was trying to add code
that already existed
@ optimumtact
## Why it's good for the game
It's just flavor, it changes the "Intern Assistant" to "Intern" on the
job ID for SOUL.
🆑
qol: Assistants with <10h of playtime are now "Interns"
/🆑
* Intern assistants are Interns
---------
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
* Votes now show the percentage of total votes each choice got | Adds weighted random vote type | Map votes are now weighted random (#80362)
## About The Pull Request
See the title.
## Why It's Good For The Game
Mothblocks wanted map votes to not be simple winner take all and wanted
it to be randomly chosen based on votes.

## Changelog
🆑
add: Map Votes are now weighted random.
add: Custom Votes can now take advantage of Weighted Random winner
selection
del: Removed Herobrine from the game
/🆑
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Votes now show the percentage of total votes each choice got | Adds weighted random vote type | Map votes are now weighted random
---------
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Adds energy drinks to all nighter quirk stimulants list (#80397)
## About The Pull Request
Adds monkey energy and volt drinks to all nighter stimulants quirks
## Why It's Good For The Game
Energy drinks contain caffeine and taurine, so they are stimulants
## Changelog
🆑
code: All nighters can now drink energy drinks to cope with their lack
of sleep.
/🆑
* Adds energy drinks to all nighter quirk stimulants list
---------
Co-authored-by: kawaiinick <104280915+kawaiinick@users.noreply.github.com>
* Fixes an inconsistency with ED-209's crafting recipe (#80364)
## About The Pull Request
Makes the ED-209 crafting recipe only take security helmets, just as the
Beepsky one does.
## Why It's Good For The Game
As it stands right now, any helmet can be used to assemble an ED-209.
This includes anything from your standard security helmet, to a hardhat,
an envirohelm, or even a cheap toy roman helmet. This makes it so you
need an actual security helmet, just like the Beepsky recipe does.
## Changelog
🆑
fix: ED-209s can no longer be crafted with most instances of helmet, you
need security ones just like Beepsky.
/🆑
* Fixes an inconsistency with ED-209's crafting recipe
---------
Co-authored-by: StaringGasMask <62149527+Exester509@users.noreply.github.com>
* Throwing a bee at someone injects reagents (#80354)
## About The Pull Request
Throwing a bee at someone injects that bee's reagents.
This has a larger code footprint than you might expect because venom
injection is done via an element which in turn gives a callback to a
component.
While I was touching that I also separated `COMSIG_MOVABLE_IMPACT` into
`COMSIG_MOVABLE_PRE_IMPACT` because a lot of effects trigger from
`COMSIG_MOVABLE_IMPACT` despite the fact that the throw impact can be
cancelled after the signal is sent.
I also added an inject check onto the venomous element for mob attacks,
so thick clothing can now protect you from venom injection.
I elected that Giant Spiders have big enough fangs to ignore this such
that this isn't a major balance change, as do moonicorns (that horn is
massive), Fire Sharks, and Clowns (no idea how they are applying chems
at all to be honest).
## Why It's Good For The Game
I thought about someone throwing a bee at someone like a little dart and
thought "hee hee"
## Changelog
🆑
add: If you throw a bee at someone it will hit them sting-first and
inject that bee's reagent
balance: Thick clothing can now protect you from the venom of bees,
snakes, frogs, and (small) spiders
/🆑
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>
* Throwing a bee at someone injects reagents
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>