diff --git a/Content.Client/Clothing/Systems/ChameleonClothingSystem.cs b/Content.Client/Clothing/Systems/ChameleonClothingSystem.cs index 0ea9bbac09..330c0dfd44 100644 --- a/Content.Client/Clothing/Systems/ChameleonClothingSystem.cs +++ b/Content.Client/Clothing/Systems/ChameleonClothingSystem.cs @@ -1,4 +1,5 @@ using System.Linq; +using Content.Client.PDA; using Content.Shared.Clothing.Components; using Content.Shared.Clothing.EntitySystems; using Content.Shared.Inventory; @@ -51,6 +52,15 @@ public sealed class ChameleonClothingSystem : SharedChameleonClothingSystem { sprite.CopyFrom(otherSprite); } + + // Edgecase for PDAs to include visuals when UI is open + if (TryComp(uid, out PdaBorderColorComponent? borderColor) + && proto.TryGetComponent(out PdaBorderColorComponent? otherBorderColor, _factory)) + { + borderColor.BorderColor = otherBorderColor.BorderColor; + borderColor.AccentHColor = otherBorderColor.AccentHColor; + borderColor.AccentVColor = otherBorderColor.AccentVColor; + } } /// diff --git a/Content.Client/Clothing/UI/ChameleonBoundUserInterface.cs b/Content.Client/Clothing/UI/ChameleonBoundUserInterface.cs index 83f6ba1566..6fafd45a5a 100644 --- a/Content.Client/Clothing/UI/ChameleonBoundUserInterface.cs +++ b/Content.Client/Clothing/UI/ChameleonBoundUserInterface.cs @@ -1,15 +1,21 @@ -using Content.Client.Clothing.Systems; +using Content.Client.Clothing.Systems; using Content.Shared.Clothing.Components; +using Content.Shared.Tag; +using Content.Shared.Prototypes; using JetBrains.Annotations; using Robust.Client.GameObjects; using Robust.Client.UserInterface; +using Robust.Shared.Prototypes; namespace Content.Client.Clothing.UI; [UsedImplicitly] public sealed class ChameleonBoundUserInterface : BoundUserInterface { + [Dependency] private readonly IComponentFactory _factory = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; private readonly ChameleonClothingSystem _chameleon; + private readonly TagSystem _tag; [ViewVariables] private ChameleonMenu? _menu; @@ -17,6 +23,7 @@ public sealed class ChameleonBoundUserInterface : BoundUserInterface public ChameleonBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) { _chameleon = EntMan.System(); + _tag = EntMan.System(); } protected override void Open() @@ -34,7 +41,24 @@ public sealed class ChameleonBoundUserInterface : BoundUserInterface return; var targets = _chameleon.GetValidTargets(st.Slot); - _menu?.UpdateState(targets, st.SelectedId); + if (st.RequiredTag != null) + { + var newTargets = new List(); + foreach (var target in targets) + { + if (string.IsNullOrEmpty(target) || !_proto.TryIndex(target, out EntityPrototype? proto)) + continue; + + if (!proto.TryGetComponent(out TagComponent? tag, _factory) || !_tag.HasTag(tag, st.RequiredTag)) + continue; + + newTargets.Add(target); + } + _menu?.UpdateState(newTargets, st.SelectedId); + } else + { + _menu?.UpdateState(targets, st.SelectedId); + } } private void OnIdSelected(string selectedId) diff --git a/Content.Client/PDA/PdaMenu.xaml.cs b/Content.Client/PDA/PdaMenu.xaml.cs index 630861d084..712e0cbb01 100644 --- a/Content.Client/PDA/PdaMenu.xaml.cs +++ b/Content.Client/PDA/PdaMenu.xaml.cs @@ -141,6 +141,11 @@ namespace Content.Client.PDA _pdaOwner = state.PdaOwnerInfo.ActualOwnerName; PdaOwnerLabel.SetMarkup(Loc.GetString("comp-pda-ui-owner", ("actualOwnerName", _pdaOwner))); + PdaOwnerLabel.Visible = true; + } + else + { + PdaOwnerLabel.Visible = false; } diff --git a/Content.Client/PDA/PdaSystem.cs b/Content.Client/PDA/PdaSystem.cs index 00a12ae2e6..a5fedce579 100644 --- a/Content.Client/PDA/PdaSystem.cs +++ b/Content.Client/PDA/PdaSystem.cs @@ -1,48 +1,8 @@ using Content.Shared.PDA; -using Content.Shared.Light; -using Robust.Client.GameObjects; namespace Content.Client.PDA; public sealed class PdaSystem : SharedPdaSystem { - public override void Initialize() - { - base.Initialize(); - SubscribeLocalEvent(OnAppearanceChange); - } - - private void OnAppearanceChange(EntityUid uid, PdaComponent component, ref AppearanceChangeEvent args) - { - if (args.Sprite == null) - return; - - if (Appearance.TryGetData(uid, UnpoweredFlashlightVisuals.LightOn, out var isFlashlightOn, args.Component)) - args.Sprite.LayerSetVisible(PdaVisualLayers.Flashlight, isFlashlightOn); - - if (Appearance.TryGetData(uid, PdaVisuals.IdCardInserted, out var isCardInserted, args.Component)) - args.Sprite.LayerSetVisible(PdaVisualLayers.IdLight, isCardInserted); - } - - protected override void OnComponentInit(EntityUid uid, PdaComponent component, ComponentInit args) - { - base.OnComponentInit(uid, component, args); - - if (!TryComp(uid, out var sprite)) - return; - - if (component.State != null) - sprite.LayerSetState(PdaVisualLayers.Base, component.State); - - sprite.LayerSetVisible(PdaVisualLayers.Flashlight, component.FlashlightOn); - sprite.LayerSetVisible(PdaVisualLayers.IdLight, component.IdSlot.StartingItem != null); - } - - public enum PdaVisualLayers : byte - { - Base, - Flashlight, - IdLight - } } diff --git a/Content.Client/PDA/PdaVisualizerSystem.cs b/Content.Client/PDA/PdaVisualizerSystem.cs new file mode 100644 index 0000000000..735fcd42eb --- /dev/null +++ b/Content.Client/PDA/PdaVisualizerSystem.cs @@ -0,0 +1,30 @@ +using Content.Shared.Light; +using Content.Shared.PDA; +using Robust.Client.GameObjects; + +namespace Content.Client.PDA; + +public sealed class PdaVisualizerSystem : VisualizerSystem +{ + protected override void OnAppearanceChange(EntityUid uid, PdaVisualsComponent comp, ref AppearanceChangeEvent args) + { + if (args.Sprite == null) + return; + + if (AppearanceSystem.TryGetData(uid, PdaVisuals.PdaType, out var pdaType, args.Component)) + args.Sprite.LayerSetState(PdaVisualLayers.Base, pdaType); + + if (AppearanceSystem.TryGetData(uid, UnpoweredFlashlightVisuals.LightOn, out var isFlashlightOn, args.Component)) + args.Sprite.LayerSetVisible(PdaVisualLayers.Flashlight, isFlashlightOn); + + if (AppearanceSystem.TryGetData(uid, PdaVisuals.IdCardInserted, out var isCardInserted, args.Component)) + args.Sprite.LayerSetVisible(PdaVisualLayers.IdLight, isCardInserted); + } + + public enum PdaVisualLayers : byte + { + Base, + Flashlight, + IdLight + } +} diff --git a/Content.Client/PDA/PdaVisualsComponent.cs b/Content.Client/PDA/PdaVisualsComponent.cs new file mode 100644 index 0000000000..893ce5503d --- /dev/null +++ b/Content.Client/PDA/PdaVisualsComponent.cs @@ -0,0 +1,14 @@ +namespace Content.Client.PDA; + +/// +/// Used for visualizing PDA visuals. +/// +[RegisterComponent] +public sealed partial class PdaVisualsComponent : Component +{ + public string? BorderColor; + + public string? AccentHColor; + + public string? AccentVColor; +} diff --git a/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs b/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs index feb3428884..3700aeb549 100644 --- a/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs +++ b/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs @@ -1,4 +1,4 @@ -using Content.Server.IdentityManagement; +using Content.Server.IdentityManagement; using Content.Shared.Clothing.Components; using Content.Shared.Clothing.EntitySystems; using Content.Shared.IdentityManagement.Components; @@ -63,7 +63,7 @@ public sealed class ChameleonClothingSystem : SharedChameleonClothingSystem if (!Resolve(uid, ref component)) return; - var state = new ChameleonBoundUserInterfaceState(component.Slot, component.Default); + var state = new ChameleonBoundUserInterfaceState(component.Slot, component.Default, component.RequireTag); _uiSystem.SetUiState(uid, ChameleonUiKey.Key, state); } @@ -84,7 +84,7 @@ public sealed class ChameleonClothingSystem : SharedChameleonClothingSystem // make sure that it is valid change if (string.IsNullOrEmpty(protoId) || !_proto.TryIndex(protoId, out EntityPrototype? proto)) return; - if (!IsValidTarget(proto, component.Slot)) + if (!IsValidTarget(proto, component.Slot, component.RequireTag)) return; component.Default = protoId; diff --git a/Content.Server/PDA/PdaSystem.cs b/Content.Server/PDA/PdaSystem.cs index 7f17b97d0a..a9527020b0 100644 --- a/Content.Server/PDA/PdaSystem.cs +++ b/Content.Server/PDA/PdaSystem.cs @@ -1,3 +1,4 @@ +using Content.Server.Access.Systems; using Content.Server.AlertLevel; using Content.Server.CartridgeLoader; using Content.Server.Chat.Managers; @@ -36,6 +37,7 @@ namespace Content.Server.PDA [Dependency] private readonly UserInterfaceSystem _ui = default!; [Dependency] private readonly UnpoweredFlashlightSystem _unpoweredFlashlight = default!; [Dependency] private readonly ContainerSystem _containerSystem = default!; + [Dependency] private readonly IdCardSystem _idCard = default!; public override void Initialize() { @@ -55,19 +57,25 @@ namespace Content.Server.PDA SubscribeLocalEvent(OnNotification); SubscribeLocalEvent(OnStationRenamed); - SubscribeLocalEvent(OnEntityRenamed); + SubscribeLocalEvent(OnEntityRenamed, after: new[] { typeof(IdCardSystem) }); SubscribeLocalEvent(OnAlertLevelChanged); } private void OnEntityRenamed(ref EntityRenamedEvent ev) { - var query = EntityQueryEnumerator(); + if (HasComp(ev.Uid)) + return; - while (query.MoveNext(out var uid, out var comp)) + if (_idCard.TryFindIdCard(ev.Uid, out var idCard)) { - if (comp.PdaOwner == ev.Uid) + var query = EntityQueryEnumerator(); + + while (query.MoveNext(out var uid, out var comp)) { - SetOwner(uid, comp, ev.Uid, ev.NewName); + if (comp.ContainedId == idCard) + { + SetOwner(uid, comp, ev.Uid, ev.NewName); + } } } } @@ -86,6 +94,9 @@ namespace Content.Server.PDA protected override void OnItemInserted(EntityUid uid, PdaComponent pda, EntInsertedIntoContainerMessage args) { base.OnItemInserted(uid, pda, args); + var id = CompOrNull(pda.ContainedId); + if (id != null) + pda.OwnerName = id.FullName; UpdatePdaUi(uid, pda); } diff --git a/Content.Shared/Clothing/Components/ChameleonClothingComponent.cs b/Content.Shared/Clothing/Components/ChameleonClothingComponent.cs index def4254304..8fa2f19fa2 100644 --- a/Content.Shared/Clothing/Components/ChameleonClothingComponent.cs +++ b/Content.Shared/Clothing/Components/ChameleonClothingComponent.cs @@ -32,6 +32,12 @@ public sealed partial class ChameleonClothingComponent : Component /// [ViewVariables] public EntityUid? User; + + /// + /// Filter possible chameleon options by a tag in addition to WhitelistChameleon. + /// + [DataField] + public string? RequireTag; } [Serializable, NetSerializable] @@ -39,11 +45,13 @@ public sealed class ChameleonBoundUserInterfaceState : BoundUserInterfaceState { public readonly SlotFlags Slot; public readonly string? SelectedId; + public readonly string? RequiredTag; - public ChameleonBoundUserInterfaceState(SlotFlags slot, string? selectedId) + public ChameleonBoundUserInterfaceState(SlotFlags slot, string? selectedId, string? requiredTag) { Slot = slot; SelectedId = selectedId; + RequiredTag = requiredTag; } } diff --git a/Content.Shared/Clothing/EntitySystems/SharedChameleonClothingSystem.cs b/Content.Shared/Clothing/EntitySystems/SharedChameleonClothingSystem.cs index 2b10b41fee..488b7a5b64 100644 --- a/Content.Shared/Clothing/EntitySystems/SharedChameleonClothingSystem.cs +++ b/Content.Shared/Clothing/EntitySystems/SharedChameleonClothingSystem.cs @@ -6,6 +6,7 @@ using Content.Shared.Inventory.Events; using Content.Shared.Item; using Content.Shared.Tag; using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.Manager; namespace Content.Shared.Clothing.EntitySystems; @@ -13,10 +14,12 @@ public abstract class SharedChameleonClothingSystem : EntitySystem { [Dependency] private readonly IComponentFactory _factory = default!; [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly ISerializationManager _serialization = default!; [Dependency] private readonly ClothingSystem _clothingSystem = default!; [Dependency] private readonly ContrabandSystem _contraband = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly SharedItemSystem _itemSystem = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly TagSystem _tag = default!; public override void Initialize() @@ -71,6 +74,14 @@ public abstract class SharedChameleonClothingSystem : EntitySystem _clothingSystem.CopyVisuals(uid, otherClothing, clothing); } + // appearance data logic + if (TryComp(uid, out AppearanceComponent? appearance) && + proto.TryGetComponent("Appearance", out AppearanceComponent? appearanceOther)) + { + _appearance.AppendData(appearanceOther, uid); + Dirty(uid, appearance); + } + // properly mark contraband if (proto.TryGetComponent("Contraband", out ContrabandComponent? contra)) { @@ -88,7 +99,7 @@ public abstract class SharedChameleonClothingSystem : EntitySystem /// /// Check if this entity prototype is valid target for chameleon item. /// - public bool IsValidTarget(EntityPrototype proto, SlotFlags chameleonSlot = SlotFlags.NONE) + public bool IsValidTarget(EntityPrototype proto, SlotFlags chameleonSlot = SlotFlags.NONE, string? requiredTag = null) { // check if entity is valid if (proto.Abstract || proto.HideSpawnMenu) @@ -98,6 +109,9 @@ public abstract class SharedChameleonClothingSystem : EntitySystem if (!proto.TryGetComponent(out TagComponent? tag, _factory) || !_tag.HasTag(tag, "WhitelistChameleon")) return false; + if (requiredTag != null && !_tag.HasTag(tag, requiredTag)) + return false; + // check if it's valid clothing if (!proto.TryGetComponent("Clothing", out ClothingComponent? clothing)) return false; diff --git a/Content.Shared/PDA/PdaComponent.cs b/Content.Shared/PDA/PdaComponent.cs index 6aeb245e27..cdfeffa2c1 100644 --- a/Content.Shared/PDA/PdaComponent.cs +++ b/Content.Shared/PDA/PdaComponent.cs @@ -13,12 +13,6 @@ namespace Content.Shared.PDA public const string PdaPenSlotId = "PDA-pen"; public const string PdaPaiSlotId = "PDA-pai"; - /// - /// The base PDA sprite state, eg. "pda", "pda-clown" - /// - [DataField("state")] - public string? State; - [DataField("idSlot")] public ItemSlot IdSlot = new(); diff --git a/Content.Shared/PDA/PdaVisuals.cs b/Content.Shared/PDA/PdaVisuals.cs index 56039cf0d2..e3daa8e575 100644 --- a/Content.Shared/PDA/PdaVisuals.cs +++ b/Content.Shared/PDA/PdaVisuals.cs @@ -5,7 +5,8 @@ namespace Content.Shared.PDA [Serializable, NetSerializable] public enum PdaVisuals { - IdCardInserted + IdCardInserted, + PdaType } [Serializable, NetSerializable] diff --git a/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml b/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml index bdbcbc53d0..43d86d5c87 100644 --- a/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml +++ b/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml @@ -201,6 +201,7 @@ components: - type: StorageFill contents: + - id: ChameleonPDA - id: ClothingUniformJumpsuitChameleon - id: ClothingOuterChameleon - id: ClothingNeckChameleon diff --git a/Resources/Prototypes/Catalog/thief_toolbox_sets.yml b/Resources/Prototypes/Catalog/thief_toolbox_sets.yml index a7532ce401..8e357e56db 100644 --- a/Resources/Prototypes/Catalog/thief_toolbox_sets.yml +++ b/Resources/Prototypes/Catalog/thief_toolbox_sets.yml @@ -6,6 +6,7 @@ sprite: /Textures/Clothing/OuterClothing/Misc/black_hoodie.rsi state: icon content: + - ChameleonPDA - ClothingUniformJumpsuitChameleon - ClothingOuterChameleon - ClothingNeckChameleon diff --git a/Resources/Prototypes/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/Entities/Objects/Devices/pda.yml index fb38b09df6..3c41180161 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pda.yml @@ -6,12 +6,17 @@ description: Personal Data Assistant. components: - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda - type: Sprite sprite: _DV/Objects/Devices/pda.rsi # DeltaV aPDA Resprite File Path scale: 0.75, 0.75 # DeltaV aPDA Resprite PDA Size change, makes it smaller for the full detail. Scale: 0.75, 0.75 # DeltaV aPDA Resprite PDA Size change, makes it smaller for the full detail. layers: - map: [ "enum.PdaVisualLayers.Base" ] + state: "pda" - state: "light_overlay" map: [ "enum.PdaVisualLayers.Flashlight" ] shader: "unshaded" @@ -26,7 +31,6 @@ Scale: 0.75, 0.75 # DeltaV aPDA Resprite PDA Size change, makes it smaller for the full detail. state: pda - type: Pda - state: pda paiSlot: priority: -2 whitelist: @@ -45,6 +49,7 @@ whitelist: components: - IdCard + - type: PdaVisuals - type: Item size: Small - type: ContainerContainer @@ -107,6 +112,8 @@ - type: Tag tags: - DoorBumpOpener + - WhitelistChameleon + - WhitelistChameleonPDA - type: Input context: "human" - type: SentienceTarget # sentient PDA = pAI lite @@ -155,7 +162,6 @@ components: - type: Pda id: PassengerIDCard - state: pda - type: PdaBorderColor borderColor: "#717059" @@ -167,7 +173,11 @@ components: - type: Pda id: TechnicalAssistantIDCard - state: pda-interntech + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-interntech - type: PdaBorderColor borderColor: "#717059" accentVColor: "#949137" @@ -182,7 +192,11 @@ components: - type: Pda id: MedicalInternIDCard - state: pda-internmed + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-internmed - type: PdaBorderColor borderColor: "#717059" accentVColor: "#447987" @@ -200,7 +214,11 @@ components: - type: Pda id: SecurityCadetIDCard - state: pda-interncadet + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-interncadet - type: PdaBorderColor borderColor: "#717059" accentVColor: "#A32D26" @@ -215,7 +233,11 @@ components: - type: Pda id: ResearchAssistantIDCard - state: pda-internsci + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-internsci - type: PdaBorderColor borderColor: "#717059" accentVColor: "#8900c9" @@ -230,7 +252,11 @@ components: - type: Pda id: ServiceWorkerIDCard - state: pda-internservice + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-internservice - type: PdaBorderColor borderColor: "#717059" accentVColor: "#00cc35" @@ -245,7 +271,11 @@ components: - type: Pda id: ChefIDCard - state: pda-cook + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-cook - type: PdaBorderColor borderColor: "#d7d7d0" - type: Icon @@ -261,7 +291,11 @@ components: - type: Pda id: BotanistIDCard - state: pda-hydro + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-hydro - type: PdaBorderColor borderColor: "#44843c" accentVColor: "#00cc35" @@ -276,7 +310,6 @@ components: - type: Pda id: ClownIDCard - state: pda-clown penSlot: startingItem: CrayonOrange # no pink crayon?!? # ^ Still unacceptable. @@ -286,6 +319,11 @@ whitelist: tags: - Write + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-clown - type: PdaBorderColor borderColor: "#C18199" - type: Icon @@ -320,7 +358,9 @@ components: - type: Pda id: VisitorIDCard - state: pda-clown + - type: Tag # Ignore Chameleon tags + tags: + - DoorBumpOpener - type: entity parent: BasePDA @@ -330,12 +370,16 @@ components: - type: Pda id: MimeIDCard - state: pda-mime idSlot: # rewrite without sound because mime name: ID Card whitelist: components: - IdCard + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-mime - type: PdaBorderColor borderColor: "#d7d7d0" accentHColor: "#333333" @@ -363,7 +407,11 @@ visible: false - type: Pda id: ChaplainIDCard - state: pda-chaplain + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-chaplain - type: PdaBorderColor borderColor: "#333333" accentVColor: "#8900c9" # DeltaV - Give Chaplain PDA Epistemics colors @@ -378,7 +426,9 @@ components: - type: Pda id: VisitorIDCard - state: pda-chaplain + - type: Tag # Ignore Chameleon tags + tags: + - DoorBumpOpener - type: entity name: logistics officer PDA # DeltaV - Logistics Department replacing Cargo @@ -388,7 +438,11 @@ components: - type: Pda id: QuartermasterIDCard - state: pda-qm + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-qm - type: PdaBorderColor borderColor: "#e39751" accentVColor: "#a23e3e" @@ -411,7 +465,11 @@ components: - type: Pda id: CargoIDCard - state: pda-cargo + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-cargo - type: PdaBorderColor borderColor: "#e39751" - type: Icon @@ -432,7 +490,11 @@ components: - type: Pda id: SalvageIDCard - state: pda-miner + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-miner - type: PdaBorderColor borderColor: "#af9366" accentVColor: "#8900c9" @@ -455,7 +517,11 @@ components: - type: Pda id: BartenderIDCard - state: pda-bartender + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-bartender - type: PdaBorderColor borderColor: "#333333" - type: Icon @@ -469,13 +535,17 @@ components: - type: Pda id: LibrarianIDCard - state: pda-library penSlot: startingItem: LuxuryPen priority: -1 whitelist: tags: - Write + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-library - type: PdaBorderColor borderColor: "#858585" - type: Icon @@ -488,7 +558,9 @@ components: - type: Pda id: VisitorIDCard - state: pda-library + - type: Tag # Ignore Chameleon tags + tags: + - DoorBumpOpener - type: entity parent: BaseJusticePDA # DeltaV - Added secwatch to justice. Was BaseSecurityPDA. @@ -498,7 +570,6 @@ components: - type: Pda id: LawyerIDCard - state: pda-lawyer # DeltaV - Moved to BaseJusticePDA # penSlot: # startingItem: LuxuryPen @@ -506,6 +577,11 @@ # whitelist: # tags: # - Write + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-lawyer - type: PdaBorderColor borderColor: "#6f6192" - type: Icon @@ -518,7 +594,9 @@ components: - type: Pda id: VisitorIDCard - state: pda-lawyer + - type: Tag # Ignore Chameleon tags + tags: + - DoorBumpOpener - type: entity parent: BasePDA @@ -528,7 +606,11 @@ components: - type: Pda id: JanitorIDCard - state: pda-janitor + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-janitor - type: PdaBorderColor borderColor: "#5D2D56" - type: Icon @@ -542,13 +624,17 @@ components: - type: Pda id: CaptainIDCard - state: pda-captain penSlot: startingItem: PenCap priority: -1 whitelist: tags: - Write + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-captain - type: PdaBorderColor borderColor: "#7C5D00" - type: Icon @@ -562,13 +648,17 @@ components: - type: Pda id: HoPIDCard - state: pda-hop penSlot: startingItem: PenHop priority: -1 whitelist: tags: - Write + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-hop - type: PdaBorderColor borderColor: "#789876" accentHColor: "#447987" @@ -583,7 +673,11 @@ components: - type: Pda id: CEIDCard - state: pda-ce + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-ce - type: PdaBorderColor borderColor: "#949137" accentHColor: "#447987" @@ -598,7 +692,11 @@ components: - type: Pda id: EngineeringIDCard - state: pda-engineer + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-engineer - type: PdaBorderColor borderColor: "#949137" accentVColor: "#A32D26" @@ -613,7 +711,11 @@ components: - type: Pda id: CMOIDCard - state: pda-cmo + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-cmo - type: PdaBorderColor borderColor: "#d7d7d0" accentHColor: "#447987" @@ -629,7 +731,11 @@ components: - type: Pda id: MedicalIDCard - state: pda-medical + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-medical - type: PdaBorderColor borderColor: "#d7d7d0" accentVColor: "#447987" @@ -646,7 +752,9 @@ components: - type: Pda id: VisitorIDCard - state: pda-medical + - type: Tag # Ignore Chameleon tags + tags: + - DoorBumpOpener - type: entity parent: BaseMedicalPDA @@ -656,7 +764,11 @@ components: - type: Pda id: ParamedicIDCard - state: pda-paramedic + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-paramedic - type: PdaBorderColor borderColor: "#d7d7d0" accentVColor: "#2a4b5b" @@ -671,7 +783,11 @@ components: - type: Pda id: ChemistIDCard - state: pda-chemistry + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-chemistry - type: PdaBorderColor borderColor: "#d7d7d0" accentVColor: "#B34200" @@ -686,7 +802,11 @@ components: - type: Pda id: RDIDCard - state: pda-rd + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-rd - type: PdaBorderColor borderColor: "#d7d7d0" accentHColor: "#447987" @@ -709,7 +829,11 @@ components: - type: Pda id: ResearchIDCard - state: pda-science + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-science - type: PdaBorderColor borderColor: "#d7d7d0" accentVColor: "#8900c9" @@ -731,7 +855,11 @@ components: - type: Pda id: HoSIDCard - state: pda-hos + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-hos - type: PdaBorderColor borderColor: "#A32D26" accentHColor: "#447987" @@ -755,7 +883,11 @@ components: - type: Pda id: WardenIDCard - state: pda-warden + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-warden - type: PdaBorderColor borderColor: "#A32D26" accentVColor: "#949137" @@ -770,7 +902,11 @@ components: - type: Pda id: SecurityIDCard - state: pda-security + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-security - type: PdaBorderColor borderColor: "#A32D26" - type: Icon @@ -784,12 +920,16 @@ components: - type: Pda id: CentcomIDCard - state: pda-centcom penSlot: startingItem: PenCentcom whitelist: tags: - Write + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-centcom - type: PdaBorderColor borderColor: "#00842e" - type: Icon @@ -832,6 +972,9 @@ - AstroNavCartridge - StockTradingCartridge # Delta-V - NanoChatCartridge # DeltaV + - type: Tag # Ignore Chameleon tags + tags: + - DoorBumpOpener - type: entity parent: CentcomPDA @@ -840,6 +983,9 @@ components: - type: Pda id: CentcomIDCardDeathsquad + - type: Tag # Ignore Chameleon tags + tags: + - DoorBumpOpener - type: entity parent: BasePDA @@ -849,7 +995,11 @@ components: - type: Pda id: MusicianIDCard - state: pda-musician + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-musician - type: PdaBorderColor borderColor: "#333333" - type: Icon @@ -867,7 +1017,9 @@ components: - type: Pda id: VisitorIDCard - state: pda-musician + - type: Tag # Ignore Chameleon tags + tags: + - DoorBumpOpener - type: entity parent: BasePDA @@ -877,7 +1029,11 @@ components: - type: Pda id: AtmosIDCard - state: pda-atmos + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-atmos - type: PdaBorderColor borderColor: "#949137" accentVColor: "#447987" @@ -892,7 +1048,11 @@ components: - type: Pda id: PassengerIDCard - state: pda-clear + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-clear - type: PdaBorderColor borderColor: "#288e4d" - type: Icon @@ -906,7 +1066,14 @@ components: - type: Pda id: VisitorIDCard - state: pda-visitor # DeltaV - visitor pda sprite + - type: Appearance # DeltaV - visitor pda sprite + appearanceDataInit: + enum.PdaVisuals.PdaType: !type:String + pda-visitor + - type: Tag # Ignore Chameleon tags + tags: + - DoorBumpOpener + - ChameleonWhitelist # DeltaV - it has a unique sprite - type: entity parent: BasePDA @@ -916,7 +1083,11 @@ components: - type: Pda id: SyndicateIDCard - state: pda-syndi + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-syndi - type: PdaBorderColor borderColor: "#891417" - type: Icon @@ -936,7 +1107,11 @@ components: - type: Pda id: ERTLeaderIDCard - state: pda-ert + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-ert - type: PdaBorderColor borderColor: "#A32D26" accentHColor: "#447987" @@ -1026,7 +1201,11 @@ components: - type: Pda id: PsychologistIDCard - state: pda-medical + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-medical - type: PdaBorderColor borderColor: "#d7d7d0" accentVColor: "#447987" @@ -1041,13 +1220,17 @@ components: - type: Pda id: ReporterIDCard - state: pda-reporter penSlot: startingItem: LuxuryPen priority: -1 whitelist: tags: - Write + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-reporter - type: PdaBorderColor borderColor: "#3f3f74" - type: Icon @@ -1068,7 +1251,11 @@ components: - type: Pda id: ZookeeperIDCard - state: pda-zookeeper + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-zookeeper - type: PdaBorderColor borderColor: "#ffe685" - type: Icon @@ -1082,7 +1269,11 @@ components: - type: Pda id: BoxerIDCard - state: pda-boxer + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-boxer - type: PdaBorderColor borderColor: "#333333" accentVColor: "#390504" @@ -1097,7 +1288,11 @@ components: - type: Pda id: DetectiveIDCard - state: pda-detective + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-detective - type: PdaBorderColor borderColor: "#774705" - type: Icon @@ -1120,7 +1315,11 @@ components: - type: Pda id: BrigmedicIDCard - state: pda-brigmedic + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-brigmedic - type: PdaBorderColor borderColor: "#A32D26" accentHColor: "#d7d7d0" @@ -1146,7 +1345,11 @@ components: - type: Pda id: CluwneIDCard - state: pda-cluwne + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-cluwne - type: PdaBorderColor borderColor: "#1c8f4d" - type: Icon @@ -1168,7 +1371,11 @@ components: - type: Pda id: SeniorEngineerIDCard - state: pda-seniorengineer + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-seniorengineer - type: PdaBorderColor borderColor: "#949137" accentVColor: "#CD6900" @@ -1183,7 +1390,11 @@ components: - type: Pda id: SeniorResearcherIDCard - state: pda-seniorresearcher + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-seniorresearcher - type: PdaBorderColor borderColor: "#d7d7d0" accentHColor: "#8900c9" @@ -1199,7 +1410,11 @@ components: - type: Pda id: SeniorPhysicianIDCard - state: pda-seniorphysician + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-seniorphysician - type: PdaBorderColor borderColor: "#d7d7d0" accentHColor: "#447987" @@ -1215,7 +1430,11 @@ components: - type: Pda id: SeniorOfficerIDCard - state: pda-seniorofficer + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-seniorofficer - type: PdaBorderColor borderColor: "#A32D26" accentVColor: "#DFDFDF" @@ -1230,7 +1449,11 @@ components: - type: Pda id: PirateIDCard - state: pda-pirate + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-pirate - type: Icon state: pda-pirate @@ -1242,7 +1465,11 @@ components: - type: Pda id: SyndicateIDCard - state: pda-syndi-agent + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-syndi-agent - type: PdaBorderColor borderColor: "#891417" - type: Icon @@ -1253,3 +1480,34 @@ - NotekeeperCartridge - MedTekCartridge - NanoChatCartridge # DeltaV + +- type: entity + parent: BasePDA + id: ChameleonPDA + name: passenger PDA + description: Why isn't it gray? + suffix: Chameleon + components: + - type: PdaBorderColor + borderColor: "#717059" + - type: Tag + tags: # ignore "WhitelistChameleon" tag + - DoorBumpOpener + - type: ChameleonClothing + slot: [idcard] + default: PassengerPDA + requireTag: WhitelistChameleonPDA + - type: UserInterface + interfaces: + enum.PdaUiKey.Key: + type: PdaBoundUserInterface + enum.StoreUiKey.Key: + type: StoreBoundUserInterface + enum.RingerUiKey.Key: + type: RingerBoundUserInterface + enum.InstrumentUiKey.Key: + type: InstrumentBoundUserInterface + enum.HealthAnalyzerUiKey.Key: + type: HealthAnalyzerBoundUserInterface + enum.ChameleonUiKey.Key: + type: ChameleonBoundUserInterface diff --git a/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml index 030477b4cf..0d976321ed 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml @@ -22,6 +22,7 @@ tags: - DoorBumpOpener - WhitelistChameleon + - WhitelistChameleonIdCard - type: StealTarget stealGroup: IDCard - type: NanoChatCard # DeltaV @@ -118,6 +119,7 @@ tags: - DoorBumpOpener - WhitelistChameleon + - WhitelistChameleonIdCard - HighRiskItem - type: StealTarget stealGroup: CaptainIDCard @@ -317,6 +319,9 @@ - type: PresetIdCard job: Bartender name: Pun Pun + - type: Tag # Ignore Chameleon tags + tags: + - DoorBumpOpener - type: entity parent: IDCardStandard @@ -605,6 +610,7 @@ - type: ChameleonClothing slot: [idcard] default: PassengerIDCard + requireTag: WhitelistChameleonIdCard - type: UserInterface interfaces: enum.AgentIDCardUiKey.Key: @@ -832,3 +838,6 @@ - DV-SpareSafe # DeltaV - type: NanoChatCard # DeltaV notificationsMuted: true + - type: Tag # Ignore Chameleon tags + tags: + - DoorBumpOpener diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 599e3da096..396b6251e1 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -1333,6 +1333,12 @@ - type: Tag id: WhitelistChameleon +- type: Tag + id: WhitelistChameleonIdCard + +- type: Tag + id: WhitelistChameleonPDA + - type: Tag id: Window