mirror of
https://github.com/wega-team/ss14-wega.git
synced 2026-06-09 10:06:49 +02:00
Merge branch 'master' into veilnew
This commit is contained in:
@@ -158,6 +158,7 @@ public sealed partial class HealthAnalyzerControl : BoxContainer
|
||||
return mobState switch
|
||||
{
|
||||
MobState.Alive => Loc.GetString("health-analyzer-window-entity-alive-text"),
|
||||
MobState.PreCritical => Loc.GetString("health-analyzer-window-entity-precritical-text"), // Corvax-Wega-Add
|
||||
MobState.Critical => Loc.GetString("health-analyzer-window-entity-critical-text"),
|
||||
MobState.Dead => Loc.GetString("health-analyzer-window-entity-dead-text"),
|
||||
_ => Loc.GetString("health-analyzer-window-entity-unknown-text"),
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
using Content.Shared.Overlays;
|
||||
using Content.Shared.Inventory.Events;
|
||||
using Robust.Client.GameObjects;
|
||||
|
||||
namespace Content.Client.Overlays;
|
||||
|
||||
public abstract class ToggleableEquipmentHudSystem<T> : EquipmentHudSystem<T>
|
||||
where T : ToggleableHudComponent
|
||||
{
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
}
|
||||
|
||||
protected override void OnRefreshComponentHud(Entity<T> ent, ref RefreshEquipmentHudEvent<T> args)
|
||||
{
|
||||
if (!ent.Comp.Enabled)
|
||||
return;
|
||||
|
||||
base.OnRefreshComponentHud(ent, ref args);
|
||||
}
|
||||
}
|
||||
@@ -32,28 +32,18 @@ public sealed class NightVisionOverlay : Overlay
|
||||
_baseShader = _prototypeManager.Index(NightVision).Instance();
|
||||
}
|
||||
|
||||
protected override bool BeforeDraw(in OverlayDrawArgs args)
|
||||
{
|
||||
if (_playerManager.LocalEntity is not { } player
|
||||
|| !_entityManager.TryGetComponent(player, out EyeComponent? eye)
|
||||
|| args.Viewport.Eye != eye.Eye)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
protected override bool BeforeDraw(in OverlayDrawArgs args)
|
||||
{
|
||||
if (_playerManager.LocalEntity is not { } player
|
||||
|| !_entityManager.TryGetComponent(player, out EyeComponent? eye)
|
||||
|| args.Viewport.Eye != eye.Eye)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (_entityManager.TryGetComponent<NightVisionComponent>(player, out var nv))
|
||||
{
|
||||
Brightness = nv.Brightness;
|
||||
LuminanceThreshold = nv.LuminanceThreshold;
|
||||
NoiseAmount = nv.NoiseAmount;
|
||||
Tint = nv.Tint;
|
||||
|
||||
_currentShader = _baseShader.Duplicate();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
_currentShader = _baseShader.Duplicate();
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void Draw(in OverlayDrawArgs args)
|
||||
{
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
using Content.Client.Overlays;
|
||||
using Content.Shared.Inventory.Events;
|
||||
using Content.Shared.Shaders;
|
||||
using Robust.Client.Graphics;
|
||||
using Robust.Client.Player;
|
||||
using Robust.Shared.Player;
|
||||
using Robust.Shared.GameStates;
|
||||
|
||||
namespace Content.Client.Shaders.Systems;
|
||||
|
||||
public sealed class NightVisionSystem : EntitySystem
|
||||
public sealed class NightVisionSystem : ToggleableEquipmentHudSystem<NightVisionComponent>
|
||||
{
|
||||
[Dependency] private readonly IPlayerManager _player = default!;
|
||||
[Dependency] private readonly IOverlayManager _overlayMan = default!;
|
||||
[Dependency] private readonly ILightManager _lightManager = default!;
|
||||
|
||||
@@ -15,59 +15,38 @@ public sealed class NightVisionSystem : EntitySystem
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<NightVisionComponent, ComponentInit>(OnNightVisionInit);
|
||||
SubscribeLocalEvent<NightVisionComponent, ComponentShutdown>(OnNightVisionShutdown);
|
||||
|
||||
SubscribeLocalEvent<NightVisionComponent, LocalPlayerAttachedEvent>(OnPlayerAttached);
|
||||
SubscribeLocalEvent<NightVisionComponent, LocalPlayerDetachedEvent>(OnPlayerDetached);
|
||||
|
||||
base.Initialize();
|
||||
SubscribeLocalEvent<NightVisionComponent, AfterAutoHandleStateEvent>(OnHandleState);
|
||||
_overlay = new();
|
||||
}
|
||||
|
||||
private void UpdateLighting(bool isActive)
|
||||
public void OnHandleState(Entity<NightVisionComponent> ent, ref AfterAutoHandleStateEvent args)
|
||||
{
|
||||
_lightManager.DrawLighting = isActive;
|
||||
RefreshOverlay();
|
||||
}
|
||||
|
||||
private void OnPlayerAttached(EntityUid uid, NightVisionComponent component, LocalPlayerAttachedEvent args)
|
||||
protected override void UpdateInternal(RefreshEquipmentHudEvent<NightVisionComponent> args)
|
||||
{
|
||||
UpdateLighting(false);
|
||||
UpdateOverlay(component);
|
||||
_overlayMan.AddOverlay(_overlay);
|
||||
}
|
||||
base.UpdateInternal(args);
|
||||
|
||||
private void OnPlayerDetached(EntityUid uid, NightVisionComponent component, LocalPlayerDetachedEvent args)
|
||||
{
|
||||
UpdateLighting(true);
|
||||
_overlayMan.RemoveOverlay(_overlay);
|
||||
}
|
||||
if (args.Components.Count == 0)
|
||||
return;
|
||||
|
||||
private void OnNightVisionInit(EntityUid uid, NightVisionComponent component, ComponentInit args)
|
||||
{
|
||||
if (_player.LocalEntity == uid)
|
||||
{
|
||||
UpdateLighting(false);
|
||||
UpdateOverlay(component);
|
||||
_overlayMan.AddOverlay(_overlay);
|
||||
}
|
||||
}
|
||||
var component = args.Components[0];
|
||||
|
||||
private void OnNightVisionShutdown(EntityUid uid, NightVisionComponent component, ComponentShutdown args)
|
||||
{
|
||||
if (_player.LocalEntity == uid)
|
||||
{
|
||||
UpdateLighting(true);
|
||||
_overlayMan.RemoveOverlay(_overlay);
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateOverlay(NightVisionComponent component)
|
||||
{
|
||||
_overlay.Brightness = component.Brightness;
|
||||
_overlay.LuminanceThreshold = component.LuminanceThreshold;
|
||||
_overlay.NoiseAmount = component.NoiseAmount;
|
||||
_overlay.Tint = component.Tint;
|
||||
|
||||
_lightManager.DrawLighting = false;
|
||||
_overlayMan.AddOverlay(_overlay);
|
||||
}
|
||||
|
||||
protected override void DeactivateInternal()
|
||||
{
|
||||
base.DeactivateInternal();
|
||||
_lightManager.DrawLighting = true;
|
||||
_overlayMan.RemoveOverlay(_overlay);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ public sealed partial class NukeopsRuleComponent : Component
|
||||
[DataField]
|
||||
public RoundEndBehavior RoundEndBehavior = RoundEndBehavior.ShuttleCall;
|
||||
//Corvax-Wega-War-Edit-Start
|
||||
public string? SetAlertlevel = "martial_law";
|
||||
public string? SetAlertlevel = "gamma";
|
||||
[DataField]
|
||||
public uint AlertlevelDelay = 10;
|
||||
[DataField]
|
||||
|
||||
@@ -37,6 +37,8 @@ using Content.Shared.Standing;
|
||||
using Content.Shared.StatusEffectNew;
|
||||
using Content.Shared.Stunnable;
|
||||
using Content.Shared.Timing;
|
||||
using Content.Shared.Hands.Components;
|
||||
using Content.Shared.Examine;
|
||||
using Robust.Server.GameObjects;
|
||||
using Robust.Shared.Audio;
|
||||
using Robust.Shared.Containers;
|
||||
@@ -46,7 +48,6 @@ using Robust.Shared.Physics.Systems;
|
||||
using Robust.Shared.Player;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Random;
|
||||
using Content.Shared.Examine;
|
||||
|
||||
namespace Content.Server.Blood.Cult;
|
||||
|
||||
@@ -186,28 +187,20 @@ public sealed partial class BloodCultSystem
|
||||
|
||||
private void OnStun(EntityUid cultist, BloodCultistComponent component, BloodCultStunActionEvent args)
|
||||
{
|
||||
var spellGear = new ProtoId<StartingGearPrototype>("BloodCultSpellStunGear");
|
||||
|
||||
var dropEvent = new DropHandItemsEvent();
|
||||
RaiseLocalEvent(cultist, ref dropEvent);
|
||||
List<ProtoId<StartingGearPrototype>> gear = new() { spellGear };
|
||||
_loadout.Equip(cultist, gear, null);
|
||||
|
||||
args.Handled = true;
|
||||
EmpoweringCheck(args.Action, component);
|
||||
if (TrySpawnSpellInHand(cultist, "BloodCultSpellStun"))
|
||||
{
|
||||
args.Handled = true;
|
||||
EmpoweringCheck(args.Action, component);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnTeleport(EntityUid cultist, BloodCultistComponent component, BloodCultTeleportActionEvent args)
|
||||
{
|
||||
var spellGear = new ProtoId<StartingGearPrototype>("BloodCultSpellTeleportGear");
|
||||
|
||||
var dropEvent = new DropHandItemsEvent();
|
||||
RaiseLocalEvent(cultist, ref dropEvent);
|
||||
List<ProtoId<StartingGearPrototype>> gear = new() { spellGear };
|
||||
_loadout.Equip(cultist, gear, null);
|
||||
|
||||
args.Handled = true;
|
||||
EmpoweringCheck(args.Action, component);
|
||||
if (TrySpawnSpellInHand(cultist, "BloodCultSpellTeleport"))
|
||||
{
|
||||
args.Handled = true;
|
||||
EmpoweringCheck(args.Action, component);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnElectromagneticPulse(EntityUid cultist, BloodCultistComponent component, BloodCultElectromagneticPulseActionEvent args)
|
||||
@@ -248,41 +241,29 @@ public sealed partial class BloodCultSystem
|
||||
|
||||
private void OnShadowShackles(EntityUid cultist, BloodCultistComponent component, BloodCultShadowShacklesActionEvent args)
|
||||
{
|
||||
var spellGear = new ProtoId<StartingGearPrototype>("BloodCultSpellShadowShacklesGear");
|
||||
|
||||
var dropEvent = new DropHandItemsEvent();
|
||||
RaiseLocalEvent(cultist, ref dropEvent);
|
||||
List<ProtoId<StartingGearPrototype>> gear = new() { spellGear };
|
||||
_loadout.Equip(cultist, gear, null);
|
||||
|
||||
args.Handled = true;
|
||||
EmpoweringCheck(args.Action, component);
|
||||
if (TrySpawnSpellInHand(cultist, "BloodCultSpellShadowShackles"))
|
||||
{
|
||||
args.Handled = true;
|
||||
EmpoweringCheck(args.Action, component);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnTwistedConstruction(EntityUid cultist, BloodCultistComponent component, BloodCultTwistedConstructionActionEvent args)
|
||||
{
|
||||
var spellGear = new ProtoId<StartingGearPrototype>("BloodCultSpellTwistedConstructionGear");
|
||||
|
||||
var dropEvent = new DropHandItemsEvent();
|
||||
RaiseLocalEvent(cultist, ref dropEvent);
|
||||
List<ProtoId<StartingGearPrototype>> gear = new() { spellGear };
|
||||
_loadout.Equip(cultist, gear, null);
|
||||
|
||||
args.Handled = true;
|
||||
EmpoweringCheck(args.Action, component);
|
||||
if (TrySpawnSpellInHand(cultist, "BloodCultSpellTwistedConstruction"))
|
||||
{
|
||||
args.Handled = true;
|
||||
EmpoweringCheck(args.Action, component);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnSummonEquipment(EntityUid cultist, BloodCultistComponent component, BloodCultSummonEquipmentActionEvent args)
|
||||
{
|
||||
var spellGear = new ProtoId<StartingGearPrototype>("BloodCultSpellSummonEquipmentGear");
|
||||
|
||||
var dropEvent = new DropHandItemsEvent();
|
||||
RaiseLocalEvent(cultist, ref dropEvent);
|
||||
List<ProtoId<StartingGearPrototype>> gear = new() { spellGear };
|
||||
_loadout.Equip(cultist, gear, null);
|
||||
|
||||
args.Handled = true;
|
||||
EmpoweringCheck(args.Action, component);
|
||||
if (TrySpawnSpellInHand(cultist, "BloodCultSpellSummonEquipment"))
|
||||
{
|
||||
args.Handled = true;
|
||||
EmpoweringCheck(args.Action, component);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnSummonDagger(EntityUid cultist, BloodCultistComponent component, BloodCultSummonDaggerActionEvent args)
|
||||
@@ -398,15 +379,11 @@ public sealed partial class BloodCultSystem
|
||||
#region Blood Rites
|
||||
private void OnBloodRites(EntityUid cultist, BloodCultistComponent component, BloodCultBloodRitesActionEvent args)
|
||||
{
|
||||
var spellGear = new ProtoId<StartingGearPrototype>("BloodCultSpellBloodRitesGear");
|
||||
|
||||
var dropEvent = new DropHandItemsEvent();
|
||||
RaiseLocalEvent(cultist, ref dropEvent);
|
||||
List<ProtoId<StartingGearPrototype>> gear = new() { spellGear };
|
||||
_loadout.Equip(cultist, gear, null);
|
||||
|
||||
args.Handled = true;
|
||||
EmpoweringCheck(args.Action, component);
|
||||
if (TrySpawnSpellInHand(cultist, "BloodCultSpellBloodRites"))
|
||||
{
|
||||
args.Handled = true;
|
||||
EmpoweringCheck(args.Action, component);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnExamine(EntityUid uid, BloodSpellComponent spell, ExaminedEvent args)
|
||||
@@ -603,16 +580,13 @@ public sealed partial class BloodCultSystem
|
||||
_popup.PopupEntity(Loc.GetString("blood-cult-bolt-barrage-failed"), cultist, cultist, PopupType.SmallCaution);
|
||||
return;
|
||||
}
|
||||
|
||||
var boltBarrageGear = new ProtoId<StartingGearPrototype>("BloodCultSpellBloodBarrageGear");
|
||||
var dropEvent = new DropHandItemsEvent();
|
||||
RaiseLocalEvent(cultist, ref dropEvent);
|
||||
List<ProtoId<StartingGearPrototype>> gear = new() { boltBarrageGear };
|
||||
_loadout.Equip(cultist, gear, null);
|
||||
|
||||
component.BloodCount -= 200;
|
||||
_action.RemoveAction(cultist, args.Action!);
|
||||
args.Handled = true;
|
||||
|
||||
if (TrySpawnSpellInHand(cultist, "BloodCultSpellBloodBarrage"))
|
||||
{
|
||||
component.BloodCount -= 200;
|
||||
_action.RemoveAction(cultist, args.Action!);
|
||||
args.Handled = true;
|
||||
}
|
||||
}
|
||||
#endregion Blood Rites
|
||||
#endregion Abilities
|
||||
@@ -1055,5 +1029,25 @@ public sealed partial class BloodCultSystem
|
||||
_action.RemoveAction(spell);
|
||||
}
|
||||
}
|
||||
|
||||
private bool TrySpawnSpellInHand(EntityUid uid, EntProtoId proto)
|
||||
{
|
||||
if (!TryComp<HandsComponent>(uid, out var hands))
|
||||
return false;
|
||||
|
||||
var spell = Spawn(proto, Transform(uid).Coordinates);
|
||||
var activeHand = _hands.GetActiveHand((uid, hands));
|
||||
|
||||
if (_hands.TryPickupAnyHand(uid, spell))
|
||||
return true;
|
||||
|
||||
else if (activeHand != null && _hands.TryForcePickup((uid, hands), spell, activeHand))
|
||||
return true;
|
||||
|
||||
else
|
||||
QueueDel(spell);
|
||||
return false;
|
||||
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ public sealed class DamageInContainerSystem : EntitySystem
|
||||
finalDamage = comp.Damage.Clone();
|
||||
if (comp.DamageGroups != null && !comp.DamageGroups.Empty)
|
||||
{
|
||||
var groupsHeal = _damageable.CreateWeightedHealFromGroups(uid, comp.DamageGroups);
|
||||
var groupsHeal = _damageable.CreateWeightedHealFromGroups(contained, comp.DamageGroups);
|
||||
finalDamage += groupsHeal;
|
||||
}
|
||||
}
|
||||
@@ -69,13 +69,16 @@ public sealed class DamageInContainerSystem : EntitySystem
|
||||
}
|
||||
else if (comp.DamageGroups != null && !comp.DamageGroups.Empty)
|
||||
{
|
||||
finalDamage = _damageable.CreateWeightedHealFromGroups(uid, comp.DamageGroups);
|
||||
finalDamage = _damageable.CreateWeightedHealFromGroups(contained, comp.DamageGroups);
|
||||
}
|
||||
else
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (finalDamage == null)
|
||||
continue;
|
||||
|
||||
if (TryComp<MobStateComponent>(contained, out var mobState))
|
||||
{
|
||||
foreach (var allowedState in comp.AllowedStates)
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
using Content.Shared.Shaders;
|
||||
using Content.Shared.Overlay;
|
||||
|
||||
namespace Content.Server.Overlay;
|
||||
|
||||
public sealed class NightVisionSystem : SharedToggleableEquipmentHudSystem<NightVisionComponent>;
|
||||
@@ -210,7 +210,8 @@ public sealed partial class VampireSystem
|
||||
if (!TryComp<EntityStorageComponent>(coffin, out var storage) || storage.Contents.ContainedEntities.Count == 0)
|
||||
return;
|
||||
|
||||
foreach (var contentsEnt in storage.Contents.ContainedEntities)
|
||||
var entities = storage.Contents.ContainedEntities.ToList();
|
||||
foreach (var contentsEnt in entities)
|
||||
{
|
||||
_container.Remove(contentsEnt, storage.Contents);
|
||||
_status.TryRemoveStatusEffect(contentsEnt, ForceSleeping);
|
||||
|
||||
@@ -33,6 +33,7 @@ using Content.Shared.Weapons.Ranged.Events;
|
||||
using Content.Shared.Wieldable;
|
||||
using Content.Shared.Zombies;
|
||||
using Content.Shared.Lavaland.Events; // Corvax-Wega-Lavaland
|
||||
using Content.Shared.Shaders; // Corvax-Wega-NightVision
|
||||
|
||||
namespace Content.Shared.Inventory;
|
||||
|
||||
@@ -106,7 +107,8 @@ public partial class InventorySystem
|
||||
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<NoirOverlayComponent>>(RefRelayInventoryEvent);
|
||||
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<ThermalSightComponent>>(RefRelayInventoryEvent);
|
||||
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<RaveOverlayComponent>>(RefRelayInventoryEvent); // Corvax-Wega-Add
|
||||
|
||||
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<NightVisionComponent>>(RefRelayInventoryEvent); // Corvax-Wega-Add
|
||||
|
||||
SubscribeLocalEvent<InventoryComponent, GetVerbsEvent<EquipmentVerb>>(OnGetEquipmentVerbs);
|
||||
SubscribeLocalEvent<InventoryComponent, GetVerbsEvent<InnateVerb>>(OnGetInnateVerbs);
|
||||
|
||||
|
||||
@@ -15,10 +15,10 @@ public sealed partial class DamageInContainerComponent : Component
|
||||
public float Interval = 1f;
|
||||
|
||||
[DataField, AutoNetworkedField]
|
||||
public DamageSpecifier Damage = default!;
|
||||
public DamageSpecifier? Damage = default!;
|
||||
|
||||
[DataField, AutoNetworkedField]
|
||||
public GroupHealSpecifier DamageGroups = default!;
|
||||
public GroupHealSpecifier? DamageGroups = default!;
|
||||
|
||||
[DataField]
|
||||
public EntityWhitelist? Whitelist;
|
||||
|
||||
@@ -0,0 +1,115 @@
|
||||
using Content.Shared.Actions;
|
||||
using Content.Shared.Item.ItemToggle;
|
||||
using Content.Shared.Overlays;
|
||||
using Content.Shared.Popups;
|
||||
using Content.Shared.PowerCell;
|
||||
using Content.Shared.Toggleable;
|
||||
using Robust.Shared.Audio.Systems;
|
||||
using Robust.Shared.Timing;
|
||||
|
||||
namespace Content.Shared.Overlay;
|
||||
|
||||
public abstract class SharedToggleableEquipmentHudSystem<T> : EntitySystem where T : ToggleableHudComponent
|
||||
{
|
||||
[Dependency] private readonly SharedActionsSystem _actions = default!;
|
||||
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
||||
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
||||
[Dependency] private readonly PowerCellSystem _powerCell = default!;
|
||||
[Dependency] private readonly ActionContainerSystem _actionContainer = default!;
|
||||
[Dependency] private readonly ItemToggleSystem _toggle = default!;
|
||||
[Dependency] private readonly IGameTiming _gameTiming = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
SubscribeLocalEvent<T, ToggleActionEvent>(OnToggleAction);
|
||||
SubscribeLocalEvent<T, MapInitEvent>(OnMapInit);
|
||||
SubscribeLocalEvent<T, GetItemActionsEvent>(OnGetItemActions);
|
||||
}
|
||||
|
||||
public override void Update(float frameTime)
|
||||
{
|
||||
base.Update(frameTime);
|
||||
|
||||
var query = EntityQueryEnumerator<T>();
|
||||
while (query.MoveNext(out var uid, out var hud))
|
||||
{
|
||||
if (!hud.Enabled)
|
||||
continue;
|
||||
|
||||
if (hud.NextChargeCheck >= _gameTiming.CurTime)
|
||||
continue;
|
||||
|
||||
if (!_powerCell.HasDrawCharge(uid))
|
||||
{
|
||||
TurnOff((uid, hud));
|
||||
continue;
|
||||
}
|
||||
|
||||
hud.NextChargeCheck = _gameTiming.CurTime + hud.ChargeCheckInterval;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnMapInit(Entity<T> ent, ref MapInitEvent args)
|
||||
{
|
||||
_actionContainer.EnsureAction(ent, ref ent.Comp.ActionEntity, ent.Comp.ToggleAction);
|
||||
}
|
||||
|
||||
private void OnGetItemActions(Entity<T> ent, ref GetItemActionsEvent args)
|
||||
{
|
||||
if (args.InHands)
|
||||
return;
|
||||
|
||||
args.AddAction(ref ent.Comp.ActionEntity, ent.Comp.ToggleAction);
|
||||
_actions.SetToggled(ent.Comp.ActionEntity, ent.Comp.Enabled);
|
||||
}
|
||||
|
||||
private void OnToggleAction(Entity<T> ent, ref ToggleActionEvent args)
|
||||
{
|
||||
if (args.Handled)
|
||||
return;
|
||||
|
||||
args.Handled = true;
|
||||
|
||||
if (!ent.Comp.Enabled)
|
||||
{
|
||||
if (!_powerCell.HasDrawCharge(ent.Owner, user: args.Performer))
|
||||
{
|
||||
_audio.PlayPvs(ent.Comp.ActivateFailSound, ent);
|
||||
_popup.PopupEntity(Loc.GetString("toggleable-hud-no-power"), ent, args.Performer);
|
||||
return;
|
||||
}
|
||||
|
||||
TryActivate(ent);
|
||||
}
|
||||
else
|
||||
{
|
||||
TurnOff(ent);
|
||||
}
|
||||
}
|
||||
|
||||
private bool TryActivate(Entity<T> ent)
|
||||
{
|
||||
if (!_toggle.TryActivate(ent.Owner))
|
||||
return false;
|
||||
|
||||
ent.Comp.Enabled = true;
|
||||
ent.Comp.NextChargeCheck = _gameTiming.CurTime;
|
||||
|
||||
_actions.SetToggled(ent.Comp.ActionEntity, ent.Comp.Enabled);
|
||||
Dirty(ent);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void TurnOff(Entity<T> ent)
|
||||
{
|
||||
if (!ent.Comp.Enabled)
|
||||
return;
|
||||
|
||||
ent.Comp.Enabled = false;
|
||||
_actions.SetToggled(ent.Comp.ActionEntity, ent.Comp.Enabled);
|
||||
_toggle.TryDeactivate(ent.Owner);
|
||||
Dirty(ent);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Audio;
|
||||
|
||||
namespace Content.Shared.Overlays;
|
||||
|
||||
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true)]
|
||||
public abstract partial class ToggleableHudComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
public EntProtoId ToggleAction = "ActionToggleHud";
|
||||
|
||||
[DataField, AutoNetworkedField]
|
||||
public EntityUid? ActionEntity;
|
||||
|
||||
[DataField]
|
||||
public TimeSpan ChargeCheckInterval = TimeSpan.FromSeconds(1);
|
||||
|
||||
[ViewVariables]
|
||||
public TimeSpan NextChargeCheck = TimeSpan.Zero;
|
||||
|
||||
[DataField, AutoNetworkedField]
|
||||
public bool Enabled = false;
|
||||
|
||||
[DataField]
|
||||
public SoundSpecifier ActivateFailSound = new SoundPathSpecifier("/Audio/Machines/button.ogg");
|
||||
}
|
||||
@@ -1,19 +1,20 @@
|
||||
using Robust.Shared.GameStates;
|
||||
using Content.Shared.Overlays;
|
||||
|
||||
namespace Content.Shared.Shaders;
|
||||
|
||||
[RegisterComponent, NetworkedComponent]
|
||||
public sealed partial class NightVisionComponent : Component
|
||||
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true)]
|
||||
public sealed partial class NightVisionComponent : ToggleableHudComponent
|
||||
{
|
||||
[DataField("brightness")]
|
||||
public float Brightness = 1.5f;
|
||||
[DataField("brightness"), AutoNetworkedField]
|
||||
public float Brightness = 1f;
|
||||
|
||||
[DataField("tint")]
|
||||
[DataField("tint"), AutoNetworkedField]
|
||||
public Color Tint = Color.FromHex("#1c89f2");
|
||||
|
||||
[DataField("luminanceThreshold")]
|
||||
public float LuminanceThreshold = 0.5f;
|
||||
[DataField("luminanceThreshold"), AutoNetworkedField]
|
||||
public float LuminanceThreshold = 0f;
|
||||
|
||||
[DataField("noiseAmount")]
|
||||
[DataField("noiseAmount"), AutoNetworkedField]
|
||||
public float NoiseAmount = 0.075f;
|
||||
}
|
||||
|
||||
Binary file not shown.
@@ -15,3 +15,13 @@
|
||||
license: "CC-BY-NC-4.0"
|
||||
copyright: "Taken from CassetteRewind.flac by acclivity. Converted from Flac to Ogg."
|
||||
source: "https://freesound.org/people/acclivity/sounds/23393/"
|
||||
|
||||
- files: ["activate.ogg"]
|
||||
license: "CC-BY-NC-SA-3.0"
|
||||
copyright: "Taken from TGstation"
|
||||
source: "https://github.com/tgstation/tgstation"
|
||||
|
||||
- files: ["deactivate.ogg"]
|
||||
license: "CC-BY-NC-SA-3.0"
|
||||
copyright: "Taken from TGstation"
|
||||
source: "https://github.com/tgstation/tgstation"
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
health-analyzer-window-entity-precritical-text = Подкритическое
|
||||
|
||||
@@ -50,3 +50,5 @@ uplink-energy-shield-module-bundle-name = набор модулей энерге
|
||||
uplink-energy-shield-module-bundle-desc = Комплект из пяти модулей энергетического щита в удобной сумке. Позволяет оснастить всю команду личной защитой.
|
||||
uplink-xc67-agent-name = xC-67
|
||||
uplink-xc67-agent-desc = Невероятная штурмовая винтовка xC-67, которая позволит бадаться со станцией на равной.
|
||||
uplink-nightvision-name = прибор ночного видения
|
||||
uplink-nightvision-desc = Прибор, благодаря которому вы сможете видеть в темноте. Очень полезен, если вы собираетесь сделать LIGHTS OFF!
|
||||
@@ -179,7 +179,7 @@ corvax-chatsan-replacement-89 = доказал
|
||||
corvax-chatsan-word-90 = брух
|
||||
corvax-chatsan-replacement-90 = мда...
|
||||
corvax-chatsan-word-91 = имба
|
||||
corvax-chatsan-replacement-91 = имба # corvax-wega-edit
|
||||
corvax-chatsan-replacement-91 = нечестно
|
||||
corvax-chatsan-word-92 = разлокать
|
||||
corvax-chatsan-replacement-92 = разблокировать
|
||||
corvax-chatsan-word-93 = юзать
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
ent-ActionToggleNaturalNightVision = Переключение зрения
|
||||
.desc = Моргните чтобы увидеть мир иначе.
|
||||
.desc = Моргните чтобы увидеть мир иначе.
|
||||
ent-ActionToggleHud = Переключить HUD
|
||||
.desc = Переключает графический интерфейс элемента одежды.
|
||||
@@ -3,4 +3,6 @@ ent-ClothingEyesGlassesMedSecSunglasses = мед-охранные очки
|
||||
ent-ClothingEyesGlassesMedSunglasses = медицинские очки
|
||||
.desc = Пара солнцезащитных очков с мед-охранным интерфейсом.
|
||||
ent-ClothingEyesJudicialVisor = очки вершителя
|
||||
.desc = Надёжные очки, при взгляде на которые вспоминается странное чувство греха.
|
||||
.desc = Надёжные очки, при взгляде на которые вспоминается странное чувство греха.
|
||||
ent-ClothingEyesGlassesNightVision = очки ночного зрения
|
||||
.desc = Очки, позволяющие вам видеть сквозь тьму.
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
ent-ThiefPersonalAI = { ent-PersonalAI }
|
||||
.desc = { ent-PersonalAI.desc }
|
||||
.suffix = Воровской
|
||||
.suffix = Воровской
|
||||
ent-ActionPAIPolymorphBorgi = Форма "Гав"
|
||||
.desc = Станьте борги и следуйте за своим хозяином.
|
||||
ent-Borgi = борги
|
||||
.desc = ПИИ теперь физически следует за вами, невероятно!
|
||||
@@ -6,7 +6,7 @@
|
||||
announcement: alert-level-green-announcement
|
||||
color: Green
|
||||
emergencyLightColor: LawnGreen
|
||||
shuttleTime: 600
|
||||
shuttleTime: 300 # Corvax-Wega-Edit
|
||||
blue:
|
||||
announcement: alert-level-blue-announcement
|
||||
sound: /Audio/Misc/bluealert.ogg
|
||||
@@ -46,6 +46,7 @@
|
||||
color: PaleVioletRed
|
||||
emergencyLightColor: PaleVioletRed
|
||||
forceEnableEmergencyLights: true
|
||||
shuttleTime: 600 # Corvax-Wega-Add
|
||||
delta:
|
||||
announcement: alert-level-delta-announcement
|
||||
selectable: false
|
||||
@@ -57,7 +58,7 @@
|
||||
color: DarkRed
|
||||
emergencyLightColor: Orange
|
||||
forceEnableEmergencyLights: true
|
||||
shuttleTime: 1200
|
||||
shuttleTime: 300 # Corvax-Wega-Edit
|
||||
epsilon:
|
||||
announcement: alert-level-epsilon-announcement
|
||||
selectable: false
|
||||
|
||||
@@ -344,11 +344,19 @@
|
||||
- type: DamageInContainer
|
||||
allowedStates:
|
||||
- Alive
|
||||
- PreCritical
|
||||
- Critical
|
||||
damage:
|
||||
types:
|
||||
Heat: -3
|
||||
Blunt: -3
|
||||
Heat: -6
|
||||
Blunt: -6
|
||||
Slash: -6
|
||||
Piercing: -6
|
||||
Shock: -2
|
||||
damageGroups:
|
||||
groups:
|
||||
Brute: 0
|
||||
Burn: 0
|
||||
slotId: entity_storage
|
||||
whitelist:
|
||||
components:
|
||||
|
||||
@@ -49,13 +49,13 @@
|
||||
recipes:
|
||||
- ProximitySensor
|
||||
# # Corvax-Wega-Android-Start
|
||||
# - AndroidBodyPart
|
||||
# - ArmSyntheticPry
|
||||
# - ArmSyntheticDefib
|
||||
# - ArmSyntheticProtoKinetic
|
||||
# - ArmSyntheticCharger
|
||||
# - LegSyntheticMagboots
|
||||
# - LegSyntheticJump
|
||||
- AndroidBodyPart
|
||||
- ArmSyntheticPry
|
||||
- ArmSyntheticDefib
|
||||
- ArmSyntheticProtoKinetic
|
||||
- ArmSyntheticCharger
|
||||
- LegSyntheticMagboots
|
||||
- LegSyntheticJump
|
||||
# # Corvax-Wega-Android-End
|
||||
|
||||
- type: latheRecipePack
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
- WeaponProtoKineticAccelerator
|
||||
- ShuttleGunKineticCircuitboard
|
||||
- BorgModuleKinetic # Corvax-Wega-Kinetic
|
||||
# - ArmSyntheticProtoKinetic # Corvax-Wega-Androids
|
||||
- ArmSyntheticProtoKinetic # Corvax-Wega-Androids
|
||||
# These are roundstart but not replenishable for salvage
|
||||
|
||||
- type: technology
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
cost: 5000
|
||||
recipeUnlocks:
|
||||
- ProximitySensor
|
||||
# - AndroidBodyPart # Corvax-Wega-Android
|
||||
- BorgModuleRobotics # Corvax-Wega-Add
|
||||
|
||||
- type: technology
|
||||
@@ -69,7 +68,7 @@
|
||||
recipeUnlocks:
|
||||
- ClothingShoesBootsMagSci
|
||||
- ClothingShoesBootsMoon
|
||||
# - LegSyntheticMagboots # Corvax-Wega-Androids
|
||||
- LegSyntheticMagboots # Corvax-Wega-Androids
|
||||
- MagnetSuitModule # Corvax-Wega-add
|
||||
|
||||
- type: technology
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
- PowerCellHigh
|
||||
- TurboItemRechargerCircuitboard
|
||||
- SMESAdvancedMachineCircuitboard
|
||||
# - ArmSyntheticCharger # Corvax-Wega-Androids
|
||||
- ArmSyntheticCharger # Corvax-Wega-Androids
|
||||
|
||||
- type: technology
|
||||
id: MechanicalCompression
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
# shoes: ClothingShoesColorBlack # Corvax-Wega-Edit
|
||||
id: ChaplainPDA
|
||||
ears: ClothingHeadsetService
|
||||
belt: ClothingBeltSheathChaplinFilled
|
||||
storage:
|
||||
back:
|
||||
- RubberStampChaplain
|
||||
|
||||
@@ -21,6 +21,19 @@
|
||||
- type: InstantAction
|
||||
event: !type:DamageOnActionEvent
|
||||
|
||||
- type: entity
|
||||
parent: BaseAction
|
||||
id: ActionToggleHud
|
||||
name: Toggle HUD
|
||||
description: Toggles HUD of your cloth.
|
||||
components:
|
||||
- type: Action
|
||||
itemIconStyle: BigItem
|
||||
priority: -20
|
||||
useDelay: 1
|
||||
- type: InstantAction
|
||||
event: !type:ToggleActionEvent
|
||||
|
||||
- type: entity
|
||||
parent: BaseSuicideAction
|
||||
id: ActionActivateBluespaceLifeline
|
||||
@@ -36,4 +49,4 @@
|
||||
sprite: _Wega/Effects/bluespace_lifeline.rsi
|
||||
state: bluespace_lifeline
|
||||
- type: InstantAction
|
||||
event: !type:ActivateImplantEvent
|
||||
event: !type:ActivateImplantEvent
|
||||
|
||||
@@ -555,6 +555,16 @@
|
||||
TacticalResource: 1
|
||||
categories:
|
||||
- ERTEquipment
|
||||
|
||||
- type: listing
|
||||
id: ERTNightVision
|
||||
name: uplink-nightvision-name
|
||||
description: uplink-nightvision-desc
|
||||
productEntity: ClothingEyesGlassesNightVision
|
||||
cost:
|
||||
TacticalResource: 10
|
||||
categories:
|
||||
- ERTEquipment
|
||||
|
||||
- type: listing
|
||||
id: ERTRCDCombat
|
||||
|
||||
@@ -423,6 +423,19 @@
|
||||
whitelist:
|
||||
tags:
|
||||
- NukeOpsUplink
|
||||
|
||||
- type: listing
|
||||
id: UplinkNightVision
|
||||
name: uplink-nightvision-name
|
||||
description: uplink-nightvision-desc
|
||||
productEntity: ClothingEyesGlassesNightVision
|
||||
discountCategory: usualDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 2
|
||||
cost:
|
||||
Telecrystal: 3
|
||||
categories:
|
||||
- UplinkWearables
|
||||
|
||||
- type: listing
|
||||
id: UplinkLoyaltyImplant
|
||||
|
||||
@@ -37,6 +37,39 @@
|
||||
- type: Construction
|
||||
graph: GlassesMedSec
|
||||
node: medsecGlasses
|
||||
|
||||
- type: entity
|
||||
parent: ClothingEyesBase
|
||||
id: ClothingEyesGlassesNightVision
|
||||
name: night vision goggles
|
||||
description: a pair of goggles that allows you to see through dark.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _Wega/Clothing/Eyes/nightvision.rsi
|
||||
layers:
|
||||
- state: icon-off
|
||||
map: [ "enum.ToggleableVisuals.Layer" ]
|
||||
- type: Clothing
|
||||
sprite: _Wega/Clothing/Eyes/nightvision.rsi
|
||||
- type: Tag
|
||||
tags:
|
||||
- WhitelistChameleon
|
||||
- type: IdentityBlocker
|
||||
coverage: EYES
|
||||
- type: NightVision
|
||||
tint: "#00800000"
|
||||
- type: ItemToggle
|
||||
soundActivate: /Audio/_Wega/Items/activate.ogg
|
||||
soundDeactivate: /Audio/_Wega/Items/deactivate.ogg
|
||||
onUse: false
|
||||
onActivate: false
|
||||
- type: Appearance
|
||||
- type: GenericVisualizer
|
||||
visuals:
|
||||
enum.ToggleableVisuals.Enabled:
|
||||
enum.ToggleableVisuals.Layer:
|
||||
True: { state: "icon" }
|
||||
False: { state: "icon-off" }
|
||||
|
||||
# ADT
|
||||
|
||||
|
||||
@@ -267,12 +267,12 @@
|
||||
whitelist:
|
||||
components:
|
||||
- BorgModule
|
||||
# - hand:
|
||||
# emptyRepresentative: LeftArmSyntheticPry
|
||||
# emptyLabel: borg-slot-bodypart-empty
|
||||
# whitelist:
|
||||
# tags:
|
||||
# - BaseBodyPart
|
||||
- hand:
|
||||
emptyRepresentative: ArmSyntheticPry
|
||||
emptyLabel: borg-slot-bodypart-empty
|
||||
whitelist:
|
||||
tags:
|
||||
- BaseBodyPart
|
||||
- hand:
|
||||
emptyRepresentative: PowerCellSmall
|
||||
emptyLabel: borg-slot-powercell-empty
|
||||
|
||||
@@ -17,7 +17,14 @@
|
||||
damage:
|
||||
types:
|
||||
Heat: -3
|
||||
Blunt: -3
|
||||
Blunt: -3
|
||||
Slash: -3
|
||||
Piercing: -3
|
||||
Shock: -1
|
||||
damageGroups:
|
||||
groups:
|
||||
Brute: 0
|
||||
Burn: 0
|
||||
slotId: entity_storage
|
||||
whitelist:
|
||||
components:
|
||||
|
||||
@@ -175,80 +175,80 @@
|
||||
Gold: 500
|
||||
Plasma: 500
|
||||
|
||||
# - type: latheRecipe
|
||||
# parent: BaseRoboticsRecipe
|
||||
# id: ArmSyntheticPry
|
||||
# result: LeftArmSyntheticPry
|
||||
# categories:
|
||||
# - Android
|
||||
# completetime: 5
|
||||
# materials:
|
||||
# Steel: 750
|
||||
# Plastic: 300
|
||||
# Gold: 200
|
||||
# Plasma: 150
|
||||
- type: latheRecipe
|
||||
parent: BaseRoboticsRecipe
|
||||
id: ArmSyntheticPry
|
||||
result: ArmSyntheticPry
|
||||
categories:
|
||||
- Android
|
||||
completetime: 5
|
||||
materials:
|
||||
Steel: 750
|
||||
Plastic: 300
|
||||
Gold: 200
|
||||
Plasma: 150
|
||||
|
||||
# - type: latheRecipe
|
||||
# parent: BaseRoboticsRecipe
|
||||
# id: ArmSyntheticDefib
|
||||
# result: LeftArmSyntheticDefib
|
||||
# categories:
|
||||
# - Android
|
||||
# completetime: 5
|
||||
# materials:
|
||||
# Steel: 750
|
||||
# Plastic: 300
|
||||
# Silver: 250
|
||||
- type: latheRecipe
|
||||
parent: BaseRoboticsRecipe
|
||||
id: ArmSyntheticDefib
|
||||
result: ArmSyntheticDefib
|
||||
categories:
|
||||
- Android
|
||||
completetime: 5
|
||||
materials:
|
||||
Steel: 750
|
||||
Plastic: 300
|
||||
Silver: 250
|
||||
|
||||
# - type: latheRecipe
|
||||
# parent: BaseRoboticsRecipe
|
||||
# id: ArmSyntheticProtoKinetic
|
||||
# result: LeftArmSyntheticProtoKinetic
|
||||
# categories:
|
||||
# - Android
|
||||
# completetime: 5
|
||||
# materials:
|
||||
# Steel: 750
|
||||
# Plastic: 300
|
||||
# Silver: 200
|
||||
# Plasma: 150
|
||||
- type: latheRecipe
|
||||
parent: BaseRoboticsRecipe
|
||||
id: ArmSyntheticProtoKinetic
|
||||
result: ArmSyntheticProtoKinetic
|
||||
categories:
|
||||
- Android
|
||||
completetime: 5
|
||||
materials:
|
||||
Steel: 750
|
||||
Plastic: 300
|
||||
Silver: 200
|
||||
Plasma: 150
|
||||
|
||||
# - type: latheRecipe
|
||||
# parent: BaseRoboticsRecipe
|
||||
# id: ArmSyntheticCharger
|
||||
# result: LeftArmSyntheticCharger
|
||||
# categories:
|
||||
# - Android
|
||||
# completetime: 5
|
||||
# materials:
|
||||
# Steel: 750
|
||||
# Plastic: 300
|
||||
# Gold: 200
|
||||
- type: latheRecipe
|
||||
parent: BaseRoboticsRecipe
|
||||
id: ArmSyntheticCharger
|
||||
result: ArmSyntheticCharger
|
||||
categories:
|
||||
- Android
|
||||
completetime: 5
|
||||
materials:
|
||||
Steel: 750
|
||||
Plastic: 300
|
||||
Gold: 200
|
||||
|
||||
# - type: latheRecipe
|
||||
# parent: BaseRoboticsRecipe
|
||||
# id: LegSyntheticMagboots
|
||||
# result: LeftLegSyntheticMagboots
|
||||
# categories:
|
||||
# - Android
|
||||
# completetime: 5
|
||||
# materials:
|
||||
# Steel: 750
|
||||
# Plastic: 300
|
||||
# Gold: 300
|
||||
- type: latheRecipe
|
||||
parent: BaseRoboticsRecipe
|
||||
id: LegSyntheticMagboots
|
||||
result: LegSyntheticMagboots
|
||||
categories:
|
||||
- Android
|
||||
completetime: 5
|
||||
materials:
|
||||
Steel: 750
|
||||
Plastic: 300
|
||||
Gold: 300
|
||||
|
||||
# - type: latheRecipe
|
||||
# parent: BaseRoboticsRecipe
|
||||
# id: LegSyntheticJump
|
||||
# result: LeftLegSyntheticJump
|
||||
# categories:
|
||||
# - Android
|
||||
# completetime: 5
|
||||
# materials:
|
||||
# Steel: 750
|
||||
# Plastic: 300
|
||||
# Gold: 250
|
||||
# Plasma: 150
|
||||
- type: latheRecipe
|
||||
parent: BaseRoboticsRecipe
|
||||
id: LegSyntheticJump
|
||||
result: LegSyntheticJump
|
||||
categories:
|
||||
- Android
|
||||
completetime: 5
|
||||
materials:
|
||||
Steel: 750
|
||||
Plastic: 300
|
||||
Gold: 250
|
||||
Plasma: 150
|
||||
|
||||
- type: latheRecipe
|
||||
parent: BaseRoboticsRecipe
|
||||
|
||||
@@ -99,6 +99,7 @@
|
||||
- AdvancedJetInjector
|
||||
- Hynospray
|
||||
- DefibrillatorCompact
|
||||
- ArmSyntheticDefib
|
||||
|
||||
- type: technology
|
||||
id: ChemicalDispensary
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
- OreBagSuitModule
|
||||
- DrillSuitModule
|
||||
- EngineeringPlating
|
||||
# - ArmSyntheticPry
|
||||
# - LegSyntheticJump
|
||||
- ArmSyntheticPry
|
||||
- LegSyntheticJump
|
||||
|
||||
- type: technology
|
||||
id: Gidravlik
|
||||
|
||||
@@ -69,37 +69,3 @@
|
||||
inhand:
|
||||
- WeaponHellDagger
|
||||
|
||||
- type: startingGear
|
||||
id: BloodCultSpellStunGear
|
||||
inhand:
|
||||
- BloodCultSpellStun
|
||||
|
||||
- type: startingGear
|
||||
id: BloodCultSpellTeleportGear
|
||||
inhand:
|
||||
- BloodCultSpellTeleport
|
||||
|
||||
- type: startingGear
|
||||
id: BloodCultSpellShadowShacklesGear
|
||||
inhand:
|
||||
- BloodCultSpellShadowShackles
|
||||
|
||||
- type: startingGear
|
||||
id: BloodCultSpellTwistedConstructionGear
|
||||
inhand:
|
||||
- BloodCultSpellTwistedConstruction
|
||||
|
||||
- type: startingGear
|
||||
id: BloodCultSpellSummonEquipmentGear
|
||||
inhand:
|
||||
- BloodCultSpellSummonEquipment
|
||||
|
||||
- type: startingGear
|
||||
id: BloodCultSpellBloodRitesGear
|
||||
inhand:
|
||||
- BloodCultSpellBloodRites
|
||||
|
||||
- type: startingGear
|
||||
id: BloodCultSpellBloodBarrageGear
|
||||
inhand:
|
||||
- BloodCultSpellBloodBarrage
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 719 B |
Binary file not shown.
|
After Width: | Height: | Size: 267 B |
Binary file not shown.
|
After Width: | Height: | Size: 218 B |
Binary file not shown.
|
After Width: | Height: | Size: 385 B |
Binary file not shown.
|
After Width: | Height: | Size: 410 B |
@@ -0,0 +1,47 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation , icon-off is og icon modified by MartynDew",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "equipped-EYES",
|
||||
"directions": 4,
|
||||
"delays": [
|
||||
[
|
||||
0.1,
|
||||
0.1
|
||||
],
|
||||
[
|
||||
0.1,
|
||||
0.1
|
||||
],
|
||||
[
|
||||
0.1,
|
||||
0.1
|
||||
],
|
||||
[
|
||||
0.1,
|
||||
0.1
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "icon"
|
||||
},
|
||||
{
|
||||
"name": "icon-off"
|
||||
},
|
||||
{
|
||||
"name": "inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "inhand-right",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -13,19 +13,14 @@ void fragment() {
|
||||
|
||||
highp float grey = dot(color.rgb, vec3(0.299, 0.587, 0.114));
|
||||
|
||||
highp float threshold = grey * luminance_threshold;
|
||||
|
||||
if (grey < threshold) {
|
||||
grey += (threshold - grey) * brightness;
|
||||
grey = min(grey, 1.0);
|
||||
if (grey < luminance_threshold) {
|
||||
grey += (luminance_threshold - grey) * brightness;
|
||||
}
|
||||
|
||||
highp vec3 night_color = mix(color.rgb, tint * grey, 0.8);
|
||||
|
||||
highp float noise = (rand(UV + TIME) - 0.5) * noise_amount * (0.5 - grey * 0.5);
|
||||
night_color += noise;
|
||||
|
||||
night_color *= 0.5;
|
||||
|
||||
|
||||
grey = clamp(grey, 0.0, 1.0);
|
||||
highp vec3 night_color = tint * grey;
|
||||
highp float noise = (rand(UV + TIME) - 0.5) * noise_amount * (1.0 - grey);
|
||||
night_color += vec3(noise);
|
||||
COLOR = vec4(clamp(night_color, 0.0, 1.0), color.a);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user