Implement PDA ID lights (#2397)
* add PDA id light (yaml changes pending) * the rest of the owl * Do it better
This commit is contained in:
@@ -1,16 +1,48 @@
|
|||||||
using Content.Shared.GameObjects.Components.PDA;
|
using Content.Shared.GameObjects.Components.PDA;
|
||||||
|
using JetBrains.Annotations;
|
||||||
using Robust.Client.GameObjects;
|
using Robust.Client.GameObjects;
|
||||||
using Robust.Client.Interfaces.GameObjects.Components;
|
using Robust.Client.Interfaces.GameObjects.Components;
|
||||||
|
using Robust.Shared.Interfaces.GameObjects;
|
||||||
|
using Robust.Shared.Utility;
|
||||||
|
using YamlDotNet.RepresentationModel;
|
||||||
|
|
||||||
namespace Content.Client.GameObjects.Components.PDA
|
namespace Content.Client.GameObjects.Components.PDA
|
||||||
{
|
{
|
||||||
|
[UsedImplicitly]
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
public class PDAVisualizer : AppearanceVisualizer
|
public class PDAVisualizer : AppearanceVisualizer
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The base PDA sprite state, eg. "pda", "pda-clown"
|
||||||
|
/// </summary>
|
||||||
|
private string _state;
|
||||||
|
|
||||||
private enum PDAVisualLayers
|
private enum PDAVisualLayers
|
||||||
{
|
{
|
||||||
Base,
|
Base,
|
||||||
Flashlight
|
Flashlight,
|
||||||
|
IDLight
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void LoadData(YamlMappingNode node)
|
||||||
|
{
|
||||||
|
base.LoadData(node);
|
||||||
|
if (node.TryGetNode("state", out var child))
|
||||||
|
{
|
||||||
|
_state = child.AsString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void InitializeEntity(IEntity entity)
|
||||||
|
{
|
||||||
|
base.InitializeEntity(entity);
|
||||||
|
var sprite = entity.GetComponent<ISpriteComponent>();
|
||||||
|
|
||||||
|
sprite.LayerMapSet(PDAVisualLayers.Base, sprite.AddLayerState(_state));
|
||||||
|
sprite.LayerMapSet(PDAVisualLayers.Flashlight, sprite.AddLayerState("light_overlay"));
|
||||||
|
sprite.LayerSetShader(PDAVisualLayers.Flashlight, "unshaded");
|
||||||
|
sprite.LayerMapSet(PDAVisualLayers.IDLight, sprite.AddLayerState("id_overlay"));
|
||||||
|
sprite.LayerSetShader(PDAVisualLayers.IDLight, "unshaded");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -23,13 +55,15 @@ namespace Content.Client.GameObjects.Components.PDA
|
|||||||
}
|
}
|
||||||
var sprite = component.Owner.GetComponent<ISpriteComponent>();
|
var sprite = component.Owner.GetComponent<ISpriteComponent>();
|
||||||
sprite.LayerSetVisible(PDAVisualLayers.Flashlight, false);
|
sprite.LayerSetVisible(PDAVisualLayers.Flashlight, false);
|
||||||
if(!component.TryGetData<bool>(PDAVisuals.FlashlightLit, out var isScreenLit))
|
if (component.TryGetData(PDAVisuals.FlashlightLit, out bool isScreenLit))
|
||||||
{
|
{
|
||||||
return;
|
|
||||||
}
|
|
||||||
sprite.LayerSetState(PDAVisualLayers.Flashlight, "light_overlay");
|
|
||||||
sprite.LayerSetVisible(PDAVisualLayers.Flashlight, isScreenLit);
|
sprite.LayerSetVisible(PDAVisualLayers.Flashlight, isScreenLit);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (component.TryGetData(PDAVisuals.IDCardInserted, out bool isCardInserted))
|
||||||
|
{
|
||||||
|
sprite.LayerSetVisible(PDAVisualLayers.IDLight, isCardInserted);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -146,6 +146,7 @@ namespace Content.Server.GameObjects.Components.PDA
|
|||||||
if (Owner.TryGetComponent(out AppearanceComponent? appearance))
|
if (Owner.TryGetComponent(out AppearanceComponent? appearance))
|
||||||
{
|
{
|
||||||
appearance.SetData(PDAVisuals.FlashlightLit, _lightOn);
|
appearance.SetData(PDAVisuals.FlashlightLit, _lightOn);
|
||||||
|
appearance.SetData(PDAVisuals.IDCardInserted, !IdSlotEmpty);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -108,6 +108,7 @@ namespace Content.Shared.GameObjects.Components.PDA
|
|||||||
public enum PDAVisuals
|
public enum PDAVisuals
|
||||||
{
|
{
|
||||||
FlashlightLit,
|
FlashlightLit,
|
||||||
|
IDCardInserted
|
||||||
}
|
}
|
||||||
|
|
||||||
[Serializable, NetSerializable]
|
[Serializable, NetSerializable]
|
||||||
|
|||||||
@@ -8,6 +8,13 @@
|
|||||||
- type: Appearance
|
- type: Appearance
|
||||||
visuals:
|
visuals:
|
||||||
- type: PDAVisualizer
|
- type: PDAVisualizer
|
||||||
|
state: pda
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Objects/Devices/pda.rsi
|
||||||
|
netsync: false
|
||||||
|
- type: Icon
|
||||||
|
sprite: Objects/Devices/pda.rsi
|
||||||
|
state: pda
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
QuickEquip: false
|
QuickEquip: false
|
||||||
Slots:
|
Slots:
|
||||||
@@ -29,33 +36,21 @@
|
|||||||
components:
|
components:
|
||||||
- type: PDA
|
- type: PDA
|
||||||
idCard: AssistantIDCard
|
idCard: AssistantIDCard
|
||||||
- type: Sprite
|
|
||||||
sprite: Objects/Devices/pda.rsi
|
|
||||||
netsync: false
|
|
||||||
layers:
|
|
||||||
- state: pda
|
|
||||||
map: ["enum.PDAVisualLayers.Base"]
|
|
||||||
- state: light_overlay
|
|
||||||
shader: unshaded
|
|
||||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: Chef PDA
|
name: Chef PDA
|
||||||
parent: BasePDA
|
parent: BasePDA
|
||||||
id: ChefPDA
|
id: ChefPDA
|
||||||
description: Why isn't it gray?
|
description: Covered in grease and flour.
|
||||||
components:
|
components:
|
||||||
- type: PDA
|
- type: PDA
|
||||||
idCard: ChefIDCard
|
idCard: ChefIDCard
|
||||||
- type: Sprite
|
- type: Appearance
|
||||||
sprite: Objects/Devices/pda.rsi
|
visuals:
|
||||||
netsync: false
|
- type: PDAVisualizer
|
||||||
layers:
|
state: pda-cook
|
||||||
- state: pda-cook
|
- type: Icon
|
||||||
map: ["enum.PDAVisualLayers.Base"]
|
state: pda-cook
|
||||||
- state: light_overlay
|
|
||||||
shader: unshaded
|
|
||||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: Clown PDA
|
name: Clown PDA
|
||||||
@@ -65,15 +60,12 @@
|
|||||||
components:
|
components:
|
||||||
- type: PDA
|
- type: PDA
|
||||||
idCard: ClownIDCard
|
idCard: ClownIDCard
|
||||||
- type: Sprite
|
- type: Appearance
|
||||||
sprite: Objects/Devices/pda.rsi
|
visuals:
|
||||||
netsync: false
|
- type: PDAVisualizer
|
||||||
layers:
|
state: pda-clown
|
||||||
- state: pda-clown
|
- type: Icon
|
||||||
map: ["enum.PDAVisualLayers.Base"]
|
state: pda-clown
|
||||||
- state: light_overlay
|
|
||||||
shader: unshaded
|
|
||||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
|
||||||
- type: Slippery
|
- type: Slippery
|
||||||
paralyzeTime: 4
|
paralyzeTime: 4
|
||||||
- type: Physics
|
- type: Physics
|
||||||
@@ -91,15 +83,28 @@
|
|||||||
components:
|
components:
|
||||||
- type: PDA
|
- type: PDA
|
||||||
idCard: MimeIDCard
|
idCard: MimeIDCard
|
||||||
- type: Sprite
|
- type: Appearance
|
||||||
sprite: Objects/Devices/pda.rsi
|
visuals:
|
||||||
netsync: false
|
- type: PDAVisualizer
|
||||||
layers:
|
state: pda-mime
|
||||||
- state: pda-mime
|
- type: Icon
|
||||||
map: ["enum.PDAVisualLayers.Base"]
|
state: pda-mime
|
||||||
- state: light_overlay
|
|
||||||
shader: unshaded
|
# TODO: uncomment this when the QM job gets added
|
||||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
#- type: entity
|
||||||
|
# name: Quartermaster PDA
|
||||||
|
# parent: BasePDA
|
||||||
|
# id: QuartermasterPDA
|
||||||
|
# description: PDA for the guy that orders the guns.
|
||||||
|
# components:
|
||||||
|
# - type: PDA
|
||||||
|
# idCard: QuartermasterIDCard
|
||||||
|
# - type: Appearance
|
||||||
|
# visuals:
|
||||||
|
# - type: PDAVisualizer
|
||||||
|
# state: pda-qm
|
||||||
|
# - type: Icon
|
||||||
|
# state: pda-qm
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: Cargo PDA
|
name: Cargo PDA
|
||||||
@@ -109,16 +114,12 @@
|
|||||||
components:
|
components:
|
||||||
- type: PDA
|
- type: PDA
|
||||||
idCard: CargoIDCard
|
idCard: CargoIDCard
|
||||||
|
- type: Appearance
|
||||||
- type: Sprite
|
visuals:
|
||||||
sprite: Objects/Devices/pda.rsi
|
- type: PDAVisualizer
|
||||||
netsync: false
|
state: pda-cargo
|
||||||
layers:
|
- type: Icon
|
||||||
- state: pda-cargo
|
state: pda-cargo
|
||||||
map: ["enum.PDAVisualLayers.Base"]
|
|
||||||
- state: light_overlay
|
|
||||||
shader: unshaded
|
|
||||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: Bartender PDA
|
name: Bartender PDA
|
||||||
@@ -128,16 +129,12 @@
|
|||||||
components:
|
components:
|
||||||
- type: PDA
|
- type: PDA
|
||||||
idCard: BartenderIDCard
|
idCard: BartenderIDCard
|
||||||
|
- type: Appearance
|
||||||
- type: Sprite
|
visuals:
|
||||||
sprite: Objects/Devices/pda.rsi
|
- type: PDAVisualizer
|
||||||
netsync: false
|
state: pda-bartender
|
||||||
layers:
|
- type: Icon
|
||||||
- state: pda-bartender
|
state: pda-bartender
|
||||||
map: ["enum.PDAVisualLayers.Base"]
|
|
||||||
- state: light_overlay
|
|
||||||
shader: unshaded
|
|
||||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
|
||||||
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -148,195 +145,180 @@
|
|||||||
components:
|
components:
|
||||||
- type: PDA
|
- type: PDA
|
||||||
idCard: JanitorIDCard
|
idCard: JanitorIDCard
|
||||||
|
- type: Appearance
|
||||||
- type: Sprite
|
visuals:
|
||||||
sprite: Objects/Devices/pda.rsi
|
- type: PDAVisualizer
|
||||||
netsync: false
|
state: pda-janitor
|
||||||
layers:
|
- type: Icon
|
||||||
- state: pda-janitor
|
state: pda-janitor
|
||||||
map: ["enum.PDAVisualLayers.Base"]
|
|
||||||
- state: light_overlay
|
|
||||||
shader: unshaded
|
|
||||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: Captain PDA
|
name: Captain PDA
|
||||||
parent: BasePDA
|
parent: BasePDA
|
||||||
id: CaptainPDA
|
id: CaptainPDA
|
||||||
description: Surprisingly no different than your PDA.
|
description: Surprisingly no different from your PDA.
|
||||||
components:
|
components:
|
||||||
- type: PDA
|
- type: PDA
|
||||||
idCard: CaptainIDCard
|
idCard: CaptainIDCard
|
||||||
|
- type: Appearance
|
||||||
|
visuals:
|
||||||
|
- type: PDAVisualizer
|
||||||
|
state: pda-captain
|
||||||
|
- type: Icon
|
||||||
|
state: pda-captain
|
||||||
|
|
||||||
- type: Sprite
|
|
||||||
sprite: Objects/Devices/pda.rsi
|
|
||||||
netsync: false
|
|
||||||
layers:
|
|
||||||
- state: pda-captain
|
|
||||||
map: ["enum.PDAVisualLayers.Base"]
|
|
||||||
- state: light_overlay
|
|
||||||
shader: unshaded
|
|
||||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: HoP PDA
|
name: Head of Personnel PDA
|
||||||
parent: BasePDA
|
parent: BasePDA
|
||||||
id: HoPPDA
|
id: HoPPDA
|
||||||
|
description: Looks like it's been chewed on.
|
||||||
components:
|
components:
|
||||||
- type: PDA
|
- type: PDA
|
||||||
idCard: HoPIDCard
|
idCard: HoPIDCard
|
||||||
|
- type: Appearance
|
||||||
|
visuals:
|
||||||
|
- type: PDAVisualizer
|
||||||
|
state: pda-hop
|
||||||
|
- type: Icon
|
||||||
|
state: pda-hop
|
||||||
|
|
||||||
- type: Sprite
|
|
||||||
sprite: Objects/Devices/pda.rsi
|
|
||||||
netsync: false
|
|
||||||
layers:
|
|
||||||
- state: pda-hop
|
|
||||||
map: ["enum.PDAVisualLayers.Base"]
|
|
||||||
- state: light_overlay
|
|
||||||
shader: unshaded
|
|
||||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: CE PDA
|
name: Chief Engineer PDA
|
||||||
parent: BasePDA
|
parent: BasePDA
|
||||||
id: CEPDA
|
id: CEPDA
|
||||||
|
description: Looks like it's barely been used.
|
||||||
components:
|
components:
|
||||||
- type: PDA
|
- type: PDA
|
||||||
idCard: CEIDCard
|
idCard: CEIDCard
|
||||||
|
- type: Appearance
|
||||||
- type: Sprite
|
visuals:
|
||||||
sprite: Objects/Devices/pda.rsi
|
- type: PDAVisualizer
|
||||||
netsync: false
|
state: pda-ce
|
||||||
layers:
|
- type: Icon
|
||||||
- state: pda-ce
|
state: pda-ce
|
||||||
map: ["enum.PDAVisualLayers.Base"]
|
|
||||||
- state: light_overlay
|
|
||||||
shader: unshaded
|
|
||||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
|
||||||
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: Engineer PDA
|
name: Engineer PDA
|
||||||
parent: BasePDA
|
parent: BasePDA
|
||||||
id: EngineerPDA
|
id: EngineerPDA
|
||||||
|
description: Rugged and well-worn.
|
||||||
components:
|
components:
|
||||||
- type: PDA
|
- type: PDA
|
||||||
idCard: EngineeringIDCard
|
idCard: EngineeringIDCard
|
||||||
|
- type: Appearance
|
||||||
|
visuals:
|
||||||
|
- type: PDAVisualizer
|
||||||
|
state: pda-engineer
|
||||||
|
- type: Icon
|
||||||
|
state: pda-engineer
|
||||||
|
|
||||||
- type: Sprite
|
|
||||||
sprite: Objects/Devices/pda.rsi
|
|
||||||
netsync: false
|
|
||||||
layers:
|
|
||||||
- state: pda-engineer
|
|
||||||
map: ["enum.PDAVisualLayers.Base"]
|
|
||||||
- state: light_overlay
|
|
||||||
shader: unshaded
|
|
||||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: CMO PDA
|
name: Chief Medical Officer PDA
|
||||||
parent: BasePDA
|
parent: BasePDA
|
||||||
id: CMOPDA
|
id: CMOPDA
|
||||||
|
description: Extraordinarily shiny and sterile.
|
||||||
components:
|
components:
|
||||||
- type: PDA
|
- type: PDA
|
||||||
idCard: CMOIDCard
|
idCard: CMOIDCard
|
||||||
|
- type: Appearance
|
||||||
|
visuals:
|
||||||
|
- type: PDAVisualizer
|
||||||
|
state: pda-cmo
|
||||||
|
- type: Icon
|
||||||
|
state: pda-cmo
|
||||||
|
|
||||||
- type: Sprite
|
|
||||||
sprite: Objects/Devices/pda.rsi
|
|
||||||
netsync: false
|
|
||||||
layers:
|
|
||||||
- state: pda-cmo
|
|
||||||
map: ["enum.PDAVisualLayers.Base"]
|
|
||||||
- state: light_overlay
|
|
||||||
shader: unshaded
|
|
||||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: Medical PDA
|
name: Medical PDA
|
||||||
parent: BasePDA
|
parent: BasePDA
|
||||||
id: MedicalPDA
|
id: MedicalPDA
|
||||||
|
description: Shiny and sterile.
|
||||||
components:
|
components:
|
||||||
- type: PDA
|
- type: PDA
|
||||||
idCard: MedicalIDCard
|
idCard: MedicalIDCard
|
||||||
|
- type: Appearance
|
||||||
- type: Sprite
|
visuals:
|
||||||
sprite: Objects/Devices/pda.rsi
|
- type: PDAVisualizer
|
||||||
netsync: false
|
state: pda-medical
|
||||||
layers:
|
- type: Icon
|
||||||
- state: pda-medical
|
state: pda-medical
|
||||||
map: ["enum.PDAVisualLayers.Base"]
|
|
||||||
- state: light_overlay
|
|
||||||
shader: unshaded
|
|
||||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: RnD PDA
|
name: Research Director PDA
|
||||||
parent: BasePDA
|
parent: BasePDA
|
||||||
id: RnDPDA
|
id: RnDPDA
|
||||||
|
description: It appears surprisingly ordinary.
|
||||||
components:
|
components:
|
||||||
- type: PDA
|
- type: PDA
|
||||||
idCard: RDIDCard
|
idCard: RDIDCard
|
||||||
|
- type: Appearance
|
||||||
- type: Sprite
|
visuals:
|
||||||
sprite: Objects/Devices/pda.rsi
|
- type: PDAVisualizer
|
||||||
netsync: false
|
state: pda-rd
|
||||||
layers:
|
- type: Icon
|
||||||
- state: pda-rd
|
state: pda-rd
|
||||||
map: ["enum.PDAVisualLayers.Base"]
|
|
||||||
- state: light_overlay
|
|
||||||
shader: unshaded
|
|
||||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: Science PDA
|
name: Science PDA
|
||||||
parent: BasePDA
|
parent: BasePDA
|
||||||
id: SciencePDA
|
id: SciencePDA
|
||||||
|
description:
|
||||||
components:
|
components:
|
||||||
- type: PDA
|
- type: PDA
|
||||||
idCard: ResearchIDCard
|
idCard: ResearchIDCard
|
||||||
|
- type: Appearance
|
||||||
- type: Sprite
|
visuals:
|
||||||
sprite: Objects/Devices/pda.rsi
|
- type: PDAVisualizer
|
||||||
netsync: false
|
state: pda-science
|
||||||
layers:
|
- type: Icon
|
||||||
- state: pda-rd
|
state: pda-science
|
||||||
map: ["enum.PDAVisualLayers.Base"]
|
|
||||||
- state: light_overlay
|
|
||||||
shader: unshaded
|
|
||||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: HoS PDA
|
name: Head of Security PDA
|
||||||
parent: BasePDA
|
parent: BasePDA
|
||||||
id: HoSPDA
|
id: HoSPDA
|
||||||
|
description: Whosoever bears this PDA is the law.
|
||||||
components:
|
components:
|
||||||
- type: PDA
|
- type: PDA
|
||||||
idCard: HoSIDCard
|
idCard: HoSIDCard
|
||||||
|
- type: Appearance
|
||||||
|
visuals:
|
||||||
|
- type: PDAVisualizer
|
||||||
|
state: pda-hos
|
||||||
|
- type: Icon
|
||||||
|
state: pda-hos
|
||||||
|
|
||||||
- type: Sprite
|
# TODO: Uncomment this when the Warden job gets added
|
||||||
sprite: Objects/Devices/pda.rsi
|
#- type: entity
|
||||||
netsync: false
|
# name: Warden PDA
|
||||||
layers:
|
# parent: BasePDA
|
||||||
- state: pda-hos
|
# id: WardenPDA
|
||||||
map: ["enum.PDAVisualLayers.Base"]
|
# description: The OS appears to have been jailbroken.
|
||||||
- state: light_overlay
|
# components:
|
||||||
shader: unshaded
|
# - type: PDA
|
||||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
# idCard: WardenIDCard
|
||||||
|
# - type: Appearance
|
||||||
|
# visuals:
|
||||||
|
# - type: PDAVisualizer
|
||||||
|
# state: pda-warden
|
||||||
|
# - type: Icon
|
||||||
|
# state: pda-warden
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: Security PDA
|
name: Security PDA
|
||||||
parent: BasePDA
|
parent: BasePDA
|
||||||
id: SecurityPDA
|
id: SecurityPDA
|
||||||
|
description: Red to hide the stains of assistant blood.
|
||||||
components:
|
components:
|
||||||
- type: PDA
|
- type: PDA
|
||||||
idCard: SecurityIDCard
|
idCard: SecurityIDCard
|
||||||
|
- type: Appearance
|
||||||
- type: Sprite
|
visuals:
|
||||||
sprite: Objects/Devices/pda.rsi
|
- type: PDAVisualizer
|
||||||
netsync: false
|
state: pda-security
|
||||||
layers:
|
- type: Icon
|
||||||
- state: pda-security
|
state: pda-security
|
||||||
map: ["enum.PDAVisualLayers.Base"]
|
|
||||||
- state: light_overlay
|
|
||||||
shader: unshaded
|
|
||||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
|
||||||
|
|||||||
Reference in New Issue
Block a user