mirror of
https://github.com/WWhiteDreamProject/wwdpublic.git
synced 2026-04-17 21:48:58 +03:00
# Description This adds the wonderful `Psionics Registry Computer` which allows you to, just like Criminal Records, mark people that will show their icons to other individuals wearing the appropriate gear, and will allow you to keep track of such individuals in a similar way by making a `PsiWatch` app that will show the reasons. For the purposes of easement, I've left the fingerprints and DNA in there, but individuals will not show up with it in the actual file. The game would just crash when I removed the filters, so I left them in. The dropdown also just looked cleaner when it was there instead of removing it and replacing it with a label. I've recolored the sprites for the sec-glasses and sec-HUD to make the epi-glasses and epi-HUD using Epistemics colors. I've recolored the sprite for the CriminalRecords computer to look different and be cool. --- # TODO A list of things I've done split into categories. ### Spriting - [x] (Recolor) Sprite the epi-glasses and epi-HUD. - [x] Sprite the PsionicsRecords computer screen. - [x] Sprite the Psionics Status icons. - [x] Change the sprite for the Psionics Abusing (it is hard to tell any difference from suspected right now). ### Records - [x] Set up records XAML that basically duplicates the Criminal Records. - [x] Remove History (not necessary). - [x] Change all the naming schema to match. - [x] Change the categories and setup reason-requirement for each submission type. - [x] Change the "reason" to "psionics" so it is more intuitive. ### Computer Setup - [x] Setup computer to show UI. - [x] Setup system to report to report to Epistemics (Science) radio when anything is changed. - [x] Setup the system to only accept Epistemics (Research) access. - [x] Setup the computer board. - [x] Setup the sprites for the computers. ### Equipment and Icons - [x] Create the icons and ensure the ShowPsionicsRecordIcons prototype works. - [x] Create the entity prototypes for the glasses and HUD in the game to show textures. - [x] Set it up so the glasses and HUD show the user the icons when they're wearing them (having hard time fixing this at 06:00 in the morning). ### PDA App - [x] Setup the PDA app to mimic the SecWatch app as its own (PsiWatch). - [x] Add the PDA app cartridge to Chaplain, Mantis, Cataloguer, and Mystagogue. - [x] Add cartridge to the Mystagogue locker (so they can give others it). ### Loadouts - [x] Add the epi-HUD to the Chaplain, Mantis, Cataloguer and Mystagogue. - [x] Add the epi-glasses to the Mystagogue. - [x] Add the epi-glasses to Chaplain, Mantis, and Cataloguer (for 3 points). ### Mapping - [x] Add the Psionics Registry Computer to every map. ### Miscellaneous Fixes/Changes - [x] Make the computer only work for Chaplain (Chapel), Cataloguer (Library), Mantis (Mantis), and Mystagogue (ResearchDirector). - [x] Fix Chaplain PDA (did not have any programs installed automatically, now it does). --- # Media I will add more media when I finish the rest. For now, it's just us. <details><summary><h3>Registry Working</h3></summary> <p> https://github.com/user-attachments/assets/f534a1b6-6873-4bcd-9fe5-c7138069ecc0 </p> </details> <details><summary><h3>Loadouts and PsiWatch</h3></summary> <p> Cataloguer  Chaplain  Mantis  Mystagogue  --- No Users in PsiWatch  Suspected in PsiWatch  Registered in PsiWatch  Abusing in PsiWatch  PsiWatch in PDA  Picture of the PDAs and PsiWatch Cartridge  --- Mystagogue Lockers with PsiWatch Cartridge  </p> </details> <details><summary><h3>Mapping Locations</h3></summary> <p> Arena  Asterisk  Core  Edge  Europa  Gaxstation  Glacier  Hive  Lighthouse  Meta  Pebble  Radstation  Saltern  Shoukou  Submarine  Tortuga  </p> </details> --- # Changelog 🆑 - add: Added Psionics Registry Computer. Now you can record Psionics users in Epistemics. - add: Added epi-glasses and epi-HUD to see Psionics Users icons. (Chaplain, Cataloguer, Mantis, and Mystagogue have access in loadout). - add: Added PsiWatch. Now you can see the Psionics Records data on your PDA! - fix: Fixed Chaplain not having any programs in their PDA on spawn. --------- Signed-off-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Co-authored-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> (cherry picked from commit fc7ecc44a748f8ef7a4cec613033f51acf238288)
243 lines
6.5 KiB
C#
243 lines
6.5 KiB
C#
using Content.Shared.Stealth.Components;
|
|
using Content.Shared.Whitelist;
|
|
using Robust.Shared.Prototypes;
|
|
using Robust.Shared.Serialization;
|
|
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Array;
|
|
using Robust.Shared.Utility;
|
|
|
|
namespace Content.Shared.StatusIcon;
|
|
|
|
/// <summary>
|
|
/// A data structure that holds relevant
|
|
/// information for status icons.
|
|
/// </summary>
|
|
[Virtual, DataDefinition]
|
|
public partial class StatusIconData : IComparable<StatusIconData>
|
|
{
|
|
/// <summary>
|
|
/// The icon that's displayed on the entity.
|
|
/// </summary>
|
|
[DataField(required: true)]
|
|
public SpriteSpecifier Icon = default!;
|
|
|
|
/// <summary>
|
|
/// A priority for the order in which the icons will be displayed.
|
|
/// </summary>
|
|
[DataField]
|
|
public int Priority = 10;
|
|
|
|
/// <summary>
|
|
/// Whether or not to hide the icon to ghosts
|
|
/// </summary>
|
|
[DataField]
|
|
public bool VisibleToGhosts = true;
|
|
|
|
/// <summary>
|
|
/// Whether or not to hide the icon when we are inside a container like a locker or a crate.
|
|
/// </summary>
|
|
[DataField]
|
|
public bool HideInContainer = true;
|
|
|
|
/// <summary>
|
|
/// Whether or not to hide the icon when the entity has an active <see cref="StealthComponent"/>
|
|
/// </summary>
|
|
[DataField]
|
|
public bool HideOnStealth = true;
|
|
|
|
/// <summary>
|
|
/// Specifies what entities and components/tags this icon can be shown to.
|
|
/// </summary>
|
|
[DataField]
|
|
public EntityWhitelist? ShowTo;
|
|
|
|
/// <summary>
|
|
/// A preference for where the icon will be displayed. None | Left | Right
|
|
/// </summary>
|
|
[DataField]
|
|
public StatusIconLocationPreference LocationPreference = StatusIconLocationPreference.None;
|
|
|
|
/// <summary>
|
|
/// The layer the icon is displayed on. Mod is drawn above Base. Base | Mod
|
|
/// </summary>
|
|
[DataField]
|
|
public StatusIconLayer Layer = StatusIconLayer.Base;
|
|
|
|
/// <summary>
|
|
/// Sets if the icon should be rendered with or without the effect of lighting.
|
|
/// </summary>
|
|
[DataField]
|
|
public bool IsShaded = false;
|
|
|
|
public int CompareTo(StatusIconData? other)
|
|
{
|
|
return Priority.CompareTo(other?.Priority ?? int.MaxValue);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// <see cref="StatusIconData"/> but in new convenient prototype form!
|
|
/// </summary>
|
|
public abstract partial class StatusIconPrototype : StatusIconData, IPrototype
|
|
{
|
|
/// <inheritdoc/>
|
|
[IdDataField]
|
|
public string ID { get; private set; } = default!;
|
|
}
|
|
|
|
/// <summary>
|
|
/// StatusIcons for showing jobs on the sec HUD
|
|
/// </summary>
|
|
[Prototype]
|
|
public sealed partial class JobIconPrototype : StatusIconPrototype, IInheritingPrototype
|
|
{
|
|
/// <inheritdoc />
|
|
[ParentDataField(typeof(AbstractPrototypeIdArraySerializer<JobIconPrototype>))]
|
|
public string[]? Parents { get; }
|
|
|
|
/// <inheritdoc />
|
|
[NeverPushInheritance]
|
|
[AbstractDataField]
|
|
public bool Abstract { get; }
|
|
|
|
/// <summary>
|
|
/// Name of the icon used for menu tooltips.
|
|
/// </summary>
|
|
[DataField]
|
|
public string JobName { get; private set; } = string.Empty;
|
|
|
|
[ViewVariables(VVAccess.ReadOnly)]
|
|
public string LocalizedJobName => Loc.GetString(JobName);
|
|
|
|
/// <summary>
|
|
/// Should the agent ID or ID card console be able to use this job icon?
|
|
/// </summary>
|
|
[DataField]
|
|
public bool AllowSelection = true;
|
|
}
|
|
|
|
/// <summary>
|
|
/// StatusIcons for the med HUD
|
|
/// </summary>
|
|
[Prototype]
|
|
public sealed partial class HealthIconPrototype : StatusIconPrototype, IInheritingPrototype
|
|
{
|
|
/// <inheritdoc />
|
|
[ParentDataField(typeof(AbstractPrototypeIdArraySerializer<HealthIconPrototype>))]
|
|
public string[]? Parents { get; }
|
|
|
|
/// <inheritdoc />
|
|
[NeverPushInheritance]
|
|
[AbstractDataField]
|
|
public bool Abstract { get; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// StatusIcons for the beer goggles and fried onion goggles
|
|
/// </summary>
|
|
[Prototype]
|
|
public sealed partial class SatiationIconPrototype : StatusIconPrototype, IInheritingPrototype
|
|
{
|
|
/// <inheritdoc />
|
|
[ParentDataField(typeof(AbstractPrototypeIdArraySerializer<SatiationIconPrototype>))]
|
|
public string[]? Parents { get; }
|
|
|
|
/// <inheritdoc />
|
|
[NeverPushInheritance]
|
|
[AbstractDataField]
|
|
public bool Abstract { get; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// StatusIcons for showing the wanted status on the sec HUD
|
|
/// </summary>
|
|
[Prototype]
|
|
public sealed partial class SecurityIconPrototype : StatusIconPrototype, IInheritingPrototype
|
|
{
|
|
/// <inheritdoc />
|
|
[ParentDataField(typeof(AbstractPrototypeIdArraySerializer<SecurityIconPrototype>))]
|
|
public string[]? Parents { get; }
|
|
|
|
/// <inheritdoc />
|
|
[NeverPushInheritance]
|
|
[AbstractDataField]
|
|
public bool Abstract { get; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// StatusIcons for showing the psionics status on the epi HUD
|
|
/// </summary>
|
|
[Prototype]
|
|
public sealed partial class PsionicsIconPrototype : StatusIconPrototype, IInheritingPrototype
|
|
{
|
|
/// <inheritdoc />
|
|
[ParentDataField(typeof(AbstractPrototypeIdArraySerializer<PsionicsIconPrototype>))]
|
|
public string[]? Parents { get; }
|
|
|
|
/// <inheritdoc />
|
|
[NeverPushInheritance]
|
|
[AbstractDataField]
|
|
public bool Abstract { get; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// StatusIcons for faction membership
|
|
/// </summary>
|
|
[Prototype]
|
|
public sealed partial class FactionIconPrototype : StatusIconPrototype, IInheritingPrototype
|
|
{
|
|
/// <inheritdoc />
|
|
[ParentDataField(typeof(AbstractPrototypeIdArraySerializer<FactionIconPrototype>))]
|
|
public string[]? Parents { get; }
|
|
|
|
/// <inheritdoc />
|
|
[NeverPushInheritance]
|
|
[AbstractDataField]
|
|
public bool Abstract { get; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// StatusIcons for debugging purposes
|
|
/// </summary>
|
|
[Prototype]
|
|
public sealed partial class DebugIconPrototype : StatusIconPrototype, IInheritingPrototype
|
|
{
|
|
/// <inheritdoc />
|
|
[ParentDataField(typeof(AbstractPrototypeIdArraySerializer<DebugIconPrototype>))]
|
|
public string[]? Parents { get; }
|
|
|
|
/// <inheritdoc />
|
|
[NeverPushInheritance]
|
|
[AbstractDataField]
|
|
public bool Abstract { get; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// StatusIcons for the SSD indicator
|
|
/// </summary>
|
|
[Prototype]
|
|
public sealed partial class SsdIconPrototype : StatusIconPrototype, IInheritingPrototype
|
|
{
|
|
/// <inheritdoc />
|
|
[ParentDataField(typeof(AbstractPrototypeIdArraySerializer<SsdIconPrototype>))]
|
|
public string[]? Parents { get; }
|
|
|
|
/// <inheritdoc />
|
|
[NeverPushInheritance]
|
|
[AbstractDataField]
|
|
public bool Abstract { get; }
|
|
}
|
|
|
|
[Serializable, NetSerializable]
|
|
public enum StatusIconLocationPreference : byte
|
|
{
|
|
None,
|
|
Left,
|
|
Right,
|
|
}
|
|
|
|
public enum StatusIconLayer : byte
|
|
{
|
|
Base,
|
|
Mod,
|
|
}
|