Epinephrine + epipen (#5444)
* add sprite and basic entity, no reagent or testing * actually implement epinephrine and add it to the box * allow creating it * add it to nanomed * fig
@@ -21,8 +21,6 @@ namespace Content.Client.Chemistry.Visualizers
|
|||||||
{
|
{
|
||||||
base.OnChangeData(component);
|
base.OnChangeData(component);
|
||||||
|
|
||||||
if (_maxFillLevels <= 0 || _fillBaseName == null) return;
|
|
||||||
|
|
||||||
if (!component.TryGetData(SolutionContainerVisuals.VisualState,
|
if (!component.TryGetData(SolutionContainerVisuals.VisualState,
|
||||||
out SolutionContainerVisualState state)) return;
|
out SolutionContainerVisualState state)) return;
|
||||||
|
|
||||||
@@ -34,6 +32,8 @@ namespace Content.Client.Chemistry.Visualizers
|
|||||||
|
|
||||||
if (closestFillSprite > 0)
|
if (closestFillSprite > 0)
|
||||||
{
|
{
|
||||||
|
if (_fillBaseName == null) return;
|
||||||
|
|
||||||
sprite.LayerSetVisible(fillLayer, true);
|
sprite.LayerSetVisible(fillLayer, true);
|
||||||
|
|
||||||
var stateName = _fillBaseName + closestFillSprite;
|
var stateName = _fillBaseName + closestFillSprite;
|
||||||
|
|||||||
@@ -22,15 +22,15 @@ namespace Content.Server.Chemistry.Components
|
|||||||
[RegisterComponent]
|
[RegisterComponent]
|
||||||
public sealed class HyposprayComponent : SharedHyposprayComponent
|
public sealed class HyposprayComponent : SharedHyposprayComponent
|
||||||
{
|
{
|
||||||
[DataField("ClumsyFailChance")]
|
[DataField("clumsyFailChance")]
|
||||||
[ViewVariables(VVAccess.ReadWrite)]
|
[ViewVariables(VVAccess.ReadWrite)]
|
||||||
public float ClumsyFailChance { get; set; } = 0.5f;
|
public float ClumsyFailChance { get; set; } = 0.5f;
|
||||||
|
|
||||||
[DataField("TransferAmount")]
|
[DataField("transferAmount")]
|
||||||
[ViewVariables(VVAccess.ReadWrite)]
|
[ViewVariables(VVAccess.ReadWrite)]
|
||||||
public FixedPoint2 TransferAmount { get; set; } = FixedPoint2.New(5);
|
public FixedPoint2 TransferAmount { get; set; } = FixedPoint2.New(5);
|
||||||
|
|
||||||
[DataField("InjectSound")]
|
[DataField("injectSound")]
|
||||||
private SoundSpecifier _injectSound = new SoundPathSpecifier("/Audio/Items/hypospray.ogg");
|
private SoundSpecifier _injectSound = new SoundPathSpecifier("/Audio/Items/hypospray.ogg");
|
||||||
|
|
||||||
protected override void Initialize()
|
protected override void Initialize()
|
||||||
|
|||||||
@@ -26,9 +26,6 @@ namespace Content.Server.Chemistry.ReagentEffectConditions
|
|||||||
|
|
||||||
public override bool Condition(ReagentEffectArgs args)
|
public override bool Condition(ReagentEffectArgs args)
|
||||||
{
|
{
|
||||||
if (args.Reagent == null)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (Reagent == null)
|
if (Reagent == null)
|
||||||
Reagent = args.Reagent.ID;
|
Reagent = args.Reagent.ID;
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototy
|
|||||||
namespace Content.Server.Chemistry.ReagentEffects
|
namespace Content.Server.Chemistry.ReagentEffects
|
||||||
{
|
{
|
||||||
[UsedImplicitly]
|
[UsedImplicitly]
|
||||||
public class RemoveReagent : ReagentEffect
|
public class AdjustReagent : ReagentEffect
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The reagent ID to remove. Only one of this and <see cref="Group"/> should be active.
|
/// The reagent ID to remove. Only one of this and <see cref="Group"/> should be active.
|
||||||
@@ -34,9 +34,12 @@ namespace Content.Server.Chemistry.ReagentEffects
|
|||||||
if (args.Source != null)
|
if (args.Source != null)
|
||||||
{
|
{
|
||||||
var solutionSys = args.EntityManager.EntitySysManager.GetEntitySystem<SolutionContainerSystem>();
|
var solutionSys = args.EntityManager.EntitySysManager.GetEntitySystem<SolutionContainerSystem>();
|
||||||
if (Reagent != null && args.Source.ContainsReagent(Reagent))
|
if (Reagent != null)
|
||||||
{
|
{
|
||||||
solutionSys.TryRemoveReagent(args.SolutionEntity, args.Source, Reagent, Amount);
|
if (Amount < 0 && args.Source.ContainsReagent(Reagent))
|
||||||
|
solutionSys.TryRemoveReagent(args.SolutionEntity, args.Source, Reagent, -Amount);
|
||||||
|
if (Amount > 0)
|
||||||
|
solutionSys.TryAddReagent(args.SolutionEntity, args.Source, Reagent, Amount, out _);
|
||||||
}
|
}
|
||||||
else if (Group != null)
|
else if (Group != null)
|
||||||
{
|
{
|
||||||
@@ -45,7 +48,12 @@ namespace Content.Server.Chemistry.ReagentEffects
|
|||||||
{
|
{
|
||||||
var proto = prototypeMan.Index<ReagentPrototype>(quant.ReagentId);
|
var proto = prototypeMan.Index<ReagentPrototype>(quant.ReagentId);
|
||||||
if (proto.Metabolisms != null && proto.Metabolisms.ContainsKey(Group))
|
if (proto.Metabolisms != null && proto.Metabolisms.ContainsKey(Group))
|
||||||
|
{
|
||||||
|
if (Amount < 0)
|
||||||
solutionSys.TryRemoveReagent(args.SolutionEntity, args.Source, quant.ReagentId, Amount);
|
solutionSys.TryRemoveReagent(args.SolutionEntity, args.Source, quant.ReagentId, Amount);
|
||||||
|
if (Amount > 0)
|
||||||
|
solutionSys.TryAddReagent(args.SolutionEntity, args.Source, quant.ReagentId, Amount, out _);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,6 +4,7 @@ using Content.Shared.FixedPoint;
|
|||||||
using Robust.Shared.GameObjects;
|
using Robust.Shared.GameObjects;
|
||||||
using Robust.Shared.GameStates;
|
using Robust.Shared.GameStates;
|
||||||
using Robust.Shared.Serialization;
|
using Robust.Shared.Serialization;
|
||||||
|
using Robust.Shared.Serialization.Manager.Attributes;
|
||||||
|
|
||||||
namespace Content.Shared.Chemistry.Components
|
namespace Content.Shared.Chemistry.Components
|
||||||
{
|
{
|
||||||
@@ -11,7 +12,9 @@ namespace Content.Shared.Chemistry.Components
|
|||||||
public abstract class SharedHyposprayComponent : Component
|
public abstract class SharedHyposprayComponent : Component
|
||||||
{
|
{
|
||||||
public sealed override string Name => "Hypospray";
|
public sealed override string Name => "Hypospray";
|
||||||
public const string SolutionName = "hypospray";
|
|
||||||
|
[DataField("solutionName")]
|
||||||
|
public string SolutionName = "hypospray";
|
||||||
|
|
||||||
[Serializable, NetSerializable]
|
[Serializable, NetSerializable]
|
||||||
protected sealed class HyposprayComponentState : ComponentState
|
protected sealed class HyposprayComponentState : ComponentState
|
||||||
|
|||||||
@@ -332,11 +332,14 @@ namespace Content.Shared.StatusEffect
|
|||||||
/// <param name="time">The amount of time to add.</param>
|
/// <param name="time">The amount of time to add.</param>
|
||||||
/// <param name="status">The status effect component, should you already have it.</param>
|
/// <param name="status">The status effect component, should you already have it.</param>
|
||||||
public bool TryAddTime(EntityUid uid, string key, TimeSpan time,
|
public bool TryAddTime(EntityUid uid, string key, TimeSpan time,
|
||||||
StatusEffectsComponent? status = null)
|
StatusEffectsComponent? status=null,
|
||||||
|
SharedAlertsComponent? alert=null)
|
||||||
{
|
{
|
||||||
if (!Resolve(uid, ref status, false))
|
if (!Resolve(uid, ref status, false))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
Resolve(uid, ref alert, false);
|
||||||
|
|
||||||
if (!HasStatusEffect(uid, key, status))
|
if (!HasStatusEffect(uid, key, status))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -344,6 +347,14 @@ namespace Content.Shared.StatusEffect
|
|||||||
timer.Item2 += time;
|
timer.Item2 += time;
|
||||||
status.ActiveEffects[key].Cooldown = timer;
|
status.ActiveEffects[key].Cooldown = timer;
|
||||||
|
|
||||||
|
if (_prototypeManager.TryIndex<StatusEffectPrototype>(key, out var proto)
|
||||||
|
&& alert != null
|
||||||
|
&& proto.Alert != null)
|
||||||
|
{
|
||||||
|
alert.ShowAlert(proto.Alert.Value, cooldown: GetAlertCooldown(uid, proto.Alert.Value, status));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -355,11 +366,14 @@ namespace Content.Shared.StatusEffect
|
|||||||
/// <param name="time">The amount of time to add.</param>
|
/// <param name="time">The amount of time to add.</param>
|
||||||
/// <param name="status">The status effect component, should you already have it.</param>
|
/// <param name="status">The status effect component, should you already have it.</param>
|
||||||
public bool TryRemoveTime(EntityUid uid, string key, TimeSpan time,
|
public bool TryRemoveTime(EntityUid uid, string key, TimeSpan time,
|
||||||
StatusEffectsComponent? status = null)
|
StatusEffectsComponent? status=null,
|
||||||
|
SharedAlertsComponent? alert=null)
|
||||||
{
|
{
|
||||||
if (!Resolve(uid, ref status, false))
|
if (!Resolve(uid, ref status, false))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
Resolve(uid, ref alert, false);
|
||||||
|
|
||||||
if (!HasStatusEffect(uid, key, status))
|
if (!HasStatusEffect(uid, key, status))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -372,6 +386,14 @@ namespace Content.Shared.StatusEffect
|
|||||||
timer.Item2 -= time;
|
timer.Item2 -= time;
|
||||||
status.ActiveEffects[key].Cooldown = timer;
|
status.ActiveEffects[key].Cooldown = timer;
|
||||||
|
|
||||||
|
if (_prototypeManager.TryIndex<StatusEffectPrototype>(key, out var proto)
|
||||||
|
&& alert != null
|
||||||
|
&& proto.Alert != null)
|
||||||
|
{
|
||||||
|
alert.ShowAlert(proto.Alert.Value, cooldown: GetAlertCooldown(uid, proto.Alert.Value, status));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -94,7 +94,7 @@
|
|||||||
contents:
|
contents:
|
||||||
- id: ClothingMaskBreath
|
- id: ClothingMaskBreath
|
||||||
- id: EmergencyOxygenTankFilled
|
- id: EmergencyOxygenTankFilled
|
||||||
#- name: Injector
|
- id: EpinephrineMedipen
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
- state: box
|
- state: box
|
||||||
@@ -102,8 +102,8 @@
|
|||||||
- type: Item
|
- type: Item
|
||||||
size: 15
|
size: 15
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 15
|
capacity: 20
|
||||||
size: 15
|
size: 25
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: box of hugs
|
name: box of hugs
|
||||||
|
|||||||
@@ -6,3 +6,5 @@
|
|||||||
startingInventory:
|
startingInventory:
|
||||||
Brutepack: 5
|
Brutepack: 5
|
||||||
Ointment: 5
|
Ointment: 5
|
||||||
|
EpinephrineChemistryBottle: 3
|
||||||
|
Syringe: 5
|
||||||
|
|||||||
@@ -5,3 +5,5 @@
|
|||||||
startingInventory:
|
startingInventory:
|
||||||
Brutepack: 5
|
Brutepack: 5
|
||||||
Ointment: 5
|
Ointment: 5
|
||||||
|
EpinephrineChemistryBottle: 3
|
||||||
|
Syringe: 5
|
||||||
|
|||||||
@@ -18,3 +18,48 @@
|
|||||||
- type: ExaminableSolution
|
- type: ExaminableSolution
|
||||||
solution: hypospray
|
solution: hypospray
|
||||||
- type: Hypospray
|
- type: Hypospray
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
name: chemical medipen
|
||||||
|
parent: BaseItem
|
||||||
|
description: A sterile injector for rapid administration of drugs to patients. This one can't be refilled.
|
||||||
|
id: ChemicalMedipen
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Objects/Specific/Medical/medipen.rsi
|
||||||
|
netsync: false
|
||||||
|
layers:
|
||||||
|
- state: medipen
|
||||||
|
map: ["enum.SolutionContainerLayers.Fill"]
|
||||||
|
- type: Item
|
||||||
|
sprite: Objects/Specific/Medical/medipen.rsi
|
||||||
|
size: 5
|
||||||
|
- type: SolutionContainerManager
|
||||||
|
solutions:
|
||||||
|
pen:
|
||||||
|
maxVol: 15
|
||||||
|
- type: ExaminableSolution
|
||||||
|
solution: pen
|
||||||
|
- type: Hypospray
|
||||||
|
solutionName: pen
|
||||||
|
transferAmount: 15
|
||||||
|
- type: Appearance
|
||||||
|
visuals:
|
||||||
|
- type: SolutionContainerVisualizer
|
||||||
|
maxFillLevels: 1
|
||||||
|
changeColor: false
|
||||||
|
emptySpriteName: medipen_empty
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
name: epinephrine medipen
|
||||||
|
parent: ChemicalMedipen
|
||||||
|
id: EpinephrineMedipen
|
||||||
|
description: A rapid and safe way to stabilize patients in critical condition for personnel without advanced medical knowledge. Beware, as it's easy to overdose on epinephrine.
|
||||||
|
components:
|
||||||
|
- type: SolutionContainerManager
|
||||||
|
solutions:
|
||||||
|
pen:
|
||||||
|
maxVol: 15
|
||||||
|
reagents:
|
||||||
|
- ReagentId: Epinephrine
|
||||||
|
Quantity: 15
|
||||||
|
|||||||
@@ -109,3 +109,17 @@
|
|||||||
- type: SolutionContainerVisualizer
|
- type: SolutionContainerVisualizer
|
||||||
maxFillLevels: 6
|
maxFillLevels: 6
|
||||||
fillBaseName: bottle-4-
|
fillBaseName: bottle-4-
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
id: EpinephrineChemistryBottle
|
||||||
|
name: epinephrine bottle
|
||||||
|
parent: BaseChemistryEmptyBottle
|
||||||
|
components:
|
||||||
|
- type: SolutionContainerManager
|
||||||
|
solutions:
|
||||||
|
drink: # This solution name and target volume is hard-coded in ChemMasterComponent
|
||||||
|
maxVol: 30
|
||||||
|
reagents:
|
||||||
|
- ReagentId: Epinephrine
|
||||||
|
Quantity: 30
|
||||||
|
|
||||||
|
|||||||
17
Resources/Prototypes/Reagents/chemicals.yml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
- type: reagent
|
||||||
|
id: Acetone
|
||||||
|
name: acetone
|
||||||
|
desc: A slick, slightly carcinogenic liquid. Has a multitude of mundane uses in everyday life.
|
||||||
|
physicalDesc: acidic
|
||||||
|
color: "#AF14B7"
|
||||||
|
boilingPoint: 55.5
|
||||||
|
meltingPoint: -50.0
|
||||||
|
|
||||||
|
- type: reagent
|
||||||
|
id: Phenol
|
||||||
|
name: phenol
|
||||||
|
desc: An aromatic ring of carbon with a hydroxyl group. A useful precursor to some medicines, but has no healing properties on its own.
|
||||||
|
physicalDesc: acidic
|
||||||
|
color: "#E7EA91"
|
||||||
|
boilingPoint: 55.5
|
||||||
|
meltingPoint: -50.0
|
||||||
@@ -43,9 +43,9 @@
|
|||||||
metabolisms:
|
metabolisms:
|
||||||
Medicine:
|
Medicine:
|
||||||
effects:
|
effects:
|
||||||
- !type:RemoveReagent
|
- !type:AdjustReagent
|
||||||
reagent: Histamine
|
reagent: Histamine
|
||||||
amount: 3.0
|
amount: -3.0
|
||||||
- !type:GenericStatusEffect
|
- !type:GenericStatusEffect
|
||||||
key: Jitter
|
key: Jitter
|
||||||
time: 1.0
|
time: 1.0
|
||||||
@@ -180,6 +180,66 @@
|
|||||||
color: "#2d5708"
|
color: "#2d5708"
|
||||||
# TODO: GenericStatusEffect remove drunkenness
|
# TODO: GenericStatusEffect remove drunkenness
|
||||||
|
|
||||||
|
# this ones a doozy
|
||||||
|
- type: reagent
|
||||||
|
id: Epinephrine
|
||||||
|
name: epinephrine
|
||||||
|
desc: Effective at bringing people back from a critical state. Reduces some stun times. Easy to overdose on.
|
||||||
|
physicalDesc: odorless
|
||||||
|
color: "#d2fffa"
|
||||||
|
metabolisms:
|
||||||
|
Medicine:
|
||||||
|
effects:
|
||||||
|
- !type:HealthChange
|
||||||
|
conditions:
|
||||||
|
- !type:TotalDamage
|
||||||
|
# they gotta be in crit first
|
||||||
|
min: 100
|
||||||
|
- !type:ReagentThreshold
|
||||||
|
min: 0
|
||||||
|
max: 20
|
||||||
|
damage:
|
||||||
|
types:
|
||||||
|
Asphyxiation: -3
|
||||||
|
Poison: -0.5
|
||||||
|
groups:
|
||||||
|
Brute: -0.5
|
||||||
|
Burn: -0.5
|
||||||
|
- !type:HealthChange
|
||||||
|
conditions:
|
||||||
|
- !type:ReagentThreshold
|
||||||
|
min: 20
|
||||||
|
damage:
|
||||||
|
types:
|
||||||
|
Asphyxiation: 1
|
||||||
|
Poison: 1
|
||||||
|
- !type:AdjustReagent
|
||||||
|
reagent: Lexorin
|
||||||
|
amount: -2
|
||||||
|
- !type:AdjustReagent
|
||||||
|
conditions:
|
||||||
|
- !type:ReagentThreshold
|
||||||
|
reagent: Lexorin
|
||||||
|
min: 1
|
||||||
|
reagent: Epinephrine
|
||||||
|
amount: -1
|
||||||
|
- !type:AdjustReagent
|
||||||
|
probability: 0.1
|
||||||
|
conditions:
|
||||||
|
- !type:ReagentThreshold
|
||||||
|
reagent: Lexorin
|
||||||
|
min: 1
|
||||||
|
reagent: Histamine
|
||||||
|
amount: 4
|
||||||
|
- !type:GenericStatusEffect
|
||||||
|
key: Stun
|
||||||
|
time: 0.25
|
||||||
|
type: Remove
|
||||||
|
- !type:GenericStatusEffect
|
||||||
|
key: KnockedDown
|
||||||
|
time: 0.25
|
||||||
|
type: Remove
|
||||||
|
|
||||||
- type: reagent
|
- type: reagent
|
||||||
id: Hyperzine
|
id: Hyperzine
|
||||||
name: hyperzine
|
name: hyperzine
|
||||||
|
|||||||
@@ -112,9 +112,9 @@
|
|||||||
damage:
|
damage:
|
||||||
types:
|
types:
|
||||||
Poison: 3
|
Poison: 3
|
||||||
- !type:RemoveReagent
|
- !type:AdjustReagent
|
||||||
reagent: Inaprovaline
|
reagent: Inaprovaline
|
||||||
amount: 2
|
amount: -2.0
|
||||||
reactiveEffects:
|
reactiveEffects:
|
||||||
Flammable:
|
Flammable:
|
||||||
methods: [ Touch ]
|
methods: [ Touch ]
|
||||||
|
|||||||
@@ -18,6 +18,30 @@
|
|||||||
products:
|
products:
|
||||||
Diethylamine: 2
|
Diethylamine: 2
|
||||||
|
|
||||||
|
- type: reaction
|
||||||
|
id: Phenol
|
||||||
|
reactants:
|
||||||
|
Water:
|
||||||
|
amount: 1
|
||||||
|
Chlorine:
|
||||||
|
amount: 1
|
||||||
|
Oil:
|
||||||
|
amount: 1
|
||||||
|
products:
|
||||||
|
Phenol: 3
|
||||||
|
|
||||||
|
- type: reaction
|
||||||
|
id: Acetone
|
||||||
|
reactants:
|
||||||
|
Oil:
|
||||||
|
amount: 1
|
||||||
|
WeldingFuel:
|
||||||
|
amount: 1
|
||||||
|
Oxygen:
|
||||||
|
amount: 1
|
||||||
|
products:
|
||||||
|
Acetone: 2
|
||||||
|
|
||||||
- type: reaction
|
- type: reaction
|
||||||
id: FoamingAgent
|
id: FoamingAgent
|
||||||
reactants:
|
reactants:
|
||||||
@@ -206,16 +230,6 @@
|
|||||||
products:
|
products:
|
||||||
UnstableMutagen: 3
|
UnstableMutagen: 3
|
||||||
|
|
||||||
- type: reaction
|
|
||||||
id: Water
|
|
||||||
reactants:
|
|
||||||
Hydrogen:
|
|
||||||
amount: 1
|
|
||||||
Oxygen:
|
|
||||||
amount: 1
|
|
||||||
products:
|
|
||||||
Water: 2
|
|
||||||
|
|
||||||
- type: reaction
|
- type: reaction
|
||||||
id: Oil
|
id: Oil
|
||||||
reactants:
|
reactants:
|
||||||
|
|||||||
@@ -66,6 +66,24 @@
|
|||||||
products:
|
products:
|
||||||
Cryoxadone: 3
|
Cryoxadone: 3
|
||||||
|
|
||||||
|
- type: reaction
|
||||||
|
id: Epinephrine
|
||||||
|
reactants:
|
||||||
|
Phenol:
|
||||||
|
amount: 1
|
||||||
|
Acetone:
|
||||||
|
amount: 1
|
||||||
|
Diethylamine:
|
||||||
|
amount: 1
|
||||||
|
Oxygen:
|
||||||
|
amount: 1
|
||||||
|
Chlorine:
|
||||||
|
amount: 1
|
||||||
|
Hydrogen:
|
||||||
|
amount: 1
|
||||||
|
products:
|
||||||
|
Epinephrine: 6
|
||||||
|
|
||||||
- type: reaction
|
- type: reaction
|
||||||
id: Clonexadone
|
id: Clonexadone
|
||||||
reactants:
|
reactants:
|
||||||
|
|||||||
|
After Width: | Height: | Size: 239 B |
|
After Width: | Height: | Size: 292 B |
|
After Width: | Height: | Size: 306 B |
|
After Width: | Height: | Size: 338 B |
|
After Width: | Height: | Size: 298 B |
|
After Width: | Height: | Size: 338 B |
|
After Width: | Height: | Size: 341 B |
|
After Width: | Height: | Size: 326 B |
|
After Width: | Height: | Size: 283 B |
|
After Width: | Height: | Size: 338 B |
@@ -0,0 +1,77 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "tgstation at 986af32e22a88dae14fd147d812a5a4d27c1bc30",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "medipen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "firstaid"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "firstaid_empty"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hypovolemic"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hypovolemic_empty"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "medipen_empty"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stimpen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stimpen_empty"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "morphen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "morphen_empty"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "oxapen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "oxapen_empty"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "penacid"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "penacid_empty"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "salacid"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "salacid_empty"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "salpen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "salpen_empty"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "atropen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "atropen_empty"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "medipen-inhand-left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "medipen-inhand-right"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 249 B |
|
After Width: | Height: | Size: 302 B |
|
After Width: | Height: | Size: 255 B |
|
After Width: | Height: | Size: 306 B |
|
After Width: | Height: | Size: 248 B |
|
After Width: | Height: | Size: 303 B |
|
After Width: | Height: | Size: 250 B |
|
After Width: | Height: | Size: 304 B |
|
After Width: | Height: | Size: 244 B |
|
After Width: | Height: | Size: 297 B |
|
After Width: | Height: | Size: 265 B |
|
After Width: | Height: | Size: 329 B |