diff --git a/Content.Client/Sirena/EntityHealthBar/EntityHealthBarOverlay.cs b/Content.Client/Sirena/EntityHealthBar/EntityHealthBarOverlay.cs index ec27cbf5eef..47fcba0147a 100644 --- a/Content.Client/Sirena/EntityHealthBar/EntityHealthBarOverlay.cs +++ b/Content.Client/Sirena/EntityHealthBar/EntityHealthBarOverlay.cs @@ -1,231 +1,230 @@ -// using System.Numerics; -// using Content.Shared.Damage; -// using Content.Shared.Mobs; -// using Content.Shared.Mobs.Components; -// using Content.Shared.Mobs.Systems; -// using Content.Shared.FixedPoint; -// using Robust.Client.GameObjects; -// using Robust.Client.Graphics; -// using Robust.Shared.Enums; -// using Robust.Shared.Prototypes; -// using Robust.Shared.Utility; -// using Robust.Shared.Timing; -// -// namespace Content.Client.Sirena.EntityHealthBar; -// -// /// -// /// Yeah a lot of this is duplicated from doafters. -// /// Not much to be done until there's a generic HUD system -// /// -// public sealed class EntityHealthBarOverlay : Overlay -// { -// private readonly IEntityManager _entManager; -// private readonly SharedTransformSystem _transform; -// private readonly MobStateSystem _mobStateSystem; -// private readonly MobThresholdSystem _mobThresholdSystem; -// private readonly Texture _barTexture; -// private readonly ShaderInstance _shader; -// public override OverlaySpace Space => OverlaySpace.WorldSpaceBelowFOV; -// public string? DamageContainer; -// // for icon frame change timer -// int iconFrame = 1; -// double delayTime = 0.25; -// -// public EntityHealthBarOverlay(IEntityManager entManager, IPrototypeManager protoManager) -// { -// _entManager = entManager; -// _transform = _entManager.EntitySysManager.GetEntitySystem(); -// _mobStateSystem = _entManager.EntitySysManager.GetEntitySystem(); -// _mobThresholdSystem = _entManager.EntitySysManager.GetEntitySystem(); -// -// var sprite = new SpriteSpecifier.Rsi(new ResPath("/Textures/Interface/Misc/health_status.rsi"), "background"); -// _barTexture = _entManager.EntitySysManager.GetEntitySystem().Frame0(sprite); -// -// _shader = protoManager.Index("unshaded").Instance(); -// Timer.SpawnRepeating(TimeSpan.FromSeconds(delayTime), () => { -// if (iconFrame < 8) -// iconFrame++; -// else -// iconFrame = 1; -// }, new System.Threading.CancellationToken()); -// } -// -// protected override void Draw(in OverlayDrawArgs args) -// { -// var handle = args.WorldHandle; -// var rotation = args.Viewport.Eye?.Rotation ?? Angle.Zero; -// var spriteQuery = _entManager.GetEntityQuery(); -// var xformQuery = _entManager.GetEntityQuery(); -// -// var _spriteSys = _entManager.EntitySysManager.GetEntitySystem(); -// -// const float scale = 1f; -// var scaleMatrix = Matrix3.CreateScale(new Vector2(scale, scale)); -// var rotationMatrix = Matrix3.CreateRotation(-rotation); -// handle.UseShader(_shader); -// -// foreach (var (mob, dmg) in _entManager.EntityQuery(true)) -// { -// if (!xformQuery.TryGetComponent(mob.Owner, out var xform) || -// xform.MapID != args.MapId) -// { -// continue; -// } -// -// if (DamageContainer != null && dmg.DamageContainerID != DamageContainer) -// continue; -// -// var worldPosition = _transform.GetWorldPosition(xform); -// var worldMatrix = Matrix3.CreateTranslation(worldPosition); -// -// Matrix3.Multiply(scaleMatrix, worldMatrix, out var scaledWorld); -// Matrix3.Multiply(rotationMatrix, scaledWorld, out var matty); -// -// handle.SetTransform(matty); -// -// // Use the sprite itself if we know its bounds. This means short or tall sprites don't get overlapped -// // by the bar. -// float yOffset; -// float xIconOffset; -// float yIconOffset; -// if (spriteQuery.TryGetComponent(mob.Owner, out var sprite)) -// { -// yOffset = sprite.Bounds.Height + 12f; -// yIconOffset = sprite.Bounds.Height + 7f; -// xIconOffset = sprite.Bounds.Width + 7f; -// } -// else -// { -// yOffset = 1f; -// yIconOffset = 1f; -// xIconOffset = 1f; -// } -// -// // Position above the entity (we've already applied the matrix transform to the entity itself) -// // Offset by the texture size for every do_after we have. -// var position = new Vector2(-_barTexture.Width / 2f / EyeManager.PixelsPerMeter, -// yOffset / EyeManager.PixelsPerMeter); -// -// // Draw the underlying bar texture -// if (sprite != null && !sprite.ContainerOccluded) -// handle.DrawTexture(_barTexture, position); -// else -// continue; -// -// // Draw state icon -// string current_state; -// if (_mobStateSystem.IsAlive(mob.Owner, mob)) -// { -// current_state = "life_state"; -// } -// else -// { -// if (_mobStateSystem.IsCritical(mob.Owner, mob) && _mobThresholdSystem.TryGetThresholdForState(mob.Owner, MobState.Critical, out var critThreshold)) -// current_state = "defib_state"; -// else -// current_state = "dead_state"; -// } -// -// var icon_sprite = new SpriteSpecifier.Rsi(new ResPath("/Textures/Interface/Misc/health_state.rsi"), current_state); -// Texture _stateIcon = _spriteSys.RsiStateLike(icon_sprite).GetFrame(0, GetIconFrame(_spriteSys.RsiStateLike(icon_sprite))); -// -// var icon_position = new Vector2(xIconOffset / EyeManager.PixelsPerMeter, -// yIconOffset / EyeManager.PixelsPerMeter); -// -// handle.DrawTexture(_stateIcon, icon_position); -// -// // we are all progressing towards death every day -// (float ratio, bool inCrit) deathProgress = CalcProgress(mob.Owner, mob, dmg); -// -// var color = GetProgressColor(deathProgress.ratio, deathProgress.inCrit); -// -// // Hardcoded width of the progress bar because it doesn't match the texture. -// const float startX = 1f; -// const float endX = 15f; -// -// var xProgress = (endX - startX) * deathProgress.ratio + startX; -// -// var box = new Box2(new Vector2(startX, 0f) / EyeManager.PixelsPerMeter, new Vector2(xProgress, 2f) / EyeManager.PixelsPerMeter); -// box = box.Translated(position); -// handle.DrawRect(box, color); -// } -// -// handle.UseShader(null); -// handle.SetTransform(Matrix3.Identity); -// } -// -// private int GetIconFrame(IRsiStateLike sprite) -// { -// var _spriteSys = _entManager.EntitySysManager.GetEntitySystem(); -// -// if (sprite.AnimationFrameCount <= 1) -// return 0; -// -// var currentFrame = iconFrame; -// var result = 0; -// while (true) -// { -// if (currentFrame > 0 && currentFrame > sprite.AnimationFrameCount) -// { -// currentFrame -= sprite.AnimationFrameCount; -// } -// else -// { -// result = currentFrame - 1; -// break; -// } -// } -// return result; -// } -// -// -// /// -// /// Returns a ratio between 0 and 1, and whether the entity is in crit. -// /// -// private (float, bool) CalcProgress(EntityUid uid, MobStateComponent component, DamageableComponent dmg) -// { -// if (_mobStateSystem.IsAlive(uid, component)) -// { -// if (!_mobThresholdSystem.TryGetThresholdForState(uid, MobState.Critical, out var threshold)) -// return (1, false); -// -// var ratio = 1 - ((FixedPoint2) (dmg.TotalDamage / threshold)).Float(); -// return (ratio, false); -// } -// -// if (_mobStateSystem.IsCritical(uid, component)) -// { -// if (!_mobThresholdSystem.TryGetThresholdForState(uid, MobState.Critical, out var critThreshold) || -// !_mobThresholdSystem.TryGetThresholdForState(uid, MobState.Dead, out var deadThreshold)) -// { -// return (1, true); -// } -// -// var ratio = 1 - -// ((dmg.TotalDamage - critThreshold) / -// (deadThreshold - critThreshold)).Value.Float(); -// -// return (ratio, true); -// } -// -// return (0, true); -// } -// -// public static Color GetProgressColor(float progress, bool crit) -// { -// if (progress >= 1.0f) -// { -// return new Color(0f, 1f, 0f); -// } -// // lerp -// if (!crit) -// { -// var hue = (5f / 18f) * progress; -// return Color.FromHsv((hue, 1f, 0.75f, 1f)); -// } -// else -// { -// return Color.Red; -// } -// } -// } +using Content.Shared.Damage; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; +using Content.Shared.Mobs.Systems; +using Content.Shared.FixedPoint; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; +using Robust.Shared.Enums; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; +using Robust.Shared.Timing; +using System.Numerics; + +namespace Content.Client.Sirena.EntityHealthBar; + +/// +/// Yeah a lot of this is duplicated from doafters. +/// Not much to be done until there's a generic HUD system +/// +public sealed class EntityHealthBarOverlay : Overlay +{ + private readonly IEntityManager _entManager; + private readonly SharedTransformSystem _transform; + private readonly MobStateSystem _mobStateSystem; + private readonly MobThresholdSystem _mobThresholdSystem; + private readonly Texture _barTexture; + private readonly ShaderInstance _shader; + public override OverlaySpace Space => OverlaySpace.WorldSpaceBelowFOV; + public string? DamageContainer; + // for icon frame change timer + int iconFrame = 1; + double delayTime = 0.25; + + public EntityHealthBarOverlay(IEntityManager entManager, IPrototypeManager protoManager) + { + _entManager = entManager; + _transform = _entManager.EntitySysManager.GetEntitySystem(); + _mobStateSystem = _entManager.EntitySysManager.GetEntitySystem(); + _mobThresholdSystem = _entManager.EntitySysManager.GetEntitySystem(); + + var sprite = new SpriteSpecifier.Rsi(new ResPath("/Textures/Interface/Misc/health_status.rsi"), "background"); + _barTexture = _entManager.EntitySysManager.GetEntitySystem().Frame0(sprite); + + _shader = protoManager.Index("unshaded").Instance(); + Timer.SpawnRepeating(TimeSpan.FromSeconds(delayTime), () => { + if (iconFrame < 8) + iconFrame++; + else + iconFrame = 1; + }, new System.Threading.CancellationToken()); + } + + protected override void Draw(in OverlayDrawArgs args) + { + var handle = args.WorldHandle; + var rotation = args.Viewport.Eye?.Rotation ?? Angle.Zero; + var spriteQuery = _entManager.GetEntityQuery(); + var xformQuery = _entManager.GetEntityQuery(); + + var _spriteSys = _entManager.EntitySysManager.GetEntitySystem(); + + const float scale = 1f; + var scaleMatrix = Matrix3.CreateScale(new Vector2(scale, scale)); + var rotationMatrix = Matrix3.CreateRotation(-rotation); + handle.UseShader(_shader); + + foreach (var (mob, dmg) in _entManager.EntityQuery(true)) + { + if (!xformQuery.TryGetComponent(mob.Owner, out var xform) || + xform.MapID != args.MapId) + { + continue; + } + + if (DamageContainer != null && dmg.DamageContainerID != DamageContainer) + continue; + + var worldPosition = _transform.GetWorldPosition(xform); + var worldMatrix = Matrix3.CreateTranslation(worldPosition); + + Matrix3.Multiply(scaleMatrix, worldMatrix, out var scaledWorld); + Matrix3.Multiply(rotationMatrix, scaledWorld, out var matty); + + handle.SetTransform(matty); + + // Use the sprite itself if we know its bounds. This means short or tall sprites don't get overlapped + // by the bar. + float yOffset; + float xIconOffset; + float yIconOffset; + if (spriteQuery.TryGetComponent(mob.Owner, out var sprite)) + { + yOffset = sprite.Bounds.Height + 12f; + yIconOffset = sprite.Bounds.Height + 7f; + xIconOffset = sprite.Bounds.Width + 7f; + } + else + { + yOffset = 1f; + yIconOffset = 1f; + xIconOffset = 1f; + } + + // Position above the entity (we've already applied the matrix transform to the entity itself) + // Offset by the texture size for every do_after we have. + var position = new Vector2(-_barTexture.Width / 2f / EyeManager.PixelsPerMeter, + yOffset / EyeManager.PixelsPerMeter); + + // Draw the underlying bar texture + if (sprite != null && !sprite.ContainerOccluded) + handle.DrawTexture(_barTexture, position); + else + continue; + + // Draw state icon + string current_state; + if (_mobStateSystem.IsAlive(mob.Owner, mob)) + { + current_state = "life_state"; + } + else + { + if (_mobStateSystem.IsCritical(mob.Owner, mob) && _mobThresholdSystem.TryGetThresholdForState(mob.Owner, MobState.Critical, out var critThreshold)) + current_state = "defib_state"; + else + current_state = "dead_state"; + } + + var icon_sprite = new SpriteSpecifier.Rsi(new ResPath("/Textures/Interface/Misc/health_state.rsi"), current_state); + Texture _stateIcon = _spriteSys.RsiStateLike(icon_sprite).GetFrame(0, GetIconFrame(_spriteSys.RsiStateLike(icon_sprite))); + + var icon_position = new Vector2(xIconOffset / EyeManager.PixelsPerMeter, + yIconOffset / EyeManager.PixelsPerMeter); + + handle.DrawTexture(_stateIcon, icon_position); + + // we are all progressing towards death every day + (float ratio, bool inCrit) deathProgress = CalcProgress(mob.Owner, mob, dmg); + + var color = GetProgressColor(deathProgress.ratio, deathProgress.inCrit); + + // Hardcoded width of the progress bar because it doesn't match the texture. + const float startX = 1f; + const float endX = 15f; + + var xProgress = (endX - startX) * deathProgress.ratio + startX; + + var box = new Box2(new Vector2(startX, 0f) / EyeManager.PixelsPerMeter, new Vector2(xProgress, 2f) / EyeManager.PixelsPerMeter); + box = box.Translated(position); + handle.DrawRect(box, color); + } + + handle.UseShader(null); + handle.SetTransform(Matrix3.Identity); + } + + private int GetIconFrame(IRsiStateLike sprite) + { + var _spriteSys = _entManager.EntitySysManager.GetEntitySystem(); + + if (sprite.AnimationFrameCount <= 1) + return 0; + + var currentFrame = iconFrame; + var result = 0; + while (true) + { + if (currentFrame > 0 && currentFrame > sprite.AnimationFrameCount) + { + currentFrame -= sprite.AnimationFrameCount; + } + else + { + result = currentFrame - 1; + break; + } + } + return result; + } + + /// + /// Returns a ratio between 0 and 1, and whether the entity is in crit. + /// + private (float, bool) CalcProgress(EntityUid uid, MobStateComponent component, DamageableComponent dmg) + { + if (_mobStateSystem.IsAlive(uid, component)) + { + if (!_mobThresholdSystem.TryGetThresholdForState(uid, MobState.Critical, out var threshold)) + return (1, false); + + var ratio = 1 - ((FixedPoint2) (dmg.TotalDamage / threshold)).Float(); + return (ratio, false); + } + + if (_mobStateSystem.IsCritical(uid, component)) + { + if (!_mobThresholdSystem.TryGetThresholdForState(uid, MobState.Critical, out var critThreshold) || + !_mobThresholdSystem.TryGetThresholdForState(uid, MobState.Dead, out var deadThreshold)) + { + return (1, true); + } + + var ratio = 1 - + ((dmg.TotalDamage - critThreshold) / + (deadThreshold - critThreshold)).Value.Float(); + + return (ratio, true); + } + + return (0, true); + } + + public static Color GetProgressColor(float progress, bool crit) + { + if (progress >= 1.0f) + { + return new Color(0f, 1f, 0f); + } + // lerp + if (!crit) + { + var hue = (5f / 18f) * progress; + return Color.FromHsv((hue, 1f, 0.75f, 1f)); + } + else + { + return Color.Red; + } + } +} diff --git a/Content.Client/Sirena/EntityHealthBar/ShowHealthBarsSystem.cs b/Content.Client/Sirena/EntityHealthBar/ShowHealthBarsSystem.cs index 594806641a9..3bb342aab42 100644 --- a/Content.Client/Sirena/EntityHealthBar/ShowHealthBarsSystem.cs +++ b/Content.Client/Sirena/EntityHealthBar/ShowHealthBarsSystem.cs @@ -1,64 +1,64 @@ -// using Content.Shared.Sirena.EntityHealthBar; -// using Content.Shared.GameTicking; -// using Robust.Client.Player; -// using Robust.Client.Graphics; -// using Robust.Client.GameObjects; -// using Robust.Shared.Prototypes; -// -// namespace Content.Client.Sirena.EntityHealthBar -// { -// public sealed class ShowHealthBarsSystem : EntitySystem -// { -// [Dependency] private readonly IPlayerManager _player = default!; -// [Dependency] private readonly IPrototypeManager _protoMan = default!; -// [Dependency] private readonly IOverlayManager _overlayMan = default!; -// -// private EntityHealthBarOverlay _overlay = default!; -// public override void Initialize() -// { -// base.Initialize(); -// -// SubscribeLocalEvent(OnInit); -// SubscribeLocalEvent(OnRemove); -// SubscribeLocalEvent(OnPlayerAttached); -// SubscribeLocalEvent(OnPlayerDetached); -// SubscribeLocalEvent(OnRoundRestart); -// -// _overlay = new(EntityManager, _protoMan); -// } -// -// private void OnInit(EntityUid uid, ShowHealthBarsComponent component, ComponentInit args) -// { -// if (_player.LocalPlayer?.ControlledEntity == uid) -// { -// _overlayMan.AddOverlay(_overlay); -// _overlay.DamageContainer = component.DamageContainer; -// } -// -// -// } -// private void OnRemove(EntityUid uid, ShowHealthBarsComponent component, ComponentRemove args) -// { -// if (_player.LocalPlayer?.ControlledEntity == uid) -// { -// _overlayMan.RemoveOverlay(_overlay); -// } -// } -// -// private void OnPlayerAttached(EntityUid uid, ShowHealthBarsComponent component, PlayerAttachedEvent args) -// { -// _overlayMan.AddOverlay(_overlay); -// _overlay.DamageContainer = component.DamageContainer; -// } -// -// private void OnPlayerDetached(EntityUid uid, ShowHealthBarsComponent component, PlayerDetachedEvent args) -// { -// _overlayMan.RemoveOverlay(_overlay); -// } -// -// private void OnRoundRestart(RoundRestartCleanupEvent args) -// { -// _overlayMan.RemoveOverlay(_overlay); -// } -// } -// } +using Content.Shared.GameTicking; +using Content.Shared.Sirena.EntityHealthBar; +using Robust.Client.Graphics; +using Robust.Client.Player; +using Robust.Shared.Player; +using Robust.Shared.Prototypes; + +namespace Content.Client.Sirena.EntityHealthBar +{ + public sealed class ShowHealthBarsSystem : EntitySystem + { + [Dependency] private readonly IPlayerManager _player = default!; + [Dependency] private readonly IPrototypeManager _protoMan = default!; + [Dependency] private readonly IOverlayManager _overlayMan = default!; + + private EntityHealthBarOverlay _overlay = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnRemove); + SubscribeLocalEvent(OnPlayerAttached); + SubscribeLocalEvent(OnPlayerDetached); + SubscribeLocalEvent(OnRoundRestart); + + _overlay = new(EntityManager, _protoMan); + } + + private void OnInit(EntityUid uid, ShowHealthBarsComponent component, ComponentInit args) + { + if (_player.LocalPlayer?.ControlledEntity == uid) + { + _overlayMan.AddOverlay(_overlay); + _overlay.DamageContainer = component.DamageContainer; + } + + + } + private void OnRemove(EntityUid uid, ShowHealthBarsComponent component, ComponentRemove args) + { + if (_player.LocalPlayer?.ControlledEntity == uid) + { + _overlayMan.RemoveOverlay(_overlay); + } + } + + private void OnPlayerAttached(EntityUid uid, ShowHealthBarsComponent component, LocalPlayerAttachedEvent args) + { + _overlayMan.AddOverlay(_overlay); + _overlay.DamageContainer = component.DamageContainer; + } + + private void OnPlayerDetached(EntityUid uid, ShowHealthBarsComponent component, LocalPlayerDetachedEvent args) + { + _overlayMan.RemoveOverlay(_overlay); + } + + private void OnRoundRestart(RoundRestartCleanupEvent args) + { + _overlayMan.RemoveOverlay(_overlay); + } + } +} diff --git a/Resources/Changelog/ChangelogADT.yml b/Resources/Changelog/ChangelogADT.yml index 3be34f0a78f..42248cc1a7f 100644 --- a/Resources/Changelog/ChangelogADT.yml +++ b/Resources/Changelog/ChangelogADT.yml @@ -929,8 +929,16 @@ Entries: id: 55648 #костыль отображения в Обновлениях time: '2023-12-25T20:20:00.0000000+00:00' + +- author: Friskis + changes: + - {message: "Медицинские худы теперь работают", type: Fix} + id: 55649 #костыль отображения в Обновлениях + time: '2023-12-27T20:04:00.0000000+00:00' + - author: Altius changes: - {message: Добавил хачапури. Пользуясь случаем; внёс в книгу рецептов некоторые дополнения, type: Add} - id: 55649 #костыль отображения в Обновлениях + id: 55650 #костыль отображения в Обновлениях time: '2023-12-27T20:20:00.0000000+00:00' + diff --git a/Resources/Prototypes/ADT/Entities/Objects/Misc/wiretapping.yml b/Resources/Prototypes/ADT/Entities/Objects/Misc/wiretapping.yml index 5845fe4d606..d8338013a06 100644 --- a/Resources/Prototypes/ADT/Entities/Objects/Misc/wiretapping.yml +++ b/Resources/Prototypes/ADT/Entities/Objects/Misc/wiretapping.yml @@ -67,7 +67,7 @@ - id: ADTWiretapping - type: Storage grid: - - 0,0,10,7 + - 0,0,1,0 maxItemSize: Small - type: ContainerContainer containers: diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml b/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml index e18ba4f46b4..78b770f5a21 100644 --- a/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml +++ b/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml @@ -27,7 +27,7 @@ - type: ClothingGrantComponent # Sirena-Edit's-Start component: - type: ShowHealthBars - damageContainer: Biological # Sirena-Edit's-End + damageContainer: Biological - type: entity parent: ClothingEyesBase @@ -133,6 +133,10 @@ - type: Clothing sprite: Clothing/Eyes/Hud/medonion.rsi - type: ShowHungerIcons + - type: ClothingGrantComponent # Sirena-Edit's-Start + component: + - type: ShowHealthBars + damageContainer: Biological - type: entity parent: ClothingEyesBase @@ -158,6 +162,13 @@ - type: Clothing sprite: Clothing/Eyes/Hud/medsec.rsi - type: ShowSecurityIcons + - type: ClothingGrantComponent # Sirena-Edit's-Start + component: + - type: ShowHealthBars + damageContainer: Biological + - type: FlashImmunity + - type: EyeProtection + protectionTime: 5 - type: entity parent: ClothingEyesBase @@ -199,4 +210,8 @@ sprite: Clothing/Eyes/Hud/synd.rsi - type: ShowSyndicateIcons - type: ShowSecurityIcons + - type: ClothingGrantComponent # Sirena-Edit's-Start + component: + - type: ShowHealthBars + damageContainer: Biological diff --git a/Resources/Prototypes/Entities/Structures/Power/apc.yml b/Resources/Prototypes/Entities/Structures/Power/apc.yml index 9be2e5bd4c9..5ad0eff6643 100644 --- a/Resources/Prototypes/Entities/Structures/Power/apc.yml +++ b/Resources/Prototypes/Entities/Structures/Power/apc.yml @@ -91,7 +91,7 @@ graph: APC node: apc - type: PowerNetworkBattery - maxSupply: 15000 + maxSupply: 50000 maxChargeRate: 5000 supplyRampTolerance: 1000 supplyRampRate: 500 diff --git a/Resources/Prototypes/Entities/Structures/Power/smes.yml b/Resources/Prototypes/Entities/Structures/Power/smes.yml index 35cb7de33d2..0003ce8ddf2 100644 --- a/Resources/Prototypes/Entities/Structures/Power/smes.yml +++ b/Resources/Prototypes/Entities/Structures/Power/smes.yml @@ -62,7 +62,7 @@ voltage: High node: input - type: PowerNetworkBattery - maxSupply: 200000 + maxSupply: 400000 maxChargeRate: 5000 supplyRampTolerance: 5000 supplyRampRate: 1000 diff --git a/Resources/Prototypes/Entities/Structures/Power/substation.yml b/Resources/Prototypes/Entities/Structures/Power/substation.yml index ceed94685cf..0538f9f0bd5 100644 --- a/Resources/Prototypes/Entities/Structures/Power/substation.yml +++ b/Resources/Prototypes/Entities/Structures/Power/substation.yml @@ -52,7 +52,7 @@ - type: BatteryDischarger voltage: Medium - type: PowerNetworkBattery - maxSupply: 200000 + maxSupply: 400000 maxChargeRate: 5000 supplyRampTolerance: 5000 supplyRampRate: 1000 @@ -184,7 +184,7 @@ - type: BatteryDischarger voltage: Medium - type: PowerNetworkBattery - maxSupply: 150000 + maxSupply: 300000 maxChargeRate: 5000 supplyRampTolerance: 5000 supplyRampRate: 1000 diff --git a/Resources/Prototypes/Roles/Jobs/Security/brigmedic.yml b/Resources/Prototypes/Roles/Jobs/Security/brigmedic.yml index b83ab85a5f3..c5bd346e110 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/brigmedic.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/brigmedic.yml @@ -29,7 +29,7 @@ back: ClothingBackpackBrigmedicFilled shoes: ClothingShoesColorRed gloves: ClothingHandsGlovesNitrile - eyes: ClothingEyesHudMedical + eyes: ClothingEyesHudMedSec head: ClothingHeadHatBeretBrigmedic id: BrigmedicPDA ears: ClothingHeadsetBrigmedic