Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
204b033
Fixed uranium glass missing from locale.
JustOrdinaryPao Feb 4, 2026
8ad0628
Update materials.ftl
JustOrdinaryPao Feb 4, 2026
03d7840
Merge branch 'master' into test
NotActuallyMarty Feb 28, 2026
93b155d
Changing some existing options for Admin Assistant
JustOrdinaryPao Mar 5, 2026
cb4f83b
Merge branch 'test' of https://github.com/JustOrdinaryPao/OmuStation …
JustOrdinaryPao Mar 5, 2026
2afa89e
Merge branch 'AdminAssistant-Overhaul' into test
JustOrdinaryPao Mar 5, 2026
202b859
Add some more already existing options to AA
JustOrdinaryPao Mar 5, 2026
6fcb39b
AA pda sprite
Marikiii Mar 5, 2026
e3b18de
AA PDA resprite
Marikiii Mar 5, 2026
2913835
adjusting for pda resprite
Marikiii Mar 5, 2026
aebff1e
adjusting for pda resprite
Marikiii Mar 5, 2026
3083d36
AA pda sprite
JustOrdinaryPao Mar 5, 2026
cf8b1a8
Admin Assistant PDA Texture Change
JustOrdinaryPao Mar 5, 2026
27093a5
AA coat Sprites; Mapping for coat sprites.
Marikiii Mar 5, 2026
fdd9750
AA jumpsuits added
Marikiii Mar 6, 2026
6c86c85
Added ummmmmmm ummmmm destressium chem for stress ball and added ummm…
Marikiii Mar 6, 2026
7ef2b31
Implemented stress ball and added pain supressant to Destressium.
JustOrdinaryPao Mar 7, 2026
8f1de16
Merge branch 'ProjectOmu:master' into AdminAssistant-Overhaul
JustOrdinaryPao Mar 7, 2026
99b2901
Implemented "bluespace tap"(temporary name - subject to change)
JustOrdinaryPao Mar 7, 2026
eff99fe
just removing some comments
JustOrdinaryPao Mar 8, 2026
082dcb3
meow
Marikiii Mar 8, 2026
e5207b4
Merge branch 'AdminAssistant-Overhaul' of https://github.com/JustOrdi…
Marikiii Mar 8, 2026
15d6f4b
Merge branch 'ProjectOmu:master' into AdminAssistant-Overhaul
JustOrdinaryPao Mar 13, 2026
adc848b
Added complaints box item
JustOrdinaryPao Mar 13, 2026
419a1cc
Bluespace tap fix
JustOrdinaryPao Mar 13, 2026
272daf4
Moved AA items to a single yaml file for optimisation
JustOrdinaryPao Mar 14, 2026
ecdeaaa
Started implementing command bell & its program
JustOrdinaryPao Mar 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,8 @@ public sealed class EnergyReagentDispenserSystem : EntitySystem
[Dependency] private readonly UserInterfaceSystem _userInterfaceSystem = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly BatterySystem _battery = default!;
[Dependency] private readonly Content.Server.PowerCell.PowerCellSystem _powerCellSystem = default!;


public override void Initialize()
{
Expand Down Expand Up @@ -108,7 +110,12 @@ private void UpdateUiState(Entity<EnergyReagentDispenserComponent> reagentDispen
var idleUse = 0f;
var hasPower = false;

if (TryComp<BatteryComponent>(reagentDispenser, out var battery))
if (_powerCellSystem.TryGetBatteryFromSlot(reagentDispenser.Owner, out var slottedBatteryEnt, out var slottedBattery)) // Omu
{
batteryCharge = slottedBattery.CurrentCharge; // Omu
batteryMaxCharge = slottedBattery.MaxCharge; // Also omu
}
else if (TryComp<BatteryComponent>(reagentDispenser, out var battery))
{
batteryCharge = battery.CurrentCharge;
batteryMaxCharge = battery.MaxCharge;
Expand Down Expand Up @@ -193,24 +200,39 @@ private void OnDispenseReagentMessage(Entity<EnergyReagentDispenserComponent> re
|| !_solutionContainerSystem.TryGetFitsInDispenser(outputContainer.Value, out var solution, out _))
return;

if (!TryComp<BatteryComponent>(reagentDispenser, out var battery))
return;
TryComp<BatteryComponent>(reagentDispenser, out var battery); // Omu

var amount = (int) reagentDispenser.Comp.DispenseAmount;
var powerRequired = GetPowerCostForReagent(message.ReagentId, amount, reagentDispenser.Comp);

if (battery.CurrentCharge < powerRequired)
// Omu start
if (HasComp<Content.Shared.PowerCell.Components.PowerCellSlotComponent>(reagentDispenser))
{
_audioSystem.PlayPvs(reagentDispenser.Comp.PowerSound, reagentDispenser, AudioParams.Default.WithVolume(-2f));
return;
if (!_powerCellSystem.TryUseCharge(reagentDispenser.Owner, powerRequired))
{
_audioSystem.PlayPvs(reagentDispenser.Comp.PowerSound, reagentDispenser, AudioParams.Default.WithVolume(-2f));
return;
}
} // Omu end
else
{
if (battery == null || battery.CurrentCharge < powerRequired)
{
_audioSystem.PlayPvs(reagentDispenser.Comp.PowerSound, reagentDispenser, AudioParams.Default.WithVolume(-2f));
return;
}
}


var sol = new Solution(message.ReagentId, amount);
if (!_solutionContainerSystem.TryAddSolution(solution.Value, sol))
return;

_battery.SetCharge(reagentDispenser.Owner, battery.CurrentCharge - powerRequired);
if (!_powerCellSystem.TryGetBatteryFromSlot(reagentDispenser.Owner, out _, out _)) // Omu
{
if (battery != null)
_battery.SetCharge(reagentDispenser.Owner, battery.CurrentCharge - powerRequired);
}
ClickSound(reagentDispenser);
UpdateUiState(reagentDispenser);
}
Expand All @@ -224,7 +246,17 @@ private void OnClearContainerSolutionMessage(Entity<EnergyReagentDispenserCompon

var refundedPower = soln.Sum(reagent => GetPowerCostForReagent(reagent.Reagent.Prototype, (int) reagent.Quantity, reagentDispenser));
if (refundedPower > 0)
_battery.AddCharge(reagentDispenser, refundedPower);
{
// Omu start
if (_powerCellSystem.TryGetBatteryFromSlot(reagentDispenser.Owner, out var batteryEnt, out var batteryComp))
{
_battery.AddCharge(batteryEnt.Value, refundedPower, batteryComp);
} // Omu end
else
{
_battery.AddCharge(reagentDispenser, refundedPower);
}
}

_solutionContainerSystem.RemoveAllSolution(solution.Value);
UpdateUiState(reagentDispenser);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Content.Server.CartridgeLoader.Cartridges;

[RegisterComponent] public sealed partial class CommandMeetingsComponent : Component
{
}
34 changes: 34 additions & 0 deletions Content.Server/CartridgeLoader/Cartridges/CommandMeetingsSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
using Content.Shared.CartridgeLoader;
using Content.Shared.CartridgeLoader.Cartridges;

namespace Content.Server.CartridgeLoader.Cartridges;

public sealed class CommandMeetingsSystem : EntitySystem
{
[Dependency] private readonly CartridgeLoaderSystem _cartridgeLoader = default!;

public override void Initialize()
{
base.Initialize();

SubscribeLocalEvent<CommandMeetingsComponent, CartridgeMessageEvent>(OnUiMessage);
SubscribeLocalEvent<CommandMeetingsComponent, CartridgeUiReadyEvent>(OnUiReady);
}

private void OnUiMessage(EntityUid uid, CommandMeetingsComponent component, CartridgeMessageEvent args)
{
// Currently this program does nothing, just update the UI when messages are received.
UpdateUiState(uid, GetEntity(args.LoaderUid), component);
}

private void OnUiReady(EntityUid uid, CommandMeetingsComponent component, CartridgeUiReadyEvent args)
{
UpdateUiState(uid, args.Loader, component);
}

private void UpdateUiState(EntityUid uid, EntityUid loaderUid, CommandMeetingsComponent? component = null)
{
// Send an empty UI state for now.
_cartridgeLoader.UpdateCartridgeUiState(loaderUid, new CommandMeetingsUiState());
}
}
11 changes: 11 additions & 0 deletions Content.Server/Complaints/Components/ComplaintsPaperComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// SPDX-License-Identifier: AGPL-3.0-or-later

using Robust.Shared.GameObjects;

namespace Content.Server.Complaints.Components
{
[RegisterComponent]
public sealed partial class ComplaintsPaperComponent : Component
{
}
}
30 changes: 30 additions & 0 deletions Content.Server/Complaints/Systems/ComplaintsPaperSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// SPDX-License-Identifier: AGPL-3.0-or-later

using Content.Shared.Paper;
using Content.Server.Complaints.Components;
using Robust.Shared.Localization;
using Robust.Shared.GameObjects;
using JetBrains.Annotations;

namespace Content.Server.Complaints.Systems
{
[UsedImplicitly]
public sealed class ComplaintsPaperSystem : EntitySystem
{
[Dependency] private readonly PaperSystem _paper = default!;

public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<ComplaintsPaperComponent, MapInitEvent>(OnMapInit);
}

private void OnMapInit(EntityUid uid, ComplaintsPaperComponent comp, MapInitEvent args)
{
if (TryComp<PaperComponent>(uid, out var paper))
{
_paper.SetContent((uid, paper), Loc.GetString("complaints-paper-content"));
}
}
}
}
39 changes: 39 additions & 0 deletions Content.Server/Fax/FaxSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -460,6 +460,45 @@ private void OnFileButtonPressed(EntityUid uid, FaxMachineComponent component, F

private void OnCopyButtonPressed(EntityUid uid, FaxMachineComponent component, FaxCopyMessage args)
{
// Omu start
if (TryComp<MetaDataComponent>(uid, out var meta) && meta.EntityPrototype?.ID == "ComplaintsBoxInput")
{
// Try to get the template slot
if (_itemSlotsSystem.TryGetSlot(uid, "Template", out var templateSlot) && templateSlot.Item.HasValue)
{
var templateEntity = templateSlot.Item.Value;

if (HasComp<MobStateComponent>(templateEntity))
_faxecute.Faxecute(uid, component);
else if (TryComp<FaxableObjectComponent>(templateEntity, out var faxcomp) && !faxcomp.Copyable)
_explosion.QueueExplosion(uid, "Default", 20, 65, 3.4f, 1f, 0, false, uid);
else
{
// Build a printout from the template entity
if (TryComp(templateEntity, out MetaDataComponent? metadata) && TryComp<PaperComponent>(templateEntity, out var paper))
{
TryComp<LabelComponent>(templateEntity, out var labelComponent);
TryComp<NameModifierComponent>(templateEntity, out var nameMod);

var printout = new FaxPrintout(paper.Content,
nameMod?.BaseName ?? metadata.EntityName,
labelComponent?.CurrentLabel,
metadata.EntityPrototype?.ID ?? component.PrintPaperId,
paper.StampState,
paper.StampedBy,
paper.EditingDisabled);

component.PrintingQueue.Enqueue(printout);
component.SendTimeoutRemaining += component.SendTimeout;
UpdateUserInterface(uid, component);
}
}

return;
}
}
// Omu end (needed for AA complaints box having more than one paper tray)

if (HasComp<MobStateComponent>(component.PaperSlot.Item))
_faxecute.Faxecute(uid, component); // when button pressed it will hurt the mob.
else if (component.PaperSlot.Item != null && TryComp<FaxableObjectComponent>(component.PaperSlot.Item, out var faxcomp) && !faxcomp.Copyable) // goobstation
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Content.Shared.CartridgeLoader.Cartridges;

public sealed class CommandMeetingsUiState : BoundUserInterfaceState
{
}
2 changes: 2 additions & 0 deletions Resources/Locale/en-US/_DV/preferences/loadout-groups.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ loadout-group-admin-assistant-jumpsuit = Administrative Assistant jumpsuit
loadout-group-admin-assistant-outerclothing = Administrative Assistant outer clothing
loadout-group-admin-assistant-headset = Administrative Assistant headset
loadout-group-admin-assistant-shoes = Administrative Assistant shoes
loadout-group-admin-assistant-belt = Administrative Assistant belt
loadout-group-admin-assistant-gloves = Administrative Assistant gloves
loadout-group-admin-assistant-eyewear = Administrative Assistant eyewear

loadout-group-salvage-specialist-jumpsuit = Salvage Specialist jumpsuit
Original file line number Diff line number Diff line change
Expand Up @@ -251,3 +251,24 @@ selectable-set-research-director-modsuit-desc =
A modular hardsuit armored perfectly to turn you into a research tank,
not even the most dangerous of experiments will harm you in this,
and the worst of assistants will think twice before breaking in sci.

selectable-set-aa-hospitality-name = Hospitality and Wellbeing kit
selectable-set-aa-hospitality-desc =
A kit made specifically for the AA to provide bartending, food and other
wellbeing services to command, including unique bluespace bartending tools,
a napkin box, a food tray and the famous, iconic AA Bluespace coffee mug.

selectable-set-aa-bureaucracy-name = Bureaucracy and Paperwork kit
selectable-set-aa-bureaucracy-desc =
Packed for the most difficult of writing and paperwork, this set includes
approved and denied stamps, a confidential stamp, a briefcase of holding and
an executive stress ball, for when the shift is just too much.

selectable-set-aa-records-name = Crew and Meeting set
selectable-set-aa-records-desc =
Includes a one-of-a-kind Command bell, which you can use to summon command
for a meeting, a complaint box for the crew to drop in opinions about departments
and their heads, which will totally not be ignored, a meeting loudspeaker, and a
gavel you can use to demand order in meetings or court.


17 changes: 17 additions & 0 deletions Resources/Locale/en-US/_Omu/documents/complaints.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
complaints-paper-content = [color=#1b67a5]█▄ █ ▀█▀ [head=2]Formal Complaint Form[/head] █ ▀█      █     [/color]
────────────────────────────────────
Your Name: [color=#002AAF]Name here[/color] [mono] ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾[/mono]
Your Current Position: [color=#002AAF]Job here[/color] [mono] ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾[/mono]
What Are You Complaining About:
\[ ] A Person [ ] A Department [ ] Station Facilities

Complaint Subject's Name: [color=#002AAF]Name here[/color] [mono] ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾[/mono]
What is the Department/Position the Person/Department currently works in: [color=#002AAF]Department here[/color] [mono]‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾[/mono]
Please provide a detailed description of the misconduct you believe the subject of this complaint has demonstrated: [color=#002AAF]Description here[/color]




────────────────────────────────────[italic]Once you have finished filling out this form, please hand it to the Administrative Assistant to be filed.[/italic]

# This thing wont FUCKING FORMAT CORRECTLY so fix it if you want im too lazy
3 changes: 3 additions & 0 deletions Resources/Locale/en-US/cartridge-loader/cartridges.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -114,3 +114,6 @@ wanted-list-status-label = [color=darkgray]status:[/color] {$status ->
wanted-list-history-table-time-col = Time
wanted-list-history-table-reason-col = Crime
wanted-list-history-table-initiator-col = Initiator

# Omu - Command Meetings
command-meetings-program-name = Command Meetings
3 changes: 3 additions & 0 deletions Resources/Locale/en-US/reagents/meta/medicine.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -185,3 +185,6 @@ reagent-desc-potassium-iodide = Will reduce the damaging effects of radiation by

reagent-name-haloperidol = haloperidol
reagent-desc-haloperidol = Removes most stimulating and hallucinogenic drugs. Reduces druggy effects and jitteriness. Causes drowsiness.

reagent-name-destressium = destressium
reagent-desc-destressium = Chemical provided by the AA's stress ball through bluespace technology to heal slight brute and burn damage, aswell as suppressing pain. Cannot be made in the lab.
11 changes: 11 additions & 0 deletions Resources/Prototypes/Entities/Clothing/Neck/cloaks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,17 @@
- type: StealTarget
stealGroup: HeadCloak

- type: entity
parent: [ClothingNeckBase, BaseCommandContraband]
id: ClothingNeckCloakAA
name: administrative assistant's cloak
description: Contrary to popular belief, the gold part is in fact just cheap golden paint and not real gold.
components:
- type: Sprite
sprite: Clothing/Neck/Cloaks/aa.rsi
- type: StealTarget
stealGroup: HeadCloak

- type: entity
parent: ClothingNeckBase
id: ClothingNeckCloakAdmin
Expand Down
22 changes: 22 additions & 0 deletions Resources/Prototypes/Entities/Clothing/OuterClothing/coats.yml
Original file line number Diff line number Diff line change
Expand Up @@ -723,6 +723,28 @@
- type: Clothing
sprite: Clothing/OuterClothing/Coats/space_asshole.rsi

- type: entity
parent: ClothingOuterStorageBase
id: ClothingOuterCoatAASeasoned
name: administrative assistant's seasoned trenchcoat
description: Belongs to an AA who has seen plenty of paperwork and coffee. It's been visibly washed many times, due to the amount of coffee spills it's been through, but it looks posh regardless. Smells like a brand new book.
components:
- type: Sprite
sprite: Clothing/OuterClothing/Coats/aa_coat_seasoned.rsi
- type: Clothing
sprite: Clothing/OuterClothing/Coats/aa_coat_seasoned.rsi

- type: entity
parent: ClothingOuterStorageBase
id: ClothingOuterCoatAA
name: administrative assistant's trenchcoat
description: The Administrative Assistant's coat. The inside of the coat has been scribbled on and filled with sticky notes, but luckily that can't be seen while worn. Smells like coffee.
components:
- type: Sprite
sprite: Clothing/OuterClothing/Coats/aa_coat.rsi
- type: Clothing
sprite: Clothing/OuterClothing/Coats/aa_coat.rsi

- type: entity
parent: ClothingOuterStorageFoldableBase
id: ClothingOuterCoatExpensive
Expand Down
Loading
Loading