mirror of
https://github.com/WWhiteDreamProject/wwdpublic.git
synced 2026-04-18 05:59:03 +03:00
# Description This ports https://github.com/DeltaV-Station/Delta-v/pull/660 > ## About the PR > Adds the Justice Department, a department enveloping the lawyer and 3 new roles that manage the court system and charges against the accused. Includes: • New department, Justice! • 3 new roles: ◦ Chief Justice: The main, impartial judge for the station responsible for adjudicating criminal and civil trials, as well as other small matters like paroles and pardons. ◦ Clerk: The court clerk, who organizes trials, notarizes court documents (warrants, sentences, etc), and ensures correct sentencing and due process for the accused in sec custody. ◦ Prosecutor: A special lawyer role that legally advises sec and handles all of its court prep and prosecution, freeing up sec's time to go stun baton the clown instead of waiting for trial. • Antag objective to steal the Clerk's notary stamp, an object imbued with the authority to officialize court decisions. • Made the Lawyer role easier to understand and added them to the department. Renamed to Attorney, they now exclusively defend the accused or can sue on their behalf. Can also curse at the prosecutor in the bar. • Changed SoP to match. Notable changes include ◦ Felony charges and above must be reviewed and approved by the Clerk or Chief Justice if those roles are active. ◦ Parole, criminal trials, and civil trials are now all adjudicated by the Chief Justice, or the clerk in their absence. ◦ To ensure fair judgement, a Captain can only remove the Chief Justice with a majority vote from command. ◦ Warrants and court decisions must be written down and stamped with the notary stamp. Warrants must be approved by the Chief Justice. ◦ Full list of SoP changes can be found here: https://docs.google.com/document/d/12ZKTtzvVWBuC7PuiREL9v7mhVZve11p0-T6MBPpVeGs/edit?usp=sharing • Classy wooden desk timer to help keep trials timely and within limits. > > **TO DO:** Chief Justice > > * [x] Role > * [x] Inventory > * [x] Job Description > * [x] Icon > * [x] Access (CMD/CJ/Sec/Justice*) > * [x] Airlocks > * [x] Spawnpoint > * [x] Closet(just reuse legal w/ a lock) > * [x] Gavel** (proto/sprite/sound) > * [x] Stamp (proto/sprite) > * [x] Drip > > Court Clerk > > * [x] Role > * [x] Inventory > * [x] Job Description > * [x] Icon > * [x] Access (Sec/Justice*) > * [x] Spawnpoint > * [x] Closet(just reuse legal w/ a lock) > * [x] Stamp** (proto/sprite) > * [x] Warrant document > * [x] Drip > > Prosecutor > > * [x] Role > * [x] Inventory > * [x] Job Description > * [x] Icon > * [x] Access (Sec/Justice*) > * [x] Spawnpoint > * [x] Closet(just reuse legal w/ a lock) > * [x] Drip(Can be same as lawyer but should have a unique badge) > > SoP/Guidlines > > * [x] Civil and criminal law-penalties > * [x] Legal mutiny? > * [x] Assigning judges when no judge is present > * [x] Judge is representative of CC. Not necessarily _above_ captain but outside. > * [x] When to appeal to a jury? How to pick a jury? (random would be good) > * [x] Rules for gaining warrants > * [x] Procedure for arresting officer filing criminal charges > * [x] Rules for summoning witnesses > * [ ] Guide/book > > Other > > * [ ] Station Beacons > > ## Notes: > * We might want to consider bringing back brig access for cells to give legal dept sec access and not control over prisoners. > * Mapping would need to provide offices for CJ, CC, and Prosecuter. > * Chief Justice is a rep of CC not necessarily above captain but outside > > ## Why / Balance > The current legal system in-game is built around LRP gameplay, with security handling everything relating to arrests, sentencing, trials, and execution. Additionally, it is near-impossible to find an impartial judge for any court case with the current system. New legal department would guarantee an impartial and available judge (whether it be the Chief Justice or Clerk) for any court case, take pressure off of security to handle things like sentencing and trials. Additionally, there will be more roleplay opportunities for things like civil cases, inter-department disputes, internal affairs, or whatever else you may need legal help with. > > ## Technical details > n/a > > ## Media >   > > * [x] I have added screenshots/videos to this PR showcasing its changes in-game, **or** this PR does not require an in-game showcase > > ## Breaking changes > none that I know of 😓 > **Changelog** 🆑 Leo, Velcroboy, and Timemaster - add: Added The Justice Department >:)
141 lines
5.2 KiB
C#
141 lines
5.2 KiB
C#
using Content.Shared.Access.Systems;
|
|
using Content.Shared.Containers.ItemSlots;
|
|
using Robust.Shared.GameStates;
|
|
using Robust.Shared.Prototypes;
|
|
using Robust.Shared.Serialization;
|
|
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
|
|
using Robust.Shared.Prototypes;
|
|
|
|
namespace Content.Shared.Access.Components;
|
|
|
|
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
|
|
[Access(typeof(SharedIdCardConsoleSystem))]
|
|
public sealed partial class IdCardConsoleComponent : Component
|
|
{
|
|
public const int MaxFullNameLength = 30;
|
|
public const int MaxJobTitleLength = 30;
|
|
|
|
public static string PrivilegedIdCardSlotId = "IdCardConsole-privilegedId";
|
|
public static string TargetIdCardSlotId = "IdCardConsole-targetId";
|
|
|
|
[DataField]
|
|
public ItemSlot PrivilegedIdSlot = new();
|
|
|
|
[DataField]
|
|
public ItemSlot TargetIdSlot = new();
|
|
|
|
[Serializable, NetSerializable]
|
|
public sealed class WriteToTargetIdMessage : BoundUserInterfaceMessage
|
|
{
|
|
public readonly string FullName;
|
|
public readonly string JobTitle;
|
|
public readonly List<ProtoId<AccessLevelPrototype>> AccessList;
|
|
public readonly ProtoId<AccessLevelPrototype> JobPrototype;
|
|
|
|
public WriteToTargetIdMessage(string fullName, string jobTitle, List<ProtoId<AccessLevelPrototype>> accessList, ProtoId<AccessLevelPrototype> jobPrototype)
|
|
{
|
|
FullName = fullName;
|
|
JobTitle = jobTitle;
|
|
AccessList = accessList;
|
|
JobPrototype = jobPrototype;
|
|
}
|
|
}
|
|
|
|
// Put this on shared so we just send the state once in PVS range rather than every time the UI updates.
|
|
|
|
[DataField, AutoNetworkedField]
|
|
public List<ProtoId<AccessLevelPrototype>> AccessLevels = new()
|
|
{
|
|
"Armory",
|
|
"Atmospherics",
|
|
"Bar",
|
|
//"Brig", Delta V: Removed Brig Access
|
|
"Boxer", // DeltaV - Add Boxer access
|
|
"Detective",
|
|
"Captain",
|
|
"Cargo",
|
|
"Chapel",
|
|
"Chemistry",
|
|
"ChiefEngineer",
|
|
"ChiefMedicalOfficer",
|
|
"Clown", // DeltaV - Add Clown access
|
|
"Corpsman", // DeltaV - Add Corpsman access
|
|
"Command",
|
|
"Cryogenics",
|
|
"Engineering",
|
|
"External",
|
|
"HeadOfPersonnel",
|
|
"HeadOfSecurity",
|
|
"Hydroponics",
|
|
"Janitor",
|
|
"Kitchen",
|
|
"Lawyer",
|
|
"Library", // DeltaV - Add Library access
|
|
"Maintenance",
|
|
"Medical",
|
|
"Mime", // DeltaV - Add Mime access
|
|
"Musician", // DeltaV - Add Musician access
|
|
"Paramedic", // DeltaV - Add Paramedic access
|
|
"Psychologist", // DeltaV - Add Psychologist access
|
|
"Quartermaster",
|
|
"Reporter", // DeltaV - Add Reporter access
|
|
"Research",
|
|
"ResearchDirector",
|
|
"Salvage",
|
|
"Security",
|
|
"Service",
|
|
"Theatre",
|
|
"Orders", // DeltaV - Orders, see Resources/Prototypes/DeltaV/Access/cargo.yml
|
|
"Mail", // Nyanotrasen - Mail, see Resources/Prototypes/Nyanotrasen/Access/cargo.yml
|
|
"Mantis", // DeltaV - Psionic Mantis, see Resources/Prototypes/DeltaV/Access/epistemics.yml
|
|
"Zookeeper", // DeltaV - Add Zookeeper access
|
|
"ChiefJustice", // DeltaV - Add Chief Justice access
|
|
"Justice", // DeltaV - Add Justice access
|
|
"Prosecutor", // Delta V - Add Prosecutor access
|
|
};
|
|
|
|
[Serializable, NetSerializable]
|
|
public sealed class IdCardConsoleBoundUserInterfaceState : BoundUserInterfaceState
|
|
{
|
|
public readonly string PrivilegedIdName;
|
|
public readonly bool IsPrivilegedIdPresent;
|
|
public readonly bool IsPrivilegedIdAuthorized;
|
|
public readonly bool IsTargetIdPresent;
|
|
public readonly string TargetIdName;
|
|
public readonly string? TargetIdFullName;
|
|
public readonly string? TargetIdJobTitle;
|
|
public readonly List<ProtoId<AccessLevelPrototype>>? TargetIdAccessList;
|
|
public readonly List<ProtoId<AccessLevelPrototype>>? AllowedModifyAccessList;
|
|
public readonly ProtoId<AccessLevelPrototype> TargetIdJobPrototype;
|
|
|
|
public IdCardConsoleBoundUserInterfaceState(bool isPrivilegedIdPresent,
|
|
bool isPrivilegedIdAuthorized,
|
|
bool isTargetIdPresent,
|
|
string? targetIdFullName,
|
|
string? targetIdJobTitle,
|
|
List<ProtoId<AccessLevelPrototype>>? targetIdAccessList,
|
|
List<ProtoId<AccessLevelPrototype>>? allowedModifyAccessList,
|
|
ProtoId<AccessLevelPrototype> targetIdJobPrototype,
|
|
string privilegedIdName,
|
|
string targetIdName)
|
|
{
|
|
IsPrivilegedIdPresent = isPrivilegedIdPresent;
|
|
IsPrivilegedIdAuthorized = isPrivilegedIdAuthorized;
|
|
IsTargetIdPresent = isTargetIdPresent;
|
|
TargetIdFullName = targetIdFullName;
|
|
TargetIdJobTitle = targetIdJobTitle;
|
|
TargetIdAccessList = targetIdAccessList;
|
|
AllowedModifyAccessList = allowedModifyAccessList;
|
|
TargetIdJobPrototype = targetIdJobPrototype;
|
|
PrivilegedIdName = privilegedIdName;
|
|
TargetIdName = targetIdName;
|
|
}
|
|
}
|
|
|
|
[Serializable, NetSerializable]
|
|
public enum IdCardConsoleUiKey : byte
|
|
{
|
|
Key,
|
|
}
|
|
}
|