Adds DamageMetabolism and some simple chems (#3958)

* adds damage metabolism

* tweaks words

* metabolism is kinda weird

* adds some simple chemicals

* renames DamageMetabolism to HealthChangeMetabolism

* tweaks like one chemical because it was annoying

* did some changes that the sloth told me to

* adds summary comments for those foolish enough to try and understand my code

* rewrites the component so that is uses a more elegant solution, and handles decimals

* Updates with suggestions from review

* changes stuff idk:

* git cringe

* changes one tiny lil thing

* Apply YAML suggestions

Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>

Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>
This commit is contained in:
ScalyChimp
2021-06-05 14:23:09 +08:00
committed by GitHub
parent 0315aa0dbc
commit 31fc7f63b5
2 changed files with 115 additions and 2 deletions

View File

@@ -0,0 +1,68 @@
using Content.Server.GameObjects.Components.Nutrition;
using Content.Shared.Chemistry;
using Content.Shared.Interfaces.Chemistry;
using Robust.Shared.GameObjects;
using Robust.Shared.Serialization.Manager.Attributes;
using Content.Shared.Damage;
using Content.Shared.GameObjects.Components.Damage;
namespace Content.Server.Chemistry.Metabolism
{
/// <summary>
/// Default metabolism for medicine reagents. Attempts to find a DamageableComponent on the target,
/// and to update its damage values.
/// </summary>
[DataDefinition]
public class HealthChangeMetabolism : IMetabolizable
{
/// <summary>
/// How much of the reagent should be metabolized each sec.
/// </summary>
[DataField("rate")]
public ReagentUnit MetabolismRate { get; set; } = ReagentUnit.New(1);
/// <summary>
/// How much damage is changed when 1u of the reagent is metabolized.
/// </summary>
[DataField("healthChange")]
public float HealthChange { get; set; } = 1.0f;
/// <summary>
/// Class of damage changed, Brute, Burn, Toxin, Airloss.
/// </summary>
[DataField("damageClass")]
public DamageClass DamageType { get; set; } = DamageClass.Brute;
private float _accumulatedHealth;
/// <summary>
/// Remove reagent at set rate, changes damage if a DamageableComponent can be found.
/// </summary>
/// <param name="solutionEntity"></param>
/// <param name="reagentId"></param>
/// <param name="tickTime"></param>
/// <returns></returns>
ReagentUnit IMetabolizable.Metabolize(IEntity solutionEntity, string reagentId, float tickTime)
{
if (solutionEntity.TryGetComponent(out IDamageableComponent? health))
{
health.ChangeDamage(DamageType, (int)HealthChange, true);
float decHealthChange = (float) (HealthChange - (int) HealthChange);
_accumulatedHealth += decHealthChange;
if (_accumulatedHealth >= 1)
{
health.ChangeDamage(DamageType, 1, true);
_accumulatedHealth -= 1;
}
else if(_accumulatedHealth <= -1)
{
health.ChangeDamage(DamageType, -1, true);
_accumulatedHealth += 1;
}
}
return MetabolismRate;
}
}
}

View File

@@ -18,6 +18,10 @@
desc: A broad-spectrum anti-toxin, which treats toxin damage in the blood stream. Overdosing will cause vomiting, dizzyness and pain. desc: A broad-spectrum anti-toxin, which treats toxin damage in the blood stream. Overdosing will cause vomiting, dizzyness and pain.
physicalDesc: translucent physicalDesc: translucent
color: "#3a1d8a" color: "#3a1d8a"
metabolism:
- !type:HealthChangeMetabolism
healthChange: -1
damageClass: Toxin
plantMetabolism: plantMetabolism:
- !type:AdjustToxins - !type:AdjustToxins
amount: -10 amount: -10
@@ -30,6 +34,13 @@
desc: A slightly unstable medication used for the most extreme any serious case of radiation poisoning. Lowers radiation level at over twice the rate Hyronalin does and will heal toxin damage at the same time. Deals very minor brute damage to the patient over time, but the patient's body will typically out-regenerate it easily. desc: A slightly unstable medication used for the most extreme any serious case of radiation poisoning. Lowers radiation level at over twice the rate Hyronalin does and will heal toxin damage at the same time. Deals very minor brute damage to the patient over time, but the patient's body will typically out-regenerate it easily.
physicalDesc: cloudy physicalDesc: cloudy
color: "#bd5902" color: "#bd5902"
metabolism:
- !type:HealthChangeMetabolism
healthChange: -1
damageClass: Toxin #I think you need multiple of these components for different types of damage so I'll maybe change it to work better in the future
- !type:HealthChangeMetabolism
healthChange: 0.5
damageClass: Brute
- type: reagent - type: reagent
id: Bicaridine id: Bicaridine
@@ -37,6 +48,10 @@
desc: An analgesic which is highly effective at treating brute damage. It is useful for stabilizing people who have been severely beaten, as well as treating less life-threatening injuries. In the case of bleeding (internal or external), bicaridine will slow down the bleeding heavily. If the dosage exceeds the overdose limit, it'll stop it outright. desc: An analgesic which is highly effective at treating brute damage. It is useful for stabilizing people who have been severely beaten, as well as treating less life-threatening injuries. In the case of bleeding (internal or external), bicaridine will slow down the bleeding heavily. If the dosage exceeds the overdose limit, it'll stop it outright.
physicalDesc: opaque physicalDesc: opaque
color: "#ffaa00" color: "#ffaa00"
metabolism:
- !type:HealthChangeMetabolism
healthChange: -2
damageClass: Brute
- type: reagent - type: reagent
id: Cryoxadone id: Cryoxadone
@@ -75,6 +90,10 @@
desc: An advanced chemical that is more effective at treating burn damage than Kelotane. desc: An advanced chemical that is more effective at treating burn damage than Kelotane.
physicalDesc: translucent physicalDesc: translucent
color: "#215263" color: "#215263"
metabolism:
- !type:HealthChangeMetabolism
healthChange: -3
damageClass: Burn
- type: reagent - type: reagent
id: Dexalin id: Dexalin
@@ -82,6 +101,10 @@
desc: Used for treating oxygen deprivation. In most cases where it is likely to be needed, the strength of Dexalin Plus will probably be more useful (Results in 1 unit instead of 2). desc: Used for treating oxygen deprivation. In most cases where it is likely to be needed, the strength of Dexalin Plus will probably be more useful (Results in 1 unit instead of 2).
physicalDesc: opaque physicalDesc: opaque
color: "#0041a8" color: "#0041a8"
metabolism:
- !type:HealthChangeMetabolism
healthChange: -1
damageClass: Airloss #this may be asphyxiation
- type: reagent - type: reagent
id: DexalinPlus id: DexalinPlus
@@ -89,6 +112,10 @@
desc: Used in treatment of extreme cases of oxygen deprivation. Even a single unit immediately counters all oxygen loss, which is hugely useful in many circumstances. Any dose beyond this will continue to counter oxygen loss until it is metabolized, essentially removing the need to breathe. desc: Used in treatment of extreme cases of oxygen deprivation. Even a single unit immediately counters all oxygen loss, which is hugely useful in many circumstances. Any dose beyond this will continue to counter oxygen loss until it is metabolized, essentially removing the need to breathe.
physicalDesc: cloudy physicalDesc: cloudy
color: "#4da0bd" color: "#4da0bd"
metabolism:
- !type:HealthChangeMetabolism
healthChange: -3
damageClass: Airloss
- type: reagent - type: reagent
id: Ethylredoxrazine id: Ethylredoxrazine
@@ -138,6 +165,10 @@
desc: Treats burn damage and prevents infection. desc: Treats burn damage and prevents infection.
physicalDesc: strong-smelling physicalDesc: strong-smelling
color: "#bf3d19" color: "#bf3d19"
metabolism:
- !type:HealthChangeMetabolism
healthChange: -1
damageClass: Burn
- type: reagent - type: reagent
id: Leporazine id: Leporazine
@@ -194,6 +225,11 @@
desc: Toxic, but treats hallucinations, drowsiness & halves the duration of paralysis, stuns and knockdowns. It is metabolized very slowly. One unit is enough to treat hallucinations; two units is deadly. desc: Toxic, but treats hallucinations, drowsiness & halves the duration of paralysis, stuns and knockdowns. It is metabolized very slowly. One unit is enough to treat hallucinations; two units is deadly.
physicalDesc: pungent physicalDesc: pungent
color: "#d49a2f" color: "#d49a2f"
metabolism:
- !type:HealthChangeMetabolism
healthChange: 3 #you probably need something else for the "two units is deadly".
damageClass: Toxin
rate: 0.2
- type: reagent - type: reagent
id: Tramadol id: Tramadol
@@ -253,6 +289,10 @@
plantMetabolism: plantMetabolism:
- !type:AdjustToxins - !type:AdjustToxins
amount: 10 amount: 10
metabolism:
- !type:HealthChangeMetabolism
healthChange: 1
damageClass: Airloss
- type: reagent - type: reagent
id: Impedrezene id: Impedrezene
@@ -267,6 +307,11 @@
desc: Temporarily stops respiration and causes tissue damage. Large doses are fatal, and will cause people to pass out very quickly. Dexalin and Dexalin Plus will both remove it, however. desc: Temporarily stops respiration and causes tissue damage. Large doses are fatal, and will cause people to pass out very quickly. Dexalin and Dexalin Plus will both remove it, however.
physicalDesc: pungent physicalDesc: pungent
color: "#6b0007" color: "#6b0007"
metabolism:
- !type:HealthChangeMetabolism
healthChange: 7
damageClass: Airloss
- type: reagent - type: reagent
id: Lipozine id: Lipozine