From ac5e9cd70b8656905637c25abfd773cc079df0f5 Mon Sep 17 00:00:00 2001 From: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Date: Thu, 9 Nov 2023 18:14:06 -0500 Subject: [PATCH] Fix borg mobstates (#21307) * Add dead states to borgs * this? * ack --- Content.Client/Silicons/Borgs/BorgSystem.cs | 20 +++++++++---- Content.Server/Medical/DefibrillatorSystem.cs | 2 -- Content.Server/Silicons/Borgs/BorgSystem.cs | 27 +++++++++++++---- .../Zombies/ZombieSystem.Transform.cs | 2 -- Content.Shared/Alert/AlertType.cs | 4 ++- .../Systems/MobStateSystem.StateMachine.cs | 7 ++--- Resources/Prototypes/Alerts/alerts.yml | 18 +++++++++++ .../Mobs/Cyborgs/base_borg_chassis.yml | 28 +++++++----------- .../Alerts/borg_alive.rsi/health0.png | Bin 331 -> 379 bytes .../Alerts/borg_alive.rsi/health1.png | Bin 351 -> 469 bytes .../Alerts/borg_alive.rsi/health2.png | Bin 379 -> 579 bytes .../Alerts/borg_alive.rsi/health3.png | Bin 412 -> 608 bytes .../Alerts/borg_alive.rsi/health4.png | Bin 484 -> 732 bytes .../Alerts/borg_critical.rsi/critical.png | Bin 0 -> 5972 bytes .../Alerts/borg_critical.rsi/meta.json | 21 +++++++++++++ .../Interface/Alerts/borg_dead.rsi/dead.png | Bin 0 -> 515 bytes .../Interface/Alerts/borg_dead.rsi/meta.json | 14 +++++++++ 17 files changed, 107 insertions(+), 36 deletions(-) create mode 100644 Resources/Textures/Interface/Alerts/borg_critical.rsi/critical.png create mode 100644 Resources/Textures/Interface/Alerts/borg_critical.rsi/meta.json create mode 100644 Resources/Textures/Interface/Alerts/borg_dead.rsi/dead.png create mode 100644 Resources/Textures/Interface/Alerts/borg_dead.rsi/meta.json diff --git a/Content.Client/Silicons/Borgs/BorgSystem.cs b/Content.Client/Silicons/Borgs/BorgSystem.cs index 5d2e5fa070..e92ce5cc77 100644 --- a/Content.Client/Silicons/Borgs/BorgSystem.cs +++ b/Content.Client/Silicons/Borgs/BorgSystem.cs @@ -1,4 +1,5 @@ -using Content.Shared.Silicons.Borgs; +using Content.Shared.Mobs; +using Content.Shared.Silicons.Borgs; using Content.Shared.Silicons.Borgs.Components; using Robust.Client.GameObjects; using Robust.Shared.Containers; @@ -22,7 +23,7 @@ public sealed class BorgSystem : SharedBorgSystem { if (args.Sprite == null) return; - UpdateBorgAppearnce(uid, component, args.Component, args.Sprite); + UpdateBorgAppearance(uid, component, args.Component, args.Sprite); } protected override void OnInserted(EntityUid uid, BorgChassisComponent component, EntInsertedIntoContainerMessage args) @@ -31,7 +32,7 @@ public sealed class BorgSystem : SharedBorgSystem return; base.OnInserted(uid, component, args); - UpdateBorgAppearnce(uid, component); + UpdateBorgAppearance(uid, component); } protected override void OnRemoved(EntityUid uid, BorgChassisComponent component, EntRemovedFromContainerMessage args) @@ -40,10 +41,10 @@ public sealed class BorgSystem : SharedBorgSystem return; base.OnRemoved(uid, component, args); - UpdateBorgAppearnce(uid, component); + UpdateBorgAppearance(uid, component); } - private void UpdateBorgAppearnce(EntityUid uid, + private void UpdateBorgAppearance(EntityUid uid, BorgChassisComponent? component = null, AppearanceComponent? appearance = null, SpriteComponent? sprite = null) @@ -51,6 +52,15 @@ public sealed class BorgSystem : SharedBorgSystem if (!Resolve(uid, ref component, ref appearance, ref sprite)) return; + if (_appearance.TryGetData(uid, MobStateVisuals.State, out var state, appearance)) + { + if (state != MobState.Alive) + { + sprite.LayerSetVisible(BorgVisualLayers.Light, false); + return; + } + } + if (!_appearance.TryGetData(uid, BorgVisuals.HasPlayer, out var hasPlayer, appearance)) hasPlayer = false; diff --git a/Content.Server/Medical/DefibrillatorSystem.cs b/Content.Server/Medical/DefibrillatorSystem.cs index dd9f1ec91e..a1e2d53d17 100644 --- a/Content.Server/Medical/DefibrillatorSystem.cs +++ b/Content.Server/Medical/DefibrillatorSystem.cs @@ -218,11 +218,9 @@ public sealed class DefibrillatorSystem : EntitySystem } else { - _mobThreshold.SetAllowRevives(target, true, thresholds); if (_mobState.IsDead(target, mob)) _damageable.TryChangeDamage(target, component.ZapHeal, true, origin: uid); _mobState.ChangeMobState(target, MobState.Critical, mob, uid); - _mobThreshold.SetAllowRevives(target, false, thresholds); if (_mind.TryGetMind(target, out var mindId, out var mind) && mind.Session is { } playerSession) diff --git a/Content.Server/Silicons/Borgs/BorgSystem.cs b/Content.Server/Silicons/Borgs/BorgSystem.cs index 883cb3b3d8..7de351a70f 100644 --- a/Content.Server/Silicons/Borgs/BorgSystem.cs +++ b/Content.Server/Silicons/Borgs/BorgSystem.cs @@ -11,6 +11,8 @@ using Content.Shared.IdentityManagement; using Content.Shared.Interaction; using Content.Shared.Mind; using Content.Shared.Mind.Components; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Systems; using Content.Shared.Movement.Systems; using Content.Shared.PowerCell; using Content.Shared.PowerCell.Components; @@ -39,6 +41,7 @@ public sealed partial class BorgSystem : SharedBorgSystem [Dependency] private readonly HandsSystem _hands = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly SharedMindSystem _mind = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; [Dependency] private readonly MovementSpeedModifierSystem _movementSpeedModifier = default!; [Dependency] private readonly PowerCellSystem _powerCell = default!; [Dependency] private readonly ThrowingSystem _throwing = default!; @@ -56,6 +59,7 @@ public sealed partial class BorgSystem : SharedBorgSystem SubscribeLocalEvent(OnChassisInteractUsing); SubscribeLocalEvent(OnMindAdded); SubscribeLocalEvent(OnMindRemoved); + SubscribeLocalEvent(OnMobStateChanged); SubscribeLocalEvent(OnPowerCellChanged); SubscribeLocalEvent(OnPowerCellSlotEmpty); SubscribeLocalEvent(OnUIOpenAttempt); @@ -98,7 +102,7 @@ public sealed partial class BorgSystem : SharedBorgSystem { if (_mind.TryGetMind(used, out _, out var mind) && mind.Session != null) { - if (!CanPlayerBeBorgged(mind.Session)) + if (!CanPlayerBeBorged(mind.Session)) { Popup.PopupEntity(Loc.GetString("borg-player-not-allowed"), used, args.User); return; @@ -154,6 +158,19 @@ public sealed partial class BorgSystem : SharedBorgSystem BorgDeactivate(uid, component); } + private void OnMobStateChanged(EntityUid uid, BorgChassisComponent component, MobStateChangedEvent args) + { + if (args.NewMobState == MobState.Alive) + { + if (_mind.TryGetMind(uid, out _, out _)) + _powerCell.SetPowerCellDrawEnabled(uid, true); + } + else + { + _powerCell.SetPowerCellDrawEnabled(uid, false); + } + } + private void OnPowerCellChanged(EntityUid uid, BorgChassisComponent component, PowerCellChangedEvent args) { UpdateBatteryAlert(uid); @@ -172,7 +189,7 @@ public sealed partial class BorgSystem : SharedBorgSystem if (_powerCell.HasDrawCharge(uid, draw)) { // only reenable the powerdraw if a player has the role. - if (!draw.Drawing && _mind.TryGetMind(uid, out _, out _)) + if (!draw.Drawing && _mind.TryGetMind(uid, out _, out _) && _mobState.IsAlive(uid)) _powerCell.SetPowerCellDrawEnabled(uid, true); EnableBorgAbilities(uid, component); @@ -213,7 +230,7 @@ public sealed partial class BorgSystem : SharedBorgSystem if (!_mind.TryGetMind(uid, out var mindId, out var mind) || mind.Session == null) return; - if (!CanPlayerBeBorgged(mind.Session)) + if (!CanPlayerBeBorged(mind.Session)) { Popup.PopupEntity(Loc.GetString("borg-player-not-allowed-eject"), uid); Container.RemoveEntity(containerEnt, uid); @@ -249,7 +266,7 @@ public sealed partial class BorgSystem : SharedBorgSystem /// /// Activates the borg, enabling all of its modules. /// - public void EnableBorgAbilities(EntityUid uid, BorgChassisComponent component) + public void EnableBorgAbilities(EntityUid uid, BorgChassisComponent component, PowerCellDrawComponent? powerCell = null) { if (component.Activated) return; @@ -302,7 +319,7 @@ public sealed partial class BorgSystem : SharedBorgSystem /// Checks that a player has fulfilled the requirements for the borg job. /// If they don't have enough hours, they cannot be placed into a chassis. /// - public bool CanPlayerBeBorgged(ICommonSession session) + public bool CanPlayerBeBorged(ICommonSession session) { if (_banManager.GetJobBans(session.UserId)?.Contains(BorgJobId) == true) return false; diff --git a/Content.Server/Zombies/ZombieSystem.Transform.cs b/Content.Server/Zombies/ZombieSystem.Transform.cs index 18bbd7e7a8..9c51b052fe 100644 --- a/Content.Server/Zombies/ZombieSystem.Transform.cs +++ b/Content.Server/Zombies/ZombieSystem.Transform.cs @@ -198,12 +198,10 @@ namespace Content.Server.Zombies if (TryComp(target, out var tempComp)) tempComp.ColdDamage.ClampMax(0); - _mobThreshold.SetAllowRevives(target, true); //Heals the zombie from all the damage it took while human if (TryComp(target, out var damageablecomp)) _damageable.SetAllDamage(target, damageablecomp, 0); _mobState.ChangeMobState(target, MobState.Alive); - _mobThreshold.SetAllowRevives(target, false); var factionComp = EnsureComp(target); foreach (var id in new List(factionComp.Factions)) diff --git a/Content.Shared/Alert/AlertType.cs b/Content.Shared/Alert/AlertType.cs index e0a7ac99f8..68db360231 100644 --- a/Content.Shared/Alert/AlertType.cs +++ b/Content.Shared/Alert/AlertType.cs @@ -49,7 +49,9 @@ namespace Content.Shared.Alert Debug5, Debug6, SuitPower, - BorgHealth + BorgHealth, + BorgCrit, + BorgDead } } diff --git a/Content.Shared/Mobs/Systems/MobStateSystem.StateMachine.cs b/Content.Shared/Mobs/Systems/MobStateSystem.StateMachine.cs index 25b63d5b80..2fa522dea5 100644 --- a/Content.Shared/Mobs/Systems/MobStateSystem.StateMachine.cs +++ b/Content.Shared/Mobs/Systems/MobStateSystem.StateMachine.cs @@ -36,7 +36,8 @@ public partial class MobStateSystem } /// - /// Change the MobState and trigger MobState update events + /// Change the MobState without triggering UpdateMobState events. + /// WARNING: use this sparingly when you need to override other systems (MobThresholds) /// /// Target Entity we want to change the MobState of /// The new MobState we want to set @@ -48,9 +49,7 @@ public partial class MobStateSystem if (!Resolve(entity, ref component)) return; - var ev = new UpdateMobStateEvent {Target = entity, Component = component, Origin = origin, State = mobState}; - RaiseLocalEvent(entity, ref ev); - ChangeState(entity, component, ev.State); + ChangeState(entity, component, mobState, origin: origin); } #endregion diff --git a/Resources/Prototypes/Alerts/alerts.yml b/Resources/Prototypes/Alerts/alerts.yml index e71a8ed381..bc3137b07f 100644 --- a/Resources/Prototypes/Alerts/alerts.yml +++ b/Resources/Prototypes/Alerts/alerts.yml @@ -197,6 +197,24 @@ minSeverity: 0 maxSeverity: 4 +- type: alert + id: BorgCrit + category: Health + icons: + - sprite: /Textures/Interface/Alerts/borg_critical.rsi + state: critical + name: alerts-crit-name + description: alerts-crit-desc + +- type: alert + id: BorgDead + category: Health + icons: + - sprite: /Textures/Interface/Alerts/borg_dead.rsi + state: dead + name: alerts-dead-name + description: alerts-dead-desc + - type: alert id: BorgBattery category: Battery diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml index c0b89e783b..42fea8fda4 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml @@ -1,4 +1,5 @@ - type: entity + parent: BaseMob id: BaseBorgChassis name: cyborg description: A man-machine hybrid that assists in station activity. They love being asked to state their laws over and over. @@ -8,23 +9,16 @@ - type: Reactive groups: Acidic: [Touch] - - type: Input - context: "human" - - type: InputMover - type: DamageOnHighSpeedImpact damage: types: Blunt: 5 soundHit: path: /Audio/Effects/hit_kick.ogg - - type: Clickable - type: CombatMode - type: NoSlip - type: StaticPrice price: 1250 - - type: InteractionOutline - - type: Physics - bodyType: KinematicController - type: Fixtures fixtures: fix1: @@ -41,18 +35,24 @@ baseSprintSpeed : 4.5 - type: Sprite sprite: Mobs/Silicon/chassis.rsi - noRot: true - drawdepth: Mobs + - type: RotationVisuals + horizontalRotation: 90 - type: MobState allowedStates: - Alive + - Critical + - Dead - type: MobThresholds thresholds: 0: Alive - 150: Dead + 100: Critical + 200: Dead stateAlertDict: Alive: BorgHealth + Critical: BorgCrit + Dead: BorgDead showOverlays: false + allowRevives: true - type: HealthExaminable examinableTypes: - Blunt @@ -113,15 +113,12 @@ slots: cell_slot: name: power-cell-slot-component-slot-name-default - - type: DoAfter - - type: Eye - type: Body - type: StatusEffects allowed: - Stun - KnockedDown - SlowedDown - - type: Actions - type: TypingIndicator proto: robot - type: Speech @@ -148,7 +145,7 @@ volume: 5 - trigger: !type:DamageTrigger - damage: 150 + damage: 300 behaviors: - !type:PlaySoundBehavior sound: /Audio/Effects/metalbreak.ogg @@ -190,10 +187,7 @@ - type: Pullable - type: Puller needsHands: false - - type: Examiner - - type: Appearance - type: StandingState - - type: Alerts - type: Tag tags: - ShoesRequiredStepTriggerImmune diff --git a/Resources/Textures/Interface/Alerts/borg_alive.rsi/health0.png b/Resources/Textures/Interface/Alerts/borg_alive.rsi/health0.png index b94d636d0f5f9a3d2f8e1eacc33cf755ac4c798b..ab8c3ac9ca3cc5a4aca390f767f8cfb772303a9b 100644 GIT binary patch delta 363 zcmV-x0hIpB0{a4x8Gi-<0047(dh`GQ00DDSM?wIu&K&6g00A{gL_t(oh1FNvk%KS{ zlrz^64XBWO$8D$$?)NA}4Nw#L2quos56N-N-7+3OGN9FZguzzJAFO|6ifS+>0Spo;H zdmnO$*J`~STL>^SF!M7jnW3haV-11_5b^hZe!v4?B?XSmCFELdUO?RgA4XPzD(1wR zA4%YLHi7TvJ3A3LT>%HLK4=KuP9XJ{5)?6%U>kuM%KJZqNevqT?Hj@k)JoV0baH+> zft2%eP;SFNQ)Iw{&Ig7{uvdYse+lDx&~^^QUU2ZL$`At53kq)_;`1HjZ33|ZJ~207 zhysY%Q2|*6QUP%aB4Y7zb^@tv6Kf%G=!r-lW8|mV-~2coi93%u#pUi6`>_B3002ov JPDHLkV1jOomy7@a delta 315 zcmey(bed^`WIZzj1B1(wu46!ou{g-xiDBJ2nU_EgOS+@4BLl<6e(pbstU$g*fKQ04 zv9YnDqGCfsL(ca$$Agg$4i2VkVu6x}N>5({QXC~ge!>4CfZ<;A-bkPrXMsm#F#`kN zArNL1)$nQn3a;>UaSXBW-#R(6o{w3P$GKg#;J>uEdfs6kM~~2Kv5hvf{}g;}=7^d2 z=GZe4&-XcAn$v@_R$XQ1WQvsXyS04bea0J;%)dwq7{3)}InVceTU*3^2HrwkGODeaJoV&whM!Fqv9;oW?OzY}C_7;h-SE8*B{NZyPGAv~7!B+D51V-&uk z>pB2HUDqzRv8HJX0MJ^?le(^hQpy3yK9o|90wg>!pp09um0`mD0epOp^6fh7=zYsL2hjn7PuZn>mM>*EatUu+hJE9} z9PLuRKStxkNDP7u_@HQg9WbUQmI=`TE_#4pe5s2~gP4M&ATmJtq>7imFCooMa$s5Q zDc@gqAe77HZhzRtflxK)Vn8gy(7rCtBMUTAnh*>BAacVzNY}RQO3%%a#?Sf_f{n#Qwv)V712Nq&%7OCzYm#^01srl!ezF6(qE2>zPP-7YoQ7MA zZ}o@R^B~#*U|kFJPne1%2mD(2O>Jnc*?)|e8Q|Vya6bqGTI+laaQR*`;CI2zTTqGv wT(q2y4AYY?IYAtKHDeiQnx@$Ea{90E4g6&50zZfW;Q#;t07*qoM6N<$f_5&{cmMzZ delta 335 zcmcc0e4lB8WIZzj1B1(wu46!ou{g-xiDBJ2nU_EgOS+@4BLl<6e(pbstU$hWfKQ04 zv9YnDqGCfsgM)*^31LeOfOwa~WoFzei!T+IvA=tk{2qakG5n0T@ zz;_6Q8AUa`8i0a3JY5_^Eb9HIPUhrmP~c(F?fCRx{Ped6n>=EA1Fd9Nb-LekX*}E= z^294{hnn~zfutpyTl@}1a{KQDcE58Gi-<0047(dh`GQ00DDSM?wIu&K&6g00I3;L_t(oh0T{SPuwsR z$A76P>KCYlgv88A?ShZpe1a}~hTf7P)u}gUrix%-2|Hh*YrS70Au$}4VBr%m!{81l zbFt5ME+J5!6vcV(o!{SozrS^c|7?ltP)Y$Xolf=8#fqXx0Dq*E;UuLLLI@2E{sgt9hwI`_V*T*4W zlG-t!MHy(Wtbgfq_dMhSI6PU#Vk}tpS_&Z01HmnLD+_MHe71Zap2Xu#3+46#;M@N$ z@fQPVYnrz1eldWy&K-(@U=t>(f1jK2>VEZXEHlTV=YY|0vnW7WmVAGjSh<^=dYu9I zCd{&o#bQCV?a!ajx~ZWRK-0>yd>)UV!g*azzD@uR?tfOaS6zNM6o8>Rzc+xPwBH+m ztBR1h`yW$CCje%W*!kd7K#aN00Ko1A^Z)PSqfy9YEk7p9UI5$`{kYA5#q+n1p--Rp z`TFx_7yzysMx&AS?OU;wJHS8yTm}yACR{#d!F(wtQcB!AK`#J46^!>_%ozZu&M6qZ z1@!^o>n>=Y&lEQAJkK{P@YYu|F9StUB(HfneOLAm2eb|kf7&!<^5G&DS&=ya!9-{0Tg+1VMW$|~y1Js`zh666>B9}XD2{24z1 zg*gj6B8wRq_zrK(#}Etusgt?+S`>I#SzYYD+i%E?KiDMj__lAe zf$T1|>MQ*k1#6mwL$-I#S!nTmFaNtGUlz46edN-+n6AP6V5jRojm?Sz`o4D$NQ*sS zvu=LDv*Db)!bzSIYj*E0#*_>${sllf>KohLThdXpMSH?M(#4#^c^H<9%uHG6ou-g( zYI2+>!%c)?wnoIhqZTsC_epI!LM^x&CsdTo^Si&T*r>v|jSvB@1eHsQnp&X2q& y_$N3$*KWvnTlhGmt>&FXQyQb)|2?;_R57ox7o0LzTJQkSy9}PLelF{r5}E)V<%|*l diff --git a/Resources/Textures/Interface/Alerts/borg_alive.rsi/health3.png b/Resources/Textures/Interface/Alerts/borg_alive.rsi/health3.png index fd4e7ccde30ca282745241a75cb9d3db18478f44..be9ff364eb73252c4ff6090edb604026d155b12f 100644 GIT binary patch delta 594 zcmV-Y0P-h z|BNQ`X1)6Lue7q@A0zV(T5AAyyIsHZU`^9x0A*RqPFib}Qhz#?1+CL4mD2A}iroDF^7cJhM; z@HypRC0p}%c9#Cs#>5utOAr;XGq(uMOj3YAUqVs=3rPXIe#q}G0?F0t*|LaV3}OmC z3Zeow&ySJ+kAK@O0GG=JfaCGF9D&pdUIV|20)XrFI@+c3DWygvkjmv5c&KXtxL;MlRLgY)g z*=)%3T%1`XT}Rh-!0jx^^W0Iz z8N4jT%S(u;fRwkYssJ1X*1-Dd34kBCszq->F#-~dF#yhNLrU3!?XSJ$B=ON#v!DV^ g(`4^?IsLEj2QVt`+!W^@@Bjb+07*qoM6N<$g0u@7g#Z8m delta 397 zcmaFBGKYDBWIZzj1B1(wu46!ou{g-xiDBJ2nU_EgOS+@4BLl<6e(pbstU$hcfKQ04 zv9YnDqGCfsgM)*^iwM{ILH3s%&77T`y}Z2q{r%I@(oQ=#0M*{L*VP45yd^HVqveNRr^dz&e`L})41?6_)}@+xY!v=s zD`|0GG@rvjgYkS?+unH+o4!1`c091FZOyp^U(KtxX34Nx&pkNR*jPu7bKBAS)~!({ zLOE;-HZ!6;E~}lD-F_~BkImtmt#s5{uYzMa8;U&4)0#t_cYT~up!g-()Z*}?dkL*I zd@=135!wqsxIVCI{Vd6u#K3r6vup3cUri6LOCG+p=p>Is+h=QML8iWgFE8*``dWH) jA1(O(`QO#bI!4*0B8h(^m_&g-X7F@n^K)6}l+XkKz*M2F diff --git a/Resources/Textures/Interface/Alerts/borg_alive.rsi/health4.png b/Resources/Textures/Interface/Alerts/borg_alive.rsi/health4.png index 449d4428b8efe36edd15e5f6d206ec6bf43d3050..1ef65e48a0017bbd509b4d29b5b94c9a619930e6 100644 GIT binary patch delta 719 zcmV;=0xD**5OELHDI;HxoE zRm{EZ>^A_2H85ni>fv*TJs+?=u_|lHbhFQXkm+6oltF$bZn!{h~mX4nJ@ErzW#^d=bQh=@!^>lFzvG8x5 z%q`Tcz~jQLr8=em>%aEgO$ReqY`GiQQutlaA^*61>ET?p+Qn;UbH3kFSQmNiY`ego z?>m+@E|z|07_?~0IqB)9I;&M21Gu&yl#-iNA-rX4Td2_UKlMyMRSF(yWk0aoopW8n zBQ5pmq1V^nc{to%b8A*{P{$Rc)r!JXEgcybhTWH{n%@%VylAsjT~xEmj7zJ&Zw*s8 z7MgKNbe&@GxmpW>h_#Ih0zLXII!R2y2Kxjm%GMtIuhs!%H8i9c)CGE!xSbb{biQ93 z*Dk|eu({Ub+|(n_HT`~jev#muRj7NS&}p{m7hwS>J=VWFqMOrxBtMiY5xxCw3!Cnu v4I3tjJl^+uJ!`Xt+9d;?`ucn8t@^}um{j*QG~E&ch8u&YtDnm{r-UW|)`P=4 diff --git a/Resources/Textures/Interface/Alerts/borg_critical.rsi/critical.png b/Resources/Textures/Interface/Alerts/borg_critical.rsi/critical.png new file mode 100644 index 0000000000000000000000000000000000000000..cd11538d5092193112fb55e3e5329e37678cf7c3 GIT binary patch literal 5972 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 UXNi{xJ98pURb7=brHi-z4@uaQ-T(jq literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alerts/borg_critical.rsi/meta.json b/Resources/Textures/Interface/Alerts/borg_critical.rsi/meta.json new file mode 100644 index 0000000000..cc3906665a --- /dev/null +++ b/Resources/Textures/Interface/Alerts/borg_critical.rsi/meta.json @@ -0,0 +1,21 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/tgstation/tgstation/blob/42ebbb4202b472cf94561974a30e00a0b00e11bc/icons/mob/screen1_robot.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "critical", + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Interface/Alerts/borg_dead.rsi/dead.png b/Resources/Textures/Interface/Alerts/borg_dead.rsi/dead.png new file mode 100644 index 0000000000000000000000000000000000000000..c060f9b18003b451f8c9601f4c12869250e50346 GIT binary patch literal 515 zcmV+e0{s1nP)Px$y-7qtR9J=0SJ839APjxnb%A7rbOdJre#}ByfCape`G^L{3Y{S%s2_=H3<6`v zZS(FpK*Au3`D25S$n_NbmfhP`uv{8M

$Q48vf4^XK%f@D0l}xM0dz1t0(b002ovPDHLk FV1j+T=HCDS literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alerts/borg_dead.rsi/meta.json b/Resources/Textures/Interface/Alerts/borg_dead.rsi/meta.json new file mode 100644 index 0000000000..bb68e6e4ee --- /dev/null +++ b/Resources/Textures/Interface/Alerts/borg_dead.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/tgstation/tgstation/blob/42ebbb4202b472cf94561974a30e00a0b00e11bc/icons/mob/screen1_robot.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "dead" + } + ] +} -- 2.51.2