* Added the ability for blood to track DNA using ReagentData; Forensic Scanner now accounts for solution DNA, non-DNA holders have "Unknown DNA"
* Removes touch DNA for puddles, adds DNA to vomit
* DNA now leaves traces in containers and those marked without don't show DNA on scan (except for puddles), gibbed parts have DNA
* Fix stupid metamorphic glass bug grrr
* Removed SpillableComponent since DnaSubstanceTraceComponent is used instead
* Removes data field from maps, adds DNA tracking for some missed items
* Give default value, fix missing values.
* Fixes recipe bug
* Review changes
* Make the Data list into a nullable type
* Revert map changes
* Move gibbed unknown DNA to forensicssystem
(cherry picked from commit 07174d0aaf2832bc6ecc3a6baba21bc0aa5e0556)
* Уэээээээ
* Почти настрадались
* Скоро конец....
* СКОРО
* Мышки плакали, кололись, но продолжали упорно жрать кактус
* Все ближе!
* Это такой конец?
* Книжка говна
* фиксики
* ОНО ЖИВОЕ
* Телепорт
* разное
* Added byond
* ивенты теперь работают
* Разфикс телепорта
* Свет мой зеркальце скажи, да всю правду доложи - Я ль робастней всех на свете?
* Разное
* Еще многа всего
* Многа разнава
* Скоро конец....
* ЭТО КОНЕЦ
* Фикс линтера (ну, или я на это надеюсь)
* Еще один фикс линтера
* Победа!
* фиксики
* пу пу пу
* Фикс подмастерья
* Мисклик
* Высокочастотный меч
* Неймспейсы
* Пул способностей мага
<!--
This is a semi-strict format, you can add/remove sections as needed but
the order/format should be kept the same
Remove these comments before submitting
-->
# Description
<!--
Explain this PR in as much detail as applicable
Some example prompts to consider:
How might this affect the game? The codebase?
What might be some alternatives to this?
How/Who does this benefit/hurt [the game/codebase]?
-->
Miners have medipens that can take you down in two clicks with no delays
leading to an almost instant death (example in media), so this updates
miner medipens to how they work in ss13 - injections are instant under
50kpa, otherwise with a small delay
---
# TODO
<!--
A list of everything you have to do before this PR is "complete"
You probably won't have to complete everything before merging but it's
good to leave future references
-->
Test locally:
- [x] normal pressure - surv medipens injections delayed
- [x] no pressure - surv medipens dont have delay
- [x] lavaland (~44kpa) - surv medipens dont have delay
- [x] other medipens don't have delays
Other:
- [ ] maybe split this into UnderpressurizedDelay component or
something, since more stuff from lavaland can be low-pressure locked
---
<!--
This is default collapsed, readers click to expand it and see all your
media
The PR media section can get very l
https://github.com/user-attachments/assets/3da673b7-4dc1-4f2d-9f97-1b6794e9b441
arge at times, so this is a good way to keep it clean
The title is written using HTML tags
The title must be within the <summary> tags or you won't see it
-->
<details><summary><h1>Media</h1></summary>
<p>
https://github.com/user-attachments/assets/bf7e393a-206e-4654-ae5b-d01fa9d1eda6
</p>
</details>
---
# Changelog
<!--
You can add an author after the `🆑` to change the name that appears
in the changelog (ex: `🆑 Death`)
Leaving it blank will default to your GitHub display name
This includes all available types for the changelog
-->
🆑
- tweak: survival medipen works instantly only in underpressurized
(under 50kpa) environment
---------
Signed-off-by: VMSolidus <evilexecutive@gmail.com>
Co-authored-by: VMSolidus <evilexecutive@gmail.com>
(cherry picked from commit 8946751f533834275d79af544966c51c5fa7d29c)
<!--
This is a semi-strict format, you can add/remove sections as needed but
the order/format should be kept the same
Remove these comments before submitting
-->
# Description
<!--
Explain this PR in as much detail as applicable
Some example prompts to consider:
How might this affect the game? The codebase?
What might be some alternatives to this?
How/Who does this benefit/hurt [the game/codebase]?
-->
A cheap disposable syringe. It can draw once, inject once, and is then
rendered unusable.
The point of the syringe is to let Chemists pack specific dosages of
specific chemicals into a simple syringe. A doctor can then not
accidentally alter a dosage during treatments.
These cheap syringes live alongside normal syringes. They use fewer
materials to make, and are printed much faster.
---
<!--
This is default collapsed, readers click to expand it and see all your
media
The PR media section can get very large at times, so this is a good way
to keep it clean
The title is written using HTML tags
The title must be within the <summary> tags or you won't see it
-->
<details><summary><h1>Media</h1></summary>
<p>
https://github.com/user-attachments/assets/eb439050-b86d-49ba-b95e-22ab271f2358https://github.com/user-attachments/assets/9e8954ec-11c9-4569-820e-08b91e09f52b
</p>
</details>
---
# Changelog
<!--
You can add an author after the `🆑` to change the name that appears
in the changelog (ex: `🆑 Death`)
Leaving it blank will default to your GitHub display name
This includes all available types for the changelog
-->
🆑
- add: Added disposable syringes! These cheaper, quicker-to-produce
syringes let Chemists pick dosages while preparing medicine so that
doctors can inject without worrying about volume, but the syringes
cannot be used more than once.
(cherry picked from commit 5516dda48db268f5685e2c926d3dcbdb74ac7e1d)
* move SolutionTransfer to shared and predict as much as possible
* fully move OpenableSystem to shared now that SolutionTransfer is
* fix imports for everything
* doc for solution transfer system
* trolling
* add scoopable system
* make ash and foam scoopable
* untroll
* untroll real
* make clickable it work
* troll
* the scooping room
---------
Co-authored-by: deltanedas <@deltanedas:kde.org>
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
* stealthy hypo
* ExaminableSolution hand check when in covert implement.
ExaminableSolution now has 'hidden' datafield to enable chemical inspection only in hand.
* cleaning code
* more cleaning
* Hidden datafield renamed to HeldOnly
* review
---------
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
* Hyposprays Draw from Jugs
* Fix last onlyMobs usage in yml
* Some Suggested Changes
* Remove unnecessary datafield name declarations
* Remove unnecessary dirtying of component
* Same line parentheses
* Added client-side HypospraySystem
* Cache UI values and only updates if values change
* empty line
* Update label
* Label change
* Reimplement ReactionMixerSystem
* Remove DataField from Hypospray Toggle Mode
* Change ToggleMode from enum to Bool OnlyAffectsMobs
* Add DataField required back since it's required for replays...?
* update EligibleEntity and uses of it
* Add user argument back
* Adds newline
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
* Guard for dirty entity
* Adds summary tag
---------
Co-authored-by: Plykiya <plykiya@protonmail.com>
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
## Mirror of PR #25881: [Syringes that spawn with content start in
inject
mode](https://github.com/space-wizards/space-station-14/pull/25881) from
<img src="https://avatars.githubusercontent.com/u/10567778?v=4"
alt="space-wizards" width="22"/>
[space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14)
###### `5cb48c922fa7236d07b463f0c38ada2d5805e54b`
PR opened by <img
src="https://avatars.githubusercontent.com/u/58439124?v=4"
width="16"/><a href="https://github.com/Plykiya"> Plykiya</a> at
2024-03-06 13:43:59 UTC
PR merged by <img
src="https://avatars.githubusercontent.com/u/19864447?v=4"
width="16"/><a href="https://github.com/web-flow"> web-flow</a> at
2024-03-09 10:19:03 UTC
---
PR changed 3 files with 25 additions and 23 deletions.
The PR had the following labels:
- Status: Needs Review
---
<details open="true"><summary><h1>Original Body</h1></summary>
> <!-- Please read these guidelines before opening your PR:
https://docs.spacestation14.io/en/getting-started/pr-guideline -->
> <!-- The text between the arrows are comments - they will not be
visible on your PR. -->
>
> ## About the PR
> <!-- What did you change in this PR? -->
> Made it so that syringes that spawn with content start out in inject
mode rather than draw mode. Also got rid of unnecessary DataField names
if they matched.
>
> ## Why / Balance
> <!-- Why was it changed? Link any discussions or issues here. Please
discuss how this would affect game balance. -->
> Grab bic syringe from medkit, use it on patient, it's in draw mode by
default, cry.
>
> ## Technical details
> <!-- If this is a code change, summarize at high level how your new
code works. This makes it easier to review. -->
> I added a new yml entity for prefilled syringes that starts in inject
mode.
>
> I attempted to do it the "smart way" by changing the ComponentInit
code to check for the solution amount and toggle based on that, but for
some reason the solution was returning false on the server-side but not
on the client-side so there was a desync in the Inject state. Couldn't
really figure out how to fix it, so I just went with the dumb simple
method instead.
>
> ## Media
> <!--
> PRs which make ingame changes (adding clothing, items, new features,
etc) are required to have media attached that showcase the changes.
> Small fixes/refactors are exempt.
> Any media may be used in SS14 progress reports, with clear credit
given.
>
> If you're unsure whether your PR will require media, ask a maintainer.
>
> Check the box below to confirm that you have in fact seen this (put an
X in the brackets, like [X]):
> -->
>
> - [ X ] I have added screenshots/videos to this PR showcasing its
changes ingame, **or** this PR does not require an ingame showcase
>
> ## Breaking changes
> <!--
> List any breaking changes, including namespace, public
class/method/field changes, prototype renames; and provide instructions
for fixing them. This will be pasted in #codebase-changes.
> -->
> None
>
> **Changelog**
> <!--
> Make players aware of new features and changes that could affect how
they play the game by adding a Changelog entry. Please read the
Changelog guidelines located at:
https://docs.spacestation14.io/en/getting-started/pr-guideline#changelog
> -->
>
> <!--
> Make sure to take this Changelog template out of the comment block in
order for it to show up.
> 🆑
> - add: Added fun!
> - remove: Removed fun!
> - tweak: Changed fun!
> - fix: Fixed fun!
> -->
> 🆑
> - tweak: Pre-filled syringes start in inject mode now.
</details>
Signed-off-by: VMSolidus <evilexecutive@gmail.com>
Co-authored-by: Plykiya <58439124+Plykiya@users.noreply.github.com>
Co-authored-by: VMSolidus <evilexecutive@gmail.com>
## Mirror of PR #25566: [Cycle injector transfer amount on alt.
use](https://github.com/space-wizards/space-station-14/pull/25566) from
<img src="https://avatars.githubusercontent.com/u/10567778?v=4"
alt="space-wizards" width="22"/>
[space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14)
###### `ad6ac73f6f41d1cbd3fe80a43c8bf4b83e03f392`
PR opened by <img
src="https://avatars.githubusercontent.com/u/68151557?v=4"
width="16"/><a href="https://github.com/veprolet"> veprolet</a> at
2024-02-25 19:37:49 UTC
---
PR changed 3 files with 26 additions and 3 deletions.
The PR had the following labels:
- Status: Needs Review
---
<details open="true"><summary><h1>Original Body</h1></summary>
> ## About the PR
> When the user tries to use alternative interaction on an injector
capable of changing transfer volume, this will cycle between the maximal
and minimal transfer amount (defaulting to maximum if the value was
in-between the extremes).
>
> The interaction is only available with in-hand usage or empty-handed
usage. This is deliberate (but not necessarily correct).
> The interaction is only implemented for injectors and not arbitrary
containers capable of solution transfers. This is to limit the scope of
this PR.
>
> ## Why / Balance
> Changing the transfer amount was only possible using the context menu.
This was difficult and slow, but this tedium didn't seem to be a
valuable part of the gameplay experience.
>
> Instead of cycling over all the possible transfer amounts, the choice
has been made to only cycle between the two extremes. This is for two
reasons:
> - Scalability: If this is merged, we'll probably want the same
behavior for the other solution containers like jugs. It would be very
tedious (probably more tedious than using the context menu) to cycle to
the correct transfer amount with more available transfer amount steps.
It would also be IMO unintuitive to have a different behavior between
the two types of solution containers.
> - Simplicity: It is easier to reason about the next state this way.
Otherwise, one would have to figure out how many times to perform the
interaction to cycle to the desired amount, which involves knowing the
total number of steps for each injector/container, order of the current
step and modular arithmetic (or just cycling until you are at the
correct one, which is slow, error-prone and frustrating whenever you
overshoot).
>
> This decision has obviously some tradeoffs, but I feel like those are
manageable. If you need to transfer the in-between amounts, you can
usually switch to the minimal amount (I assume the property of
in-between amounts being a multiple of the minimum will be upheld in the
future) and click a few times. This is generally as tedious or less
tedious than cycling the amounts. There are some instances where you
can't do that. One example would be manual mixing of the advanced brute
medications. This is a niche use-case and can be still solved using the
context menu verb system and is supposed to be a bit more difficult
anyway.
>
> This also makes the alternative interaction a bit less predictable, as
it no longer always uses the first context menu verb. I think the
interaction is similar enough and inconsequential enough to justify
this.
>
> It makes the syringe marginally more powerful, but as this doesn't
introduce any previously unavailable actions, I believe this to be
perfectly acceptable and heavily outweighed by the convenience.
>
> ## Technical details
> ~~This introduces a new concept of "special alternative" interactions.
Those interactions have their own events and handlers.~~
>
> Please scrutinize the code hard ~~, because it touches some quite
fundamental parts of the game, and~~ I'm not too knowledgeable about C#
or the conventions of this repo. I tried to follow guidelines where
possible while not impacting the existing code too much, but maybe this
leads to too much weirdness in some places.
>
> ## Media
>

>
> - [X] I acknowledge that I have no idea how to showcase or record this
feature well, **or** I'm trying my best.
>
> ## Breaking changes
> N/A
>
> **Changelog**
> 🆑
> - tweak: Injectors like the syringe can now toggle their transfer
amount using alternative interactions.
>
</details>
Co-authored-by: SimpleStation14 <Unknown>
* refactor ops
* inherit dna and fiber when fish hydrated
* :trollface:
* kid named finger
* :trollface:
* move rehydrating to shared :trollface:
* nobody noticed the popup being missing all this time
* method ops
---------
Co-authored-by: deltanedas <@deltanedas:kde.org>
(cherry picked from commit 550612a37f4fd61088c994b289c833ed3d564855)
Also includes some (non critical) changes to the solution file to re-organize the Roslyn components.
(cherry picked from commit e00f74505c62310bd15aeaba8d6530f648397074)
* Add test for two chemistry issues
1. rounding issue with reaction processing when making chloral hydrate
2. reliable assert trip due to the ValidateSolution() heat capacity issue.
* Fix FixedPoint2 arithmetic
Fix internal floating point arithmetic in places where it could be avoided.
Fix incorrect rounding mode used in other places (it should always floor, like regular int arithmetic).
I had to add an explicit epsilon value for float -> FixedPoint2 because something like 1.05 is actually like 1.04999 and that'd cause it to be rounded down to 1.04.
This fixes reaction reagent processing in cases where the reagent inputs can't cleanly divide. Previously, when making 30u chloral hydrate by adding the chlorine in 10u increments you'd end up with 0.04 chlorine left over. This was caused by division in the reaction code rounding up in some cases. Changing division here to always round down fixes it.
* Attempt to fix heat capacity precision assert issues.
Fixes#22126
First, we just increase the tolerance of the assert. It was way too low.
Second, actually put a cap on float drift from one-off _heatCapacity changes.
* Fix float -> FixedPoint2 epsilon for negative number, fix tests.
* Fix DamageableTest
* Oh yeah I need to call CleanReturnAsync
(cherry picked from commit 33611b7094ba9540326a6f0f6edd2017640e61db)
At least the mode/transfer amount logic. Actual transfer logic needs Bloodstream which I didn't wanna move into shared.
(cherry picked from commit 6d8be538c90cf4c3a6636e2f8b84631af457cd42)
* move stuff to server and some refactoring
* update spikables to not use triggering
* add Delete bool just incase
* a new egg
* mom can we have webedit. no, we have webedit at home
---------
Co-authored-by: deltanedas <@deltanedas:kde.org>
(cherry picked from commit 55dbe26019ed22e11f017393c028c6760699343d)
* soap reagent and soapy water
* make soapy water recognizable
* Fix tile cleaning bug
CleanDecalsReaction was able to take more than the reactVolume it was given.
* make soapy water an evaporating reagent
* Tile reactions when mopping
* Fix indescribably soap flavor
* Adjust soap flavours
Soap and soapy water now taste clean and syndie soap tastes like punishment.
* Better soap numbers & DeleteOnSolutionEmpty
* Changed TrashOnEmpty to TrashOnSolutionEmpty
* Last TrashOnSolutionEmpty change
* Fix merged code not compiling
* Requested changes.
* Add DumpableSolutionComponent
Separates out the component from "DrainComponent" that allows one to drag a bucket/any reagent container onto a drain/sink/toilet to empty it and allows other reagent containers to reuse the code effortlessly.
* Give the ChemMaster 4000 the DumpableSolution Component
Allows drag and dropping solutions into the ChemMaster much like you used to be able to do exclusively with drains. This also allows dumping jugs into them.
* everything for mixing aside from yaml changes
* add recipe and canmix to bottles and the holy mixer tag to the bible
* fixes as a result of testing
* remove unused usings
* remove emptylines that are not required
Co-authored-by: 0x6273 <0x40@keemail.me>
* more empty line removal!
Co-authored-by: 0x6273 <0x40@keemail.me>
* add single space between if statement and condition
Co-authored-by: 0x6273 <0x40@keemail.me>
* fixes indentation on TryGetMixableSolution
* raise new AfterMixingEvent after attempting to mix a solution
* before mixing event and attempt get mixable solution event
* update reaction tests to be a beaker that can be mixed, and then pass a mixer component in to simulate mixing
* make two more beaker types mixable, add attribute for mixing feedback
* bible mix message
* mixing feedback on success
* updates test to use SpawnEntity over new as per feedback
Co-authored-by: 0x6273 <0x40@keemail.me>