thusd refactoring

This commit is contained in:
Janet Blackquill
2025-10-03 12:21:48 -04:00
parent b1abd81c54
commit 579ea90d49
33 changed files with 136 additions and 83 deletions

View File

@@ -90,8 +90,8 @@ namespace Content.Client.HealthAnalyzer.UI
// Begin Offbrand Tooltips
_brainHealthTooltip.Update(msg);
_bloodPressureTooltip.Update(msg);
_bloodOxygenationTooltip.Update(msg, (target.Value, damageable));
_heartRateTooltip.Update(msg, (target.Value, damageable));
_bloodOxygenationTooltip.Update(msg, (target.Value, damageable, _entityManager.GetComponentOrNull<HeartrateComponent>(target)));
_heartRateTooltip.Update(msg, (target.Value, damageable, _entityManager.GetComponentOrNull<HeartrateComponent>(target)));
_bloodFlowTooltip.Update(msg);
_heartHealthTooltip.Update(msg);
_temperatureTooltip.Update(msg, (target.Value, _entityManager.GetComponentOrNull<CryostasisFactorComponent>(target)));

View File

@@ -1,3 +1,4 @@
using Content.Shared._Offbrand.Wounds;
using Content.Shared.Damage;
using Content.Shared.FixedPoint;
using Content.Shared.MedicalScanner;
@@ -16,13 +17,16 @@ public sealed partial class BloodOxygenationTooltip : PanelContainer
RobustXamlLoader.Load(this);
}
public void Update(HealthAnalyzerScannedUserMessage msg, Entity<DamageableComponent> ent)
public void Update(HealthAnalyzerScannedUserMessage msg, Entity<DamageableComponent, HeartrateComponent?> ent)
{
if (msg.WoundableData is not { } woundable)
return;
if (ent.Comp2?.AsphyxiationDamage is not { } damageType)
return;
var asphyxiation = FixedPoint2.Zero;
ent.Comp.Damage.DamageDict.TryGetValue("Asphyxiation", out asphyxiation);
ent.Comp1.Damage.DamageDict.TryGetValue(damageType, out asphyxiation);
var (systolic, diastolic) = woundable.BloodPressure;
Label.Text = Loc.GetString("health-analyzer-blood-saturation-tooltip", ("rating", woundable.BloodOxygenationRating), ("systolic", systolic), ("diastolic", diastolic), ("asphyxiation", asphyxiation));

View File

@@ -1,3 +1,4 @@
using Content.Shared._Offbrand.Wounds;
using Content.Shared.Damage;
using Content.Shared.FixedPoint;
using Content.Shared.MedicalScanner;
@@ -16,13 +17,16 @@ public sealed partial class HeartRateTooltip : PanelContainer
RobustXamlLoader.Load(this);
}
public void Update(HealthAnalyzerScannedUserMessage msg, Entity<DamageableComponent> ent)
public void Update(HealthAnalyzerScannedUserMessage msg, Entity<DamageableComponent, HeartrateComponent?> ent)
{
if (msg.WoundableData is not { } woundable)
return;
if (ent.Comp2?.AsphyxiationDamage is not { } damageType)
return;
var asphyxiation = FixedPoint2.Zero;
ent.Comp.Damage.DamageDict.TryGetValue("Asphyxiation", out asphyxiation);
ent.Comp1.Damage.DamageDict.TryGetValue(damageType, out asphyxiation);
Label.Text = Loc.GetString("health-analyzer-heart-rate-tooltip", ("asphyxiation", asphyxiation));
}

View File

@@ -34,7 +34,7 @@ public sealed class DamageOverlayUiController : UIController
SubscribeLocalEvent<LocalPlayerDetachedEvent>(OnPlayerDetached);
SubscribeLocalEvent<MobStateChangedEvent>(OnMobStateChanged);
SubscribeLocalEvent<MobThresholdChecked>(OnThresholdCheck);
SubscribeLocalEvent<PotentiallyUpdateDamageOverlay>(OnPotentiallyUpdateDamageOverlay); // Offbrand
SubscribeLocalEvent<bPotentiallyUpdateDamageOverlayEventb>(OnPotentiallyUpdateDamageOverlay); // Offbrand
}
private void OnPlayerAttach(LocalPlayerAttachedEvent args)
@@ -86,7 +86,7 @@ public sealed class DamageOverlayUiController : UIController
TryUpdateWoundableOverlays(entity);
}
private void OnPotentiallyUpdateDamageOverlay(ref PotentiallyUpdateDamageOverlay args)
private void OnPotentiallyUpdateDamageOverlay(ref bPotentiallyUpdateDamageOverlayEventb args)
{
if (args.Target != _playerManager.LocalEntity)
return;

View File

@@ -17,9 +17,14 @@ public sealed class SurgeryGuideBoundUserInterface : BoundUserInterface
{
base.Open();
if (!EntMan.TryGetComponent<SurgeryGuideTargetComponent>(Owner, out var comp))
return;
_menu = this.CreateWindow<SurgeryGuideMenu>();
_menu.Category = comp.Category;
_menu.OnSurgerySelected += OnSurgerySelected;
_menu.OnCleanUp += OnCleanUp;
_menu.Populate();
}
private void OnSurgerySelected(ProtoId<ConstructionPrototype> surgery)

View File

@@ -26,6 +26,7 @@ public sealed partial class SurgeryGuideMenu : FancyWindow
public event Action? OnCleanUp;
private ConstructionPrototype? _selectedSurgery;
public string Category = string.Empty;
public SurgeryGuideMenu()
{
@@ -53,8 +54,6 @@ public sealed partial class SurgeryGuideMenu : FancyWindow
PossibleSurgeries.GenerateItem += GenerateButton;
PossibleSurgeries.ItemKeyBindDown += OnSelectSurgery;
Populate();
}
protected override void ExitedTree()
@@ -129,14 +128,22 @@ public sealed partial class SurgeryGuideMenu : FancyWindow
foreach (var proto in _prototypeManager.EnumeratePrototypes<ConstructionPrototype>())
{
if (proto.Category != "Surgery")
if (proto.Category != Category)
continue;
listData.Add(new SurgeryListData(proto));
}
listData.Sort((
a, b) => string.Compare(Loc.GetString(a.Construction.SetName!.Value), Loc.GetString(b.Construction.SetName!.Value), StringComparison.InvariantCulture));
listData.Sort((a, b) =>
{
if (a.Construction.SetName is not { } aName)
throw new InvalidOperationException($"Construction {a.Construction.ID} does not have a name");
if (b.Construction.SetName is not { } bName)
throw new InvalidOperationException($"Construction {b.Construction.ID} does not have a name");
return string.Compare(Loc.GetString(aName), Loc.GetString(bName), StringComparison.InvariantCulture);
});
PossibleSurgeries.PopulateList(listData);
}

View File

@@ -138,7 +138,7 @@ namespace Content.IntegrationTests.Tests.Construction
foreach (var proto in protoMan.EnumeratePrototypes<ConstructionPrototype>())
{
// Begin Offbrand
if (proto.Type == ConstructionType.Surgery)
if (proto.Type == ConstructionType.NodeToNode)
continue;
// End Offbrand
var start = proto.StartNode;

View File

@@ -274,7 +274,7 @@ namespace Content.Server.Body.Systems
if (ent.Comp1.MetabolizingReagents.Contains(metaboliteReagent))
continue;
if (!_prototypeManager.TryIndex(metaboliteReagent, out var proto) || proto.Metabolisms is not { } metabolisms)
if (!_prototypeManager.Resolve(metaboliteReagent, out var proto) || proto.Metabolisms is not { } metabolisms)
continue;
if (ent.Comp1.MetabolismGroups is null)

View File

@@ -146,7 +146,7 @@ public sealed class SolutionInjectOnCollideSystem : EntitySystem
foreach (var targetBloodstream in targetBloodstreams)
{
// Begin Offbrand
var beforeInject = new Content.Shared._Offbrand.Chemistry.BeforeInjectOnEventEvent { InjectionAmount = volumePerBloodstream };
var beforeInject = new Content.Shared._Offbrand.Chemistry.BeforeInjectOnEventEvent(volumePerBloodstream);
RaiseLocalEvent(targetBloodstream, ref beforeInject);
if (beforeInject.InjectionAmount < 0)
continue;

View File

@@ -88,19 +88,13 @@ namespace Content.Server.Construction
args.PushMarkup(Loc.GetString("deconstruction-header-text") + "\n");
}
// Begin Offbrand
else if (target.SurgeryName is { } surgery)
{
args.PushMarkup(Loc.GetString(
"construction-component-to-perform-header",
("name", Loc.GetString(surgery))) + "\n");
}
// End Offbrand
else
{
args.PushMarkup(Loc.GetString(
"construction-component-to-create-header",
("targetName", target.Name)) + "\n");
target.Header,
("targetName", target.LocalizedName is { } name ? Loc.GetString(name) : target.Name)) + "\n");
}
// End Offbrand
}
if (component.EdgeIndex == null && GetTargetEdge(uid, component) is {} targetEdge)
@@ -175,7 +169,7 @@ namespace Content.Server.Construction
{
Localization = construction.Type switch {
ConstructionType.Structure => "construction-presenter-to-build",
ConstructionType.Surgery => "construction-presenter-to-surgery",
ConstructionType.NodeToNode => "construction-presenter-to-node-to-node", // Offbrand
_ => "construction-presenter-to-craft",
},
EntryNumber = step,
@@ -194,7 +188,7 @@ namespace Content.Server.Construction
return null;
// First steps are handled specially.
if (step == 1 && construction.Category != "Surgery") // Offbrand
if (step == 1 && construction.Type != ConstructionType.NodeToNode) // Offbrand
{
foreach (var graphStep in edge.Steps)
{

View File

@@ -211,13 +211,7 @@ public sealed partial class RevenantSystem
//KILL THEMMMM
// Begin Offbrand Removals
// if (!_mobThresholdSystem.TryGetThresholdForState(args.Args.Target.Value, MobState.Dead, out var damage))
// return;
// End Offbrand Removals
DamageSpecifier dspec = new();
dspec.DamageDict.Add("Cold", component.HarvestColdDamage); // Offbrand - use a fixed amount of cold
_damage.TryChangeDamage(args.Args.Target, dspec, true, origin: uid);
_damage.TryChangeDamage(args.Args.Target, component.HarvestDamage, true, origin: uid); // Offbrand - use a fixed amount
args.Handled = true;
}

View File

@@ -4,6 +4,9 @@ using Robust.Shared.Prototypes;
namespace Content.Server._Offbrand.Surgery;
/// <summary>
/// Sets the current node of the construction graph, and clears the pathfinding target if the repeat conditions are not met
/// </summary>
[DataDefinition]
public sealed partial class SetNode : IGraphAction
{

View File

@@ -12,7 +12,7 @@ public sealed class SurgeryGuideTargetSystem : SharedSurgeryGuideTargetSystem
protected override void OnStartSurgery(Entity<SurgeryGuideTargetComponent> ent, ref SurgeryGuideStartSurgeryMessage args)
{
base.OnStartSurgery(ent, ref args);
if (!_prototype.TryIndex(args.Prototype, out var construction))
if (!_prototype.Resolve(args.Prototype, out var construction))
return;
_construction.SetPathfindingTarget(ent, construction.TargetNode);

View File

@@ -8,9 +8,15 @@ namespace Content.Server._Offbrand.VariationPass;
[RegisterComponent]
public sealed partial class SupplyNearLatheVariationPassComponent : Component
{
/// <summary>
/// The prototype of the lathe to look for
/// </summary>
[DataField(required: true)]
public EntProtoId LathePrototype;
/// <summary>
/// The entity to spawn on said lathe
/// </summary>
[DataField(required: true)]
public EntProtoId EntityToSpawn;
}

View File

@@ -329,7 +329,7 @@ namespace Content.Shared.Chemistry.Reagent
public string? Describe(IPrototypeManager prototype, IEntitySystemManager entSys)
{
if (!prototype.TryIndex(StatusEffect, out var effectProtoData))
if (!prototype.Resolve(StatusEffect, out var effectProtoData))
return null;
return Loc.GetString("reagent-guidebook-status-effect", ("effect", effectProtoData.Name ?? string.Empty),

View File

@@ -33,7 +33,10 @@ namespace Content.Shared.Construction
// Begin Offbrand
[DataField]
public LocId? SurgeryName;
public LocId? LocalizedName;
[DataField]
public LocId Header = "construction-component-to-create-header";
// End Offbrand
/// <summary>

View File

@@ -98,5 +98,5 @@ public enum ConstructionType
{
Structure,
Item,
Surgery, // Offbrand
NodeToNode, // Offbrand
}

View File

@@ -443,7 +443,7 @@ public sealed class MobThresholdSystem : EntitySystem
// Begin Offbrand
private void MobThresholdMapInit(Entity<MobThresholdsComponent> ent, ref MapInitEvent args)
{
var overlayUpdate = new Content.Shared._Offbrand.Wounds.PotentiallyUpdateDamageOverlay(ent);
var overlayUpdate = new Content.Shared._Offbrand.Wounds.bPotentiallyUpdateDamageOverlayEventb(ent);
RaiseLocalEvent(ent, ref overlayUpdate);
}
// End Offbrand

View File

@@ -221,5 +221,11 @@ public sealed partial class RevenantComponent : Component
/// Offbrand - how much cold damage to deal on harvest
/// </summary>
[DataField]
public FixedPoint2 HarvestColdDamage = 200;
public Content.Shared.Damage.DamageSpecifier HarvestDamage = new()
{
DamageDict = new()
{
{ "Cold", 200 },
}
};
}

View File

@@ -3,6 +3,9 @@ using Robust.Shared.Prototypes;
namespace Content.Shared._Offbrand.Buckle;
/// <summary>
/// Applies a status effect to the strapped entity whilst it is strapped
/// </summary>
[RegisterComponent, NetworkedComponent]
[Access(typeof(StatusEffectOnStrapSystem))]
public sealed partial class StatusEffectOnStrapComponent : Component

View File

@@ -2,8 +2,11 @@ using Content.Shared.FixedPoint;
namespace Content.Shared._Offbrand.Chemistry;
/// <summary>
/// Event raised before injecting in response to an event, to allow modifying how much is injected
/// </summary>
[ByRefEvent]
public struct BeforeInjectOnEventEvent
public struct BeforeInjectOnEventEvent(FixedPoint2 injectionAmount)
{
public FixedPoint2 InjectionAmount;
public FixedPoint2 InjectionAmount = injectionAmount;
}

View File

@@ -1,8 +1,10 @@
using Content.Shared.Chemistry.Reagent;
using Content.Shared.EntityEffects;
using Content.Shared.FixedPoint;
using Content.Shared.Random.Helpers;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
using Robust.Shared.Timing;
namespace Content.Shared._Offbrand.EntityEffects;
@@ -25,7 +27,11 @@ public sealed partial class AdjustReagentGaussian : EntityEffect
if (reagentArgs.Source == null)
return;
var rand = IoCManager.Resolve<IRobustRandom>();
var timing = IoCManager.Resolve<IGameTiming>();
var seed = SharedRandomExtensions.HashCodeCombine(new() { (int)timing.CurTick.Value, args.EntityManager.GetNetEntity(args.TargetEntity).Id });
var rand = new System.Random(seed);
var amount = rand.NextGaussian(μ, σ);
amount *= reagentArgs.Scale.Double();

View File

@@ -5,7 +5,11 @@ using Robust.Shared.Serialization;
namespace Content.Shared._Offbrand.Surgery;
[RegisterComponent]
public sealed partial class SurgeryGuideTargetComponent : Component;
public sealed partial class SurgeryGuideTargetComponent : Component
{
[DataField]
public string Category = "Surgery";
}
[Serializable, NetSerializable]
public enum SurgeryGuideUiKey : byte

View File

@@ -42,7 +42,7 @@ public sealed partial class BrainDamageSystem : EntitySystem
var notifDamage = new AfterBrainDamageChanged();
RaiseLocalEvent(ent, ref notifDamage);
var overlays = new PotentiallyUpdateDamageOverlay(ent);
var overlays = new bPotentiallyUpdateDamageOverlayEventb(ent);
RaiseLocalEvent(ent, ref overlays, true);
}
@@ -97,7 +97,7 @@ public sealed partial class BrainDamageSystem : EntitySystem
var notifDamage = new AfterBrainDamageChanged();
RaiseLocalEvent(ent, ref notifDamage);
var overlays = new PotentiallyUpdateDamageOverlay(ent);
var overlays = new bPotentiallyUpdateDamageOverlayEventb(ent);
RaiseLocalEvent(ent, ref overlays, true);
}
@@ -112,7 +112,7 @@ public sealed partial class BrainDamageSystem : EntitySystem
var notif = new AfterBrainDamageChanged();
RaiseLocalEvent(ent, ref notif);
var overlays = new PotentiallyUpdateDamageOverlay(ent);
var overlays = new bPotentiallyUpdateDamageOverlayEventb(ent);
RaiseLocalEvent(ent, ref overlays, true);
}
public void TryChangeBrainOxygenation(Entity<BrainDamageComponent?> ent, FixedPoint2 amount)
@@ -126,7 +126,7 @@ public sealed partial class BrainDamageSystem : EntitySystem
var notif = new AfterBrainOxygenChanged();
RaiseLocalEvent(ent, ref notif);
var overlays = new PotentiallyUpdateDamageOverlay(ent);
var overlays = new bPotentiallyUpdateDamageOverlayEventb(ent);
RaiseLocalEvent(ent, ref overlays, true);
}
@@ -185,7 +185,7 @@ public sealed partial class BrainDamageSystem : EntitySystem
var notif = new AfterBrainDamageChanged();
RaiseLocalEvent(ent, ref notif);
var overlays = new PotentiallyUpdateDamageOverlay(ent);
var overlays = new bPotentiallyUpdateDamageOverlayEventb(ent);
RaiseLocalEvent(ent, ref overlays, true);
}
@@ -215,7 +215,7 @@ public sealed partial class BrainDamageSystem : EntitySystem
var notif = new AfterBrainDamageChanged();
RaiseLocalEvent(ent, ref notif);
var overlays = new PotentiallyUpdateDamageOverlay(ent);
var overlays = new bPotentiallyUpdateDamageOverlayEventb(ent);
RaiseLocalEvent(ent, ref overlays, true);
}

View File

@@ -69,7 +69,7 @@ public sealed partial class BrainDamageThresholdsSystem : EntitySystem
ent.Comp.CurrentDamageEffect = damageEffect;
Dirty(ent);
var overlays = new PotentiallyUpdateDamageOverlay(ent);
var overlays = new bPotentiallyUpdateDamageOverlayEventb(ent);
RaiseLocalEvent(ent, ref overlays, true);
}
@@ -92,7 +92,7 @@ public sealed partial class BrainDamageThresholdsSystem : EntitySystem
ent.Comp.CurrentOxygenEffect = oxygenEffect;
Dirty(ent);
var overlays = new PotentiallyUpdateDamageOverlay(ent);
var overlays = new bPotentiallyUpdateDamageOverlayEventb(ent);
RaiseLocalEvent(ent, ref overlays, true);
}
@@ -119,7 +119,7 @@ public sealed partial class BrainDamageThresholdsSystem : EntitySystem
{
args.State = ThresholdHelpers.Max(ent.Comp.CurrentState, args.State);
var overlays = new PotentiallyUpdateDamageOverlay(ent);
var overlays = new bPotentiallyUpdateDamageOverlayEventb(ent);
RaiseLocalEvent(ent, ref overlays, true);
}
}

View File

@@ -53,7 +53,7 @@ public sealed partial class HeartSystem : EntitySystem
var strainChangedEvt = new AfterStrainChangedEvent();
RaiseLocalEvent(ent, ref strainChangedEvt);
var overlays = new PotentiallyUpdateDamageOverlay(ent);
var overlays = new bPotentiallyUpdateDamageOverlayEventb(ent);
RaiseLocalEvent(ent, ref overlays, true);
}
@@ -124,7 +124,7 @@ public sealed partial class HeartSystem : EntitySystem
continue;
}
var overlays = new PotentiallyUpdateDamageOverlay(uid);
var overlays = new bPotentiallyUpdateDamageOverlayEventb(uid);
RaiseLocalEvent(uid, ref overlays, true);
}
}

View File

@@ -67,7 +67,7 @@ public sealed partial class PainSystem : EntitySystem
var evt = new AfterShockChangeEvent();
RaiseLocalEvent(uid, ref evt);
var overlays = new PotentiallyUpdateDamageOverlay(uid);
var overlays = new bPotentiallyUpdateDamageOverlayEventb(uid);
RaiseLocalEvent(uid, ref overlays, true);
Dirty(uid, pain);
@@ -82,7 +82,7 @@ public sealed partial class PainSystem : EntitySystem
var evt = new AfterShockChangeEvent();
RaiseLocalEvent(ent, ref evt);
var overlays = new PotentiallyUpdateDamageOverlay(ent);
var overlays = new bPotentiallyUpdateDamageOverlayEventb(ent);
RaiseLocalEvent(ent, ref overlays, true);
}

View File

@@ -76,7 +76,7 @@ public sealed partial class ShockThresholdsSystem : EntitySystem
{
args.State = ThresholdHelpers.Max(ent.Comp.CurrentMobState, args.State);
var overlays = new PotentiallyUpdateDamageOverlay(ent);
var overlays = new bPotentiallyUpdateDamageOverlayEventb(ent);
RaiseLocalEvent(ent, ref overlays, true);
}
}

View File

@@ -21,4 +21,4 @@ public record struct BeforeDamageCommitEvent(DamageSpecifier Damage, bool ForceR
/// Raised when the values for a damage overlay may have changed
/// </summary>
[ByRefEvent]
public record struct PotentiallyUpdateDamageOverlay(EntityUid Target);
public record struct bPotentiallyUpdateDamageOverlayEventb(EntityUid Target);

View File

@@ -1,4 +1,4 @@
construction-presenter-to-surgery = To perform this, first you need to:
construction-presenter-to-node-to-node = To perform this, first you need to:
construction-examine-status-effect-should-have = The target needs to have { $effect }.
construction-examine-status-effect-should-not-have = The target needs to not have { $effect }.
@@ -21,4 +21,4 @@ construction-step-heart-damage-range = { $max ->
}
}
construction-component-to-perform-header = To perform {$name}...
construction-component-to-perform-header = To perform {$targetName}...

View File

@@ -870,13 +870,15 @@
- !type:TotalDamage
max: 100 # Offbrand
damage:
# Begin Offbrand Changes
groups:
Brute: -0.5 # Offbrand
Brute: -0.3 # Offbrand
types:
Poison: -0.5 ##Should be about what it was when it healed the toxin group
Heat: -0.33
Shock: -0.33
Cold: -0.33
Poison: -0.2 ##Should be about what it was when it healed the toxin group
Heat: -0.2
Shock: -0.2
Cold: -0.2
# End Offbrand Changes
- type: reagent
id: Lipozine

View File

@@ -7,7 +7,7 @@
startNode: Base
targetNode: BoneDeathTreatment
category: Surgery
objectType: Surgery
objectType: NodeToNode
- type: construction
hide: true
@@ -18,7 +18,7 @@
startNode: Base
targetNode: HeartTreatmentSuture
category: Surgery
objectType: Surgery
objectType: NodeToNode
- type: construction
hide: true
@@ -29,7 +29,7 @@
startNode: Base
targetNode: HeartTreatmentMedicatedSuture
category: Surgery
objectType: Surgery
objectType: NodeToNode
- type: construction
hide: true
@@ -40,7 +40,7 @@
startNode: Base
targetNode: HuskingTreatment
category: Surgery
objectType: Surgery
objectType: NodeToNode
- type: construction
hide: true
@@ -51,7 +51,7 @@
startNode: Base
targetNode: WoundFractureTreatment
category: Surgery
objectType: Surgery
objectType: NodeToNode
- type: construction
hide: true
@@ -62,7 +62,7 @@
startNode: Base
targetNode: WoundArterialTreatment
category: Surgery
objectType: Surgery
objectType: NodeToNode
- type: construction
hide: true
@@ -73,7 +73,7 @@
startNode: Base
targetNode: CavityManipulationInsert
category: Surgery
objectType: Surgery
objectType: NodeToNode
- type: construction
hide: true
@@ -84,4 +84,4 @@
startNode: Base
targetNode: CavityManipulationRemoval
category: Surgery
objectType: Surgery
objectType: NodeToNode

View File

@@ -3,7 +3,8 @@
start: Base
graph:
- node: Base
surgeryName: surgery-cleanup-name
header: construction-component-to-perform-header
localizedName: surgery-cleanup-name
edges:
- to: OpenIncision
steps:
@@ -102,13 +103,15 @@
- tool: BoneMending
doAfter: 1
- node: WoundFractureTreatment
surgeryName: surgery-wound-fracture-treatment-name
header: construction-component-to-perform-header
localizedName: surgery-wound-fracture-treatment-name
actions:
- !type:SetNode
node: RetractedIncision
repeatConditions: *fracture-conditions
- node: WoundArterialTreatment
surgeryName: surgery-wound-arterial-treatment-name
header: construction-component-to-perform-header
localizedName: surgery-wound-arterial-treatment-name
actions:
- !type:SetNode
node: RetractedIncision
@@ -181,25 +184,29 @@
- tool: BoneMending
doAfter: 1
- node: BoneDeathTreatment
surgeryName: surgery-bone-death-treatment-name
header: construction-component-to-perform-header
localizedName: surgery-bone-death-treatment-name
actions:
- !type:SetNode
node: OpenRibCage
repeatConditions: *bone-death-conditions
- node: HeartTreatmentSuture
surgeryName: surgery-heart-treatment-suture-name
header: construction-component-to-perform-header
localizedName: surgery-heart-treatment-suture-name
actions:
- !type:SetNode
node: OpenRibCage
repeatConditions: *heart-damage-conditions
- node: HeartTreatmentMedicatedSuture
surgeryName: surgery-heart-treatment-medicated-suture-name
header: construction-component-to-perform-header
localizedName: surgery-heart-treatment-medicated-suture-name
actions:
- !type:SetNode
node: OpenRibCage
repeatConditions: *heart-damage-conditions
- node: HuskingTreatment
surgeryName: surgery-husking-treatment-name
header: construction-component-to-perform-header
localizedName: surgery-husking-treatment-name
actions:
- !type:SetNode
node: OpenRibCage
@@ -243,12 +250,14 @@
- tool: Clamping
doAfter: 2
- node: CavityManipulationInsert
surgeryName: surgery-cavity-manipulation-insert-name
header: construction-component-to-perform-header
localizedName: surgery-cavity-manipulation-insert-name
actions:
- !type:SetNode
node: CavityManipulationOpen
- node: CavityManipulationRemoval
surgeryName: surgery-cavity-manipulation-removal-name
header: construction-component-to-perform-header
localizedName: surgery-cavity-manipulation-removal-name
actions:
- !type:SetNode
node: CavityManipulationOpen