Files
wwdpublic/Content.Shared/Traits/Assorted/Systems/PermanentBlindnessSystem.cs
GNUtopia 1b5c4cd923 Make Disabilities Permanent + Glasses' Fury (#2327)
# Description

Removes the ability to circumvent the effects of Blindness and
Wheelchair User through surgery. Additionally tweaks glasses to better
counteract nearsightedness and minor eye damage. Most glasses now
mitigate 3 points of eye damage, fully countering the nearsighted
penalty, while jamjars mitigate 3.5 points of eye damage. Also tweaks
the starting amounts of eye damage given by Blindness and Nearsighted.
Blindness gives 8 points of eye damage, up from 6 (this doesn't have any
visual effect but makes glasses worse since visual effects cap at 6
points), and Nearsighted gives 3 points of eye damage, down from 4.

---
<details><summary><h1>Media</h1></summary>
<p>

![Updated Wheelchair User
description](https://github.com/user-attachments/assets/5c97be58-1c07-452e-acaf-9f83290204ed)
![Updated Blindness
description](https://github.com/user-attachments/assets/085676fc-ff25-47fc-a673-fb89d1899a38)
![Blindness being retained after
surgery](https://github.com/user-attachments/assets/1aa6b35a-129e-4965-bf20-85f3c3f4bfa3)
![Inability to walk being retained after
surgery](https://github.com/user-attachments/assets/2f3b9d19-a75f-429d-8c9a-eeb9ee7dd82b)
(i'm trying to walk around after the surgery in the second video,
prommy)
![Blindness being partially remedied by
glasses](https://github.com/user-attachments/assets/14b8191d-d65f-4034-af37-ac331320dabe)
![Shortsighted being fully mitigated with
glasses](https://github.com/user-attachments/assets/81236a50-1898-441e-bbb2-4ae78165fd99)

</p>
</details>

---

# Changelog

🆑
- tweak: Made Wheelchair User and Blindness permanent
- tweak: Made Shortsighted less visually intense
- tweak: Made glasses counteract eye damage better

---------

Signed-off-by: Timfa <timfalken@hotmail.com>
Co-authored-by: Timfa <timfalken@hotmail.com>
(cherry picked from commit 0187c38b3a96220f133281adf311cf259b3f4e50)
2025-05-03 01:38:32 +03:00

83 lines
3.4 KiB
C#

using Content.Shared.Examine;
using Content.Shared.Eye.Blinding.Components;
using Content.Shared.Eye.Blinding.Systems;
using Content.Shared.IdentityManagement;
using Content.Shared.Traits.Assorted.Components;
using Robust.Shared.Network;
namespace Content.Shared.Traits.Assorted.Systems;
/// <summary>
/// This handles permanent blindness, both the examine and the actual effect.
/// </summary>
public sealed class PermanentBlindnessSystem : EntitySystem
{
[Dependency] private readonly INetManager _net = default!;
[Dependency] private readonly IEntityManager _entityManager = default!;
[Dependency] private readonly BlindableSystem _blinding = default!;
/// <inheritdoc/>
public override void Initialize()
{
SubscribeLocalEvent<PermanentBlindnessComponent, MapInitEvent>(OnMapInit);
SubscribeLocalEvent<PermanentBlindnessComponent, ComponentShutdown>(OnShutdown);
SubscribeLocalEvent<PermanentBlindnessComponent, ExaminedEvent>(OnExamined);
SubscribeLocalEvent<PermanentBlindnessComponent, EyeDamageChangedEvent>(OnEyeDamageChanged); // WD ADD
}
private void OnExamined(Entity<Components.PermanentBlindnessComponent> blindness, ref ExaminedEvent args)
{
if (args.IsInDetailsRange && !_net.IsClient && blindness.Comp.Blindness == 0)
{
args.PushMarkup(Loc.GetString("trait-examined-Blindness", ("target", Identity.Entity(blindness, EntityManager))));
}
}
private void OnShutdown(Entity<Components.PermanentBlindnessComponent> blindness, ref ComponentShutdown args)
{
_blinding.UpdateIsBlind(blindness.Owner);
}
private void OnMapInit(Entity<Components.PermanentBlindnessComponent> blindness, ref MapInitEvent args)
{
if (!_entityManager.TryGetComponent<BlindableComponent>(blindness, out var blindable))
return;
if (blindness.Comp.Blindness != 0)
_blinding.SetMinDamage(new Entity<BlindableComponent?>(blindness.Owner, blindable), blindness.Comp.Blindness);
else
{
var maxMagnitudeInt = (int) BlurryVisionComponent.MaxMagnitude;
_blinding.SetMinDamage(new Entity<BlindableComponent?>(blindness.Owner, blindable), maxMagnitudeInt + 2);
}
_blinding.SetIncurable(new Entity<BlindableComponent?>(blindness.Owner, blindable), blindness.Comp.Incurable);
}
// WD EDIT START
/// <summary>
/// Handles eye healing attempts to ensure blindness from the trait cannot be cured
/// </summary>
private void OnEyeDamageChanged(Entity<Components.PermanentBlindnessComponent> blindness, ref EyeDamageChangedEvent args)
{
if (!_entityManager.TryGetComponent<BlindableComponent>(blindness, out var blindable))
return;
if (blindness.Comp.Blindness != 0)
{
// Set minimum eye damage to the trait value
_blinding.SetMinDamage(new Entity<BlindableComponent?>(blindness.Owner, blindable), blindness.Comp.Blindness);
}
else
{
// Set maximum possible eye damage
var maxMagnitudeInt = (int) BlurryVisionComponent.MaxMagnitude;
_blinding.SetMinDamage(new Entity<BlindableComponent?>(blindness.Owner, blindable), maxMagnitudeInt);
}
// Update blindness state after parameter changes
_blinding.UpdateIsBlind(blindness.Owner);
}
// WD EDIT END
}