From 4fa2db937eb889bf6c3b141c61247f537eea0673 Mon Sep 17 00:00:00 2001 From: Dvir <39403717+dvir001@users.noreply.github.com> Date: Sun, 20 Oct 2024 22:33:09 +0300 Subject: [PATCH] PDA Programs in Loadout (#2287) * PDA * Comments * Update cartridges.yml * CartridgeLoader: auto-install & disposable fixes * AstroNav GPS Cartridge (#32194) * initial commit * adds astronav cartridge to QM locker * changes requested in review * fix merge conflicts * fixes the statuscontrol disappearing if you eject the cartridge but still have it installed * fix notificationsenabled on salv pda proto * fixes lingering statuscontrol on eject while held --------- Co-authored-by: archrbx * MedTek Cartridge (#32450) * initial commit * adds cartridge to cmo's locker * tidies up yml, adds default scanner sound, makes it so the silent property silences the scanner sound too * fixes ert medic pda not having it preinstalled * adds attribution * removes redundant dependencies * fix agent pda --------- Co-authored-by: archrbx * Fix * NFJanitor * Update silence.ogg * PDA * Update pda.yml * Update cartridges.yml * Update cartridges.yml * Added admin PDA * Update pda.yml * PDA review pass * NFMobAGhostGear fix * fix Admin PDA cartridge references --------- Co-authored-by: Whatstone Co-authored-by: ArchRBX <5040911+ArchRBX@users.noreply.github.com> Co-authored-by: archrbx --- .../GPS/Components/HandheldGPSComponent.cs | 9 -- .../GPS/Systems/HandheldGpsSystem.cs | 2 +- .../GPS/UI/HandheldGpsStatusControl.cs | 15 ++- .../CartridgeLoader/CartridgeLoaderSystem.cs | 12 +++ .../Cartridges/AstroNavCartridgeComponent.cs | 9 ++ .../Cartridges/AstroNavCartridgeSystem.cs | 32 +++++++ .../Cartridges/MedTekCartridgeComponent.cs | 6 ++ .../Cartridges/MedTekCartridgeSystem.cs | 31 ++++++ Content.Server/Entry/IgnoredComponents.cs | 1 - .../Components/HealthAnalyzerComponent.cs | 2 +- .../Medical/HealthAnalyzerSystem.cs | 5 +- .../CartridgeLoader/CartridgeComponent.cs | 20 +++- .../CartridgeLoaderComponent.cs | 4 +- .../GPS/Components/HandheldGPSComponent.cs | 10 ++ .../Components/SharedHandheldGPSComponent.cs | 9 -- Resources/Audio/_NF/Effects/silence.ogg | Bin 4181 -> 4052 bytes .../en-US/_NF/cartridge-loader/cartridges.ftl | 2 +- .../en-US/_NF/preferences/loadout-groups.ftl | 3 +- .../en-US/cartridge-loader/cartridges.ftl | 4 + Resources/Maps/_NF/Outpost/frontier.yml | 2 +- Resources/Maps/_NF/Test/dev_map.yml | 2 +- .../Catalog/Fills/Lockers/heads.yml | 1 + .../Entities/Objects/Devices/cartridges.yml | 26 +---- .../DeltaV/Entities/Objects/Devices/pda.yml | 13 ++- .../Entities/Markers/Spawners/jobs.yml | 1 + .../Entities/Mobs/Player/admin_ghost.yml | 2 +- .../Entities/Objects/Devices/cartridges.yml | 53 +++++++++-- .../Entities/Objects/Devices/pda.yml | 89 ++++++++++-------- .../Prototypes/Loadouts/role_loadouts.yml | 43 ++++----- .../Entities/Objects/Devices/pda.yml | 2 +- .../Roles/Jobs/Service/mail_carrier.yml | 3 +- .../Roles/Jobs/Civilian/janitor.yml | 30 ++---- .../_NF/Entities/Markers/Spawners/jobs.yml | 9 +- .../Entities/Objects/Devices/cartridges.yml | 27 ++++-- .../_NF/Entities/Objects/Devices/pda.yml | 45 +++++---- .../Loadouts/Jobs/Contractor/cartridge.yml | 40 ++++++++ .../_NF/Loadouts/Jobs/Contractor/pda.yml | 36 +++---- .../Loadouts/contractor_loadout_groups.yml | 11 +++ .../Prototypes/_NF/Loadouts/role_loadouts.yml | 37 +++++++- .../Prototypes/_NF/Maps/Outpost/frontier.yml | 2 +- Resources/Prototypes/_NF/Maps/debug.yml | 2 +- .../_NF/Roles/Jobs/Civilian/janitor.yml | 41 ++++++++ .../Prototypes/_NF/Roles/Jobs/Frontier/sr.yml | 3 +- .../_NF/Roles/Jobs/Fun/misc_startinggear.yml | 18 +++- .../Prototypes/_NF/Roles/Jobs/departments.yml | 8 +- .../_NF/Roles/play_time_trackers_old.yml | 5 +- .../Devices/cartridge.rsi/cart-med.png | Bin 0 -> 289 bytes .../Devices/cartridge.rsi/cart-nav.png | Bin 0 -> 300 bytes .../Objects/Devices/cartridge.rsi/meta.json | 14 ++- .../Devices/cartridge.rsi/cart-appraisal.png | Bin 0 -> 223 bytes .../Objects/Devices/cartridge.rsi/meta.json | 5 +- 51 files changed, 525 insertions(+), 221 deletions(-) delete mode 100644 Content.Client/GPS/Components/HandheldGPSComponent.cs create mode 100644 Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeComponent.cs create mode 100644 Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeSystem.cs create mode 100644 Content.Server/CartridgeLoader/Cartridges/MedTekCartridgeComponent.cs create mode 100644 Content.Server/CartridgeLoader/Cartridges/MedTekCartridgeSystem.cs create mode 100644 Content.Shared/GPS/Components/HandheldGPSComponent.cs delete mode 100644 Content.Shared/Tools/Components/SharedHandheldGPSComponent.cs create mode 100644 Resources/Prototypes/_NF/Loadouts/Jobs/Contractor/cartridge.yml create mode 100644 Resources/Prototypes/_NF/Roles/Jobs/Civilian/janitor.yml create mode 100644 Resources/Textures/Objects/Devices/cartridge.rsi/cart-med.png create mode 100644 Resources/Textures/Objects/Devices/cartridge.rsi/cart-nav.png create mode 100644 Resources/Textures/_NF/Objects/Devices/cartridge.rsi/cart-appraisal.png diff --git a/Content.Client/GPS/Components/HandheldGPSComponent.cs b/Content.Client/GPS/Components/HandheldGPSComponent.cs deleted file mode 100644 index 0f5271fd80c..00000000000 --- a/Content.Client/GPS/Components/HandheldGPSComponent.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Content.Shared.GPS; - -namespace Content.Client.GPS.Components -{ - [RegisterComponent] - public sealed partial class HandheldGPSComponent : SharedHandheldGPSComponent - { - } -} diff --git a/Content.Client/GPS/Systems/HandheldGpsSystem.cs b/Content.Client/GPS/Systems/HandheldGpsSystem.cs index cc2b888da37..3f38a3b6952 100644 --- a/Content.Client/GPS/Systems/HandheldGpsSystem.cs +++ b/Content.Client/GPS/Systems/HandheldGpsSystem.cs @@ -1,4 +1,4 @@ -using Content.Client.GPS.Components; +using Content.Shared.GPS.Components; using Content.Client.GPS.UI; using Content.Client.Items; diff --git a/Content.Client/GPS/UI/HandheldGpsStatusControl.cs b/Content.Client/GPS/UI/HandheldGpsStatusControl.cs index 7dcf3f29c51..57645e386e7 100644 --- a/Content.Client/GPS/UI/HandheldGpsStatusControl.cs +++ b/Content.Client/GPS/UI/HandheldGpsStatusControl.cs @@ -1,4 +1,4 @@ -using Content.Client.GPS.Components; +using Content.Shared.GPS.Components; using Content.Client.Message; using Content.Client.Stylesheets; using Robust.Client.GameObjects; @@ -30,6 +30,13 @@ protected override void FrameUpdate(FrameEventArgs args) { base.FrameUpdate(args); + // don't display the label if the gps component is being removed + if (_parent.Comp.LifeStage > ComponentLifeStage.Running) + { + _label.Visible = false; + return; + } + _updateDif += args.DeltaSeconds; if (_updateDif < _parent.Comp.UpdateRate) return; @@ -44,9 +51,9 @@ private void UpdateGpsDetails() var posText = "Error"; if (_entMan.TryGetComponent(_parent, out TransformComponent? transComp)) { - var pos = _transform.GetMapCoordinates(_parent.Owner, xform: transComp); - var x = (int) pos.X; - var y = (int) pos.Y; + var pos = _transform.GetMapCoordinates(_parent.Owner, xform: transComp); + var x = (int)pos.X; + var y = (int)pos.Y; posText = $"({x}, {y})"; } _label.SetMarkup(Loc.GetString("handheld-gps-coordinates-title", ("coordinates", posText))); diff --git a/Content.Server/CartridgeLoader/CartridgeLoaderSystem.cs b/Content.Server/CartridgeLoader/CartridgeLoaderSystem.cs index 7caec6150ed..f930d26d3a0 100644 --- a/Content.Server/CartridgeLoader/CartridgeLoaderSystem.cs +++ b/Content.Server/CartridgeLoader/CartridgeLoaderSystem.cs @@ -217,6 +217,13 @@ public bool InstallProgram(EntityUid loaderUid, string prototype, bool deinstall RaiseLocalEvent(installedProgram, new CartridgeAddedEvent(loaderUid)); UpdateUserInterfaceState(loaderUid, loader); + + if (cartridge.Readonly) // Frontier: Block uninstall + cartridge.InstallationStatus = InstallationStatus.Readonly; // Frontier + + if (cartridge.Disposable) // Frontier: Delete the cartridge after install if its disposable. + QueueDel(loader.CartridgeSlot.ContainerSlot!.ContainedEntity); // Frontier + return true; } @@ -343,6 +350,11 @@ protected override void OnItemInserted(EntityUid uid, CartridgeLoaderComponent l if (TryComp(args.Entity, out CartridgeComponent? cartridge)) cartridge.LoaderUid = uid; + // Frontier: Try to auto install the program when inserted, QOL + if (cartridge != null && cartridge.AutoInstall) + InstallCartridge(uid, args.Entity, loader); + // End Frontier + RaiseLocalEvent(args.Entity, new CartridgeAddedEvent(uid)); base.OnItemInserted(uid, loader, args); } diff --git a/Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeComponent.cs b/Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeComponent.cs new file mode 100644 index 00000000000..fd616a1c803 --- /dev/null +++ b/Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeComponent.cs @@ -0,0 +1,9 @@ +using Content.Shared.CartridgeLoader.Cartridges; +using Content.Shared.GPS; + +namespace Content.Server.CartridgeLoader.Cartridges; + +[RegisterComponent] +public sealed partial class AstroNavCartridgeComponent : Component +{ +} diff --git a/Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeSystem.cs b/Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeSystem.cs new file mode 100644 index 00000000000..60d14789fa0 --- /dev/null +++ b/Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeSystem.cs @@ -0,0 +1,32 @@ +using Content.Shared.CartridgeLoader; +using Content.Shared.CartridgeLoader.Cartridges; +using Content.Shared.GPS.Components; + +namespace Content.Server.CartridgeLoader.Cartridges; + +public sealed class AstroNavCartridgeSystem : EntitySystem +{ + [Dependency] private readonly CartridgeLoaderSystem _cartridgeLoaderSystem = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnCartridgeAdded); + SubscribeLocalEvent(OnCartridgeRemoved); + } + + private void OnCartridgeAdded(Entity ent, ref CartridgeAddedEvent args) + { + EnsureComp(args.Loader); + } + + private void OnCartridgeRemoved(Entity ent, ref CartridgeRemovedEvent args) + { + // only remove when the program itself is removed + if (!_cartridgeLoaderSystem.HasProgram(args.Loader)) + { + RemComp(args.Loader); + } + } +} diff --git a/Content.Server/CartridgeLoader/Cartridges/MedTekCartridgeComponent.cs b/Content.Server/CartridgeLoader/Cartridges/MedTekCartridgeComponent.cs new file mode 100644 index 00000000000..1a49b4d1f77 --- /dev/null +++ b/Content.Server/CartridgeLoader/Cartridges/MedTekCartridgeComponent.cs @@ -0,0 +1,6 @@ +namespace Content.Server.CartridgeLoader.Cartridges; + +[RegisterComponent] +public sealed partial class MedTekCartridgeComponent : Component +{ +} diff --git a/Content.Server/CartridgeLoader/Cartridges/MedTekCartridgeSystem.cs b/Content.Server/CartridgeLoader/Cartridges/MedTekCartridgeSystem.cs new file mode 100644 index 00000000000..4d1b71dad04 --- /dev/null +++ b/Content.Server/CartridgeLoader/Cartridges/MedTekCartridgeSystem.cs @@ -0,0 +1,31 @@ +using Content.Server.Medical.Components; +using Content.Shared.CartridgeLoader; + +namespace Content.Server.CartridgeLoader.Cartridges; + +public sealed class MedTekCartridgeSystem : EntitySystem +{ + [Dependency] private readonly CartridgeLoaderSystem _cartridgeLoaderSystem = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnCartridgeAdded); + SubscribeLocalEvent(OnCartridgeRemoved); + } + + private void OnCartridgeAdded(Entity ent, ref CartridgeAddedEvent args) + { + var healthAnalyzer = EnsureComp(args.Loader); + } + + private void OnCartridgeRemoved(Entity ent, ref CartridgeRemovedEvent args) + { + // only remove when the program itself is removed + if (!_cartridgeLoaderSystem.HasProgram(args.Loader)) + { + RemComp(args.Loader); + } + } +} diff --git a/Content.Server/Entry/IgnoredComponents.cs b/Content.Server/Entry/IgnoredComponents.cs index d9b81c8e5a5..04c45662272 100644 --- a/Content.Server/Entry/IgnoredComponents.cs +++ b/Content.Server/Entry/IgnoredComponents.cs @@ -12,7 +12,6 @@ public static class IgnoredComponents "GuideHelp", "Clickable", "Icon", - "HandheldGPS", "CableVisualizer", "SolutionItemStatus", "UIFragment", diff --git a/Content.Server/Medical/Components/HealthAnalyzerComponent.cs b/Content.Server/Medical/Components/HealthAnalyzerComponent.cs index 85956b60299..34b7af0212d 100644 --- a/Content.Server/Medical/Components/HealthAnalyzerComponent.cs +++ b/Content.Server/Medical/Components/HealthAnalyzerComponent.cs @@ -54,7 +54,7 @@ public sealed partial class HealthAnalyzerComponent : Component /// Sound played on scanning end /// [DataField] - public SoundSpecifier? ScanningEndSound; + public SoundSpecifier ScanningEndSound = new SoundPathSpecifier("/Audio/Items/Medical/healthscanner.ogg"); /// /// Whether to show up the popup diff --git a/Content.Server/Medical/HealthAnalyzerSystem.cs b/Content.Server/Medical/HealthAnalyzerSystem.cs index 82f80759028..60a492a755f 100644 --- a/Content.Server/Medical/HealthAnalyzerSystem.cs +++ b/Content.Server/Medical/HealthAnalyzerSystem.cs @@ -13,11 +13,9 @@ using Content.Shared.MedicalScanner; using Content.Shared.Mobs.Components; using Content.Shared.Popups; -using Content.Shared.PowerCell; using Robust.Server.GameObjects; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; -using Robust.Shared.Player; using Robust.Shared.Timing; namespace Content.Server.Medical; @@ -104,7 +102,8 @@ private void OnDoAfter(Entity uid, ref HealthAnalyzerDo if (args.Handled || args.Cancelled || args.Target == null || !_cell.HasDrawCharge(uid, user: args.User)) return; - _audio.PlayPvs(uid.Comp.ScanningEndSound, uid); + if (!uid.Comp.Silent) + _audio.PlayPvs(uid.Comp.ScanningEndSound, uid); OpenUserInterface(args.User, uid); BeginAnalyzingEntity(uid, args.Target.Value); diff --git a/Content.Shared/CartridgeLoader/CartridgeComponent.cs b/Content.Shared/CartridgeLoader/CartridgeComponent.cs index 207e0244dee..fb6181d5ecc 100644 --- a/Content.Shared/CartridgeLoader/CartridgeComponent.cs +++ b/Content.Shared/CartridgeLoader/CartridgeComponent.cs @@ -1,4 +1,4 @@ -using Robust.Shared.GameStates; +using Robust.Shared.GameStates; using Robust.Shared.Serialization; using Robust.Shared.Utility; @@ -21,6 +21,24 @@ public sealed partial class CartridgeComponent : Component [AutoNetworkedField] public InstallationStatus InstallationStatus = InstallationStatus.Cartridge; + + /// + /// Frontier: This is used for onetime use programs + /// + [DataField] + public bool Disposable = false; + + /// + /// Frontier: This is used to auto install on insert + /// + [DataField] + public bool AutoInstall = false; + + /// + /// Frontier: Block uninstall + /// + [DataField] + public bool Readonly = false; } [Serializable, NetSerializable] diff --git a/Content.Shared/CartridgeLoader/CartridgeLoaderComponent.cs b/Content.Shared/CartridgeLoader/CartridgeLoaderComponent.cs index c9cd710c522..bcd3216b009 100644 --- a/Content.Shared/CartridgeLoader/CartridgeLoaderComponent.cs +++ b/Content.Shared/CartridgeLoader/CartridgeLoaderComponent.cs @@ -1,4 +1,4 @@ -using Content.Shared.Containers.ItemSlots; +using Content.Shared.Containers.ItemSlots; using Robust.Shared.GameStates; namespace Content.Shared.CartridgeLoader; @@ -33,7 +33,7 @@ public sealed partial class CartridgeLoaderComponent : Component /// The maximum amount of programs that can be installed on the cartridge loader entity /// [DataField] - public int DiskSpace = 5; + public int DiskSpace = 10; // Frontier 5<10 /// /// Controls whether the cartridge loader will play notifications if it supports it at all diff --git a/Content.Shared/GPS/Components/HandheldGPSComponent.cs b/Content.Shared/GPS/Components/HandheldGPSComponent.cs new file mode 100644 index 00000000000..a0af0909867 --- /dev/null +++ b/Content.Shared/GPS/Components/HandheldGPSComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.GPS.Components; + +[RegisterComponent, NetworkedComponent] +public sealed partial class HandheldGPSComponent : Component +{ + [DataField] + public float UpdateRate = 1.5f; +} diff --git a/Content.Shared/Tools/Components/SharedHandheldGPSComponent.cs b/Content.Shared/Tools/Components/SharedHandheldGPSComponent.cs deleted file mode 100644 index 3c30738857b..00000000000 --- a/Content.Shared/Tools/Components/SharedHandheldGPSComponent.cs +++ /dev/null @@ -1,9 +0,0 @@ - -namespace Content.Shared.GPS -{ - public abstract partial class SharedHandheldGPSComponent : Component - { - [DataField("updateRate")] - public float UpdateRate = 1.5f; - } -} diff --git a/Resources/Audio/_NF/Effects/silence.ogg b/Resources/Audio/_NF/Effects/silence.ogg index 91738108486ed65c60563112099c3c036aab1eba..9acd67498d55726d61b7eb4e9b450ecf5b232958 100644 GIT binary patch delta 2574 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 diff --git a/Resources/Locale/en-US/_NF/cartridge-loader/cartridges.ftl b/Resources/Locale/en-US/_NF/cartridge-loader/cartridges.ftl index 99a458e07a2..f83cba611d3 100644 --- a/Resources/Locale/en-US/_NF/cartridge-loader/cartridges.ftl +++ b/Resources/Locale/en-US/_NF/cartridge-loader/cartridges.ftl @@ -1,4 +1,4 @@ # Appraisal cartridge -appraisal-program-name = Appraisal App Plus +appraisal-program-name = AppraiseAll Plus appraisal-label-name = Item appraisal-label-price = Appraised Price diff --git a/Resources/Locale/en-US/_NF/preferences/loadout-groups.ftl b/Resources/Locale/en-US/_NF/preferences/loadout-groups.ftl index 3e79fad732c..8bccf170309 100644 --- a/Resources/Locale/en-US/_NF/preferences/loadout-groups.ftl +++ b/Resources/Locale/en-US/_NF/preferences/loadout-groups.ftl @@ -15,7 +15,8 @@ loadout-group-contractor-face = mask loadout-group-contractor-utility = tools loadout-group-contractor-fun = fun loadout-group-contractor-trinkets = trinkets -loadout-group-contractor-survival-box = survival box loadout-group-contractor-encryption-key = encryption keys +loadout-group-contractor-survival-box = survival box +loadout-group-contractor-cartridge = PDA cartridges loadout-group-contractor-implanter = implanters loadout-group-contractor-bureaucracy = bureaucracy \ No newline at end of file diff --git a/Resources/Locale/en-US/cartridge-loader/cartridges.ftl b/Resources/Locale/en-US/cartridge-loader/cartridges.ftl index 2db27f5be09..ceeac1be3c9 100644 --- a/Resources/Locale/en-US/cartridge-loader/cartridges.ftl +++ b/Resources/Locale/en-US/cartridge-loader/cartridges.ftl @@ -20,6 +20,10 @@ log-probe-label-time = Time log-probe-label-accessor = Accessed by log-probe-label-number = # +astro-nav-program-name = AstroNav + +med-tek-program-name = MedTek + # Wanted list cartridge wanted-list-program-name = Wanted list wanted-list-label-no-records = It's all right, cowboy diff --git a/Resources/Maps/_NF/Outpost/frontier.yml b/Resources/Maps/_NF/Outpost/frontier.yml index 66bd5d2145f..3334a67427a 100644 --- a/Resources/Maps/_NF/Outpost/frontier.yml +++ b/Resources/Maps/_NF/Outpost/frontier.yml @@ -32151,7 +32151,7 @@ entities: - type: Transform pos: -5.5,1.5 parent: 2173 -- proto: SpawnPointJanitor +- proto: NFSpawnPointJanitor entities: - uid: 2099 components: diff --git a/Resources/Maps/_NF/Test/dev_map.yml b/Resources/Maps/_NF/Test/dev_map.yml index 466dd4fbb61..13357aa9c9f 100644 --- a/Resources/Maps/_NF/Test/dev_map.yml +++ b/Resources/Maps/_NF/Test/dev_map.yml @@ -6843,7 +6843,7 @@ entities: - type: Transform pos: -3.5,2.5 parent: 179 -- proto: SpawnPointJanitor +- proto: NFSpawnPointJanitor entities: - uid: 1488 components: diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 25d005eb414..5b0ae943892 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -228,6 +228,7 @@ # - id: MedicalTechFabCircuitboard # Frontier - bloat # - id: MedkitFilled # Frontier - bloat - id: RubberStampCMO + - id: MedTekCartridge # Hardsuit table, used for suit storage as well - type: entityTable diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/cartridges.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/cartridges.yml index 22673262cfa..b81f4717562 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/cartridges.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/cartridges.yml @@ -1,5 +1,5 @@ # - type: entity # Frontier - Not Merged yet -# parent: BaseItem +# parent: NFBasePDACartridge # id: CrimeAssistCartridge # name: crime assist cartridge # description: A cartridge that helps identify crimes and see appropriate punishment. @@ -18,29 +18,8 @@ # sprite: DeltaV/Icons/cri.rsi # state: cri -# - type: entity # Frontier - Not Merged yet -# parent: BaseItem -# id: SecWatchCartridge -# name: sec watch cartridge -# description: A cartridge that tracks the status of currently wanted individuals. -# components: -# - type: Sprite -# sprite: DeltaV/Objects/Devices/cartridge.rsi -# state: cart-cri -# - type: Icon -# sprite: DeltaV/Objects/Devices/cartridge.rsi -# state: cart-cri -# - type: UIFragment -# ui: !type:SecWatchUi -# - type: Cartridge -# programName: sec-watch-program-name -# icon: -# sprite: Objects/Weapons/Melee/stunbaton.rsi -# state: stunbaton_on -# - type: SecWatchCartridge - - type: entity - parent: BaseItem + parent: NFBasePDACartridge id: MailMetricsCartridge name: mail metrics cartridge description: A cartridge that tracks statistics related to mail deliveries. @@ -59,3 +38,4 @@ icon: sprite: Nyanotrasen/Objects/Specific/Mail/mail.rsi state: icon + readonly: true # Frontier \ No newline at end of file diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/pda.yml index 83f02ee8907..5ddc032f626 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/pda.yml @@ -29,10 +29,9 @@ - type: Icon sprite: _NF/Objects/Devices/pda.rsi # Frontier - DeltaV/Objects/Devices/pda.rsi<_NF/Objects/Devices/pda.rsi state: pda-mailcarrier - - type: CartridgeLoader # DeltaV - Courier Performance - preinstalled: - - CrewManifestCartridge - - NotekeeperCartridge - - NewsReaderCartridge - - BountyContractsCartridge - - MailMetricsCartridge + # - type: CartridgeLoader # DeltaV - Courier Performance # Frontier - pushed to cartridge loadouts + # preinstalled: + # - CrewManifestCartridge + # - NotekeeperCartridge + # - NewsReaderCartridge + # - MailMetricsCartridge diff --git a/Resources/Prototypes/Entities/Markers/Spawners/jobs.yml b/Resources/Prototypes/Entities/Markers/Spawners/jobs.yml index 6c1e29370bf..a47ccb78c0e 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/jobs.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/jobs.yml @@ -266,6 +266,7 @@ id: SpawnPointJanitor parent: SpawnPointJobBase name: janitor + categories: [ HideSpawnMenu ] # Frontier components: - type: SpawnPoint job_id: Janitor diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index f595149e4b6..c00d7bcbfeb 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -93,7 +93,7 @@ - type: Inventory templateId: aghost - type: Loadout - prototypes: [ MobAghostGear ] + prototypes: [ NFMobAghostGear ] # Frontier MobAghostGearq#PU^;^N{g=59|-O*Pti+jjLalY>u{m6Z()3#3%B_W z2ne`dJZPc!^nd;K$rGl97-!CZ%ic0oAY`gpMlFNMRdaTSV|+8K_n)7-CYis5p`xse z)q=^xv+aa;L&t44OG0&Aw39pF%dyP$(^-2}fC28Hc>*SPy Q)-y18y85}Sb4q9e08CtGF8}}l literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Devices/cartridge.rsi/cart-nav.png b/Resources/Textures/Objects/Devices/cartridge.rsi/cart-nav.png new file mode 100644 index 0000000000000000000000000000000000000000..427129da0ed3c3745dda6f4c80f872b860497315 GIT binary patch literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCilI0(?STIXOAi)zzh>qzsLm9GpV@0y3)i7{Z&C&V0|Ns=K|!GM zuz-^+K#H#<$S?RmGGK5$aOVV2hO@vUvKXk~FbFdq&tH)O6fE>~aSXBWe|zCBSAzmi zL*Re2vv+>)&kJtX)Lrs>-)sl|?2L@d{8jP|k&_N{O1xh7rdBWB=p4I42J3s11K&F~ zvT8B-oG=zL4skrfytwB=eW3XYVIdaL9~+rpc(48DEVFIlyJ`cUu)&Rm^Hj$ Ys#v327E!^u8E83!r>mdKI;Vst0BSF1{Qv*} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Devices/cartridge.rsi/meta.json b/Resources/Textures/Objects/Devices/cartridge.rsi/meta.json index d5fad560062..b79f46d08db 100644 --- a/Resources/Textures/Objects/Devices/cartridge.rsi/meta.json +++ b/Resources/Textures/Objects/Devices/cartridge.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from vgstation at https://github.com/vgstation-coders/vgstation13/commit/1cdfb0230cc96d0ba751fa002d04f8aa2f25ad7d and tgstation at tgstation at https://github.com/tgstation/tgstation/commit/0c15d9dbcf0f2beb230eba5d9d889ef2d1945bb8, cart-log made by Skarletto (github), cart-sec made by dieselmohawk (discord)", + "copyright": "Taken from vgstation at https://github.com/vgstation-coders/vgstation13/commit/1cdfb0230cc96d0ba751fa002d04f8aa2f25ad7d and tgstation at tgstation at https://github.com/tgstation/tgstation/commit/0c15d9dbcf0f2beb230eba5d9d889ef2d1945bb8, cart-log made by Skarletto (github), cart-sec made by dieselmohawk (discord), cart-nav, cart-med made by ArchRBX (github)", "size": { "x": 32, "y": 32 @@ -55,9 +55,15 @@ { "name": "cart-m" }, + { + "name": "cart-med" + }, { "name": "cart-mi" }, + { + "name": "cart-nav" + }, { "name": "cart-ord" }, @@ -70,6 +76,9 @@ { "name": "cart-s" }, + { + "name": "cart-sec" + }, { "name": "cart-tear" }, @@ -79,9 +88,6 @@ { "name": "cart-y" }, - { - "name": "cart-sec" - }, { "name": "insert_overlay" } diff --git a/Resources/Textures/_NF/Objects/Devices/cartridge.rsi/cart-appraisal.png b/Resources/Textures/_NF/Objects/Devices/cartridge.rsi/cart-appraisal.png new file mode 100644 index 0000000000000000000000000000000000000000..a5249ef54b355755742288a8ab408e1318178728 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyDgizru0UElQqHtM)veY%hKb3Q znYmk6yF_08+&+Q5)64Y}6^$}g)@%|?0IK6D3GxeO_>TabM*`G<;&GlXjv*GkZzovt z9Z=w5Y5dCg?f-vi6{!Fo%}GYefrj&vf`9#-wMXEOxX+Z`6B&~(-dbhExbVOdU)RV@D+P=f#f literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Objects/Devices/cartridge.rsi/meta.json b/Resources/Textures/_NF/Objects/Devices/cartridge.rsi/meta.json index 68d2b20dd41..3710968d714 100644 --- a/Resources/Textures/_NF/Objects/Devices/cartridge.rsi/meta.json +++ b/Resources/Textures/_NF/Objects/Devices/cartridge.rsi/meta.json @@ -1,12 +1,15 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "contraband_forensics made by Whatstone (Discord)", + "copyright": "cart-appraisal, contraband_forensics made by Whatstone (Discord)", "size": { "x": 32, "y": 32 }, "states": [ + { + "name": "cart-appraisal" + }, { "name": "contraband_forensics" }