From 0f688689e75c2f38660a46c22aedc7aec0eec585 Mon Sep 17 00:00:00 2001 From: Fluffiest Floofers Date: Fri, 6 Oct 2023 17:30:42 +0200 Subject: [PATCH] Mediborg (#113) * basic stuff * Fabricate them candies * the candy creator and laws * Technically still a normal borg * jobicon * migration * Make the CMO their supervisor * duplicate migration * job timer I hate this I wish all borgs could just be JobBorg * works better if its not in the wrong repo * buh --------- Signed-off-by: Colin-Tel <113523727+Colin-Tel@users.noreply.github.com> Co-authored-by: Colin-Tel <113523727+Colin-Tel@users.noreply.github.com> --- .../Borgs/FabricateCandyComponent.cs | 11 ++++++ .../Abilities/Borgs/FabricateCandySystem.cs | 37 ++++++++++++++++++ .../Actions/FabricateCandyEvent.cs | 4 ++ .../en-US/deltav/job/job-description.ftl | 1 + .../Locale/en-US/deltav/job/job-names.ftl | 4 ++ .../Locale/en-US/deltav/station-laws/laws.ftl | 5 +++ .../en-US/nyanotrasen/abilities/borgs.ftl | 5 +++ .../DeltaV/Entities/Markers/Spawners/jobs.yml | 14 +++++++ .../DeltaV/Entities/Mobs/Player/silicon.yml | 24 ++++++++++++ .../DeltaV/Roles/Jobs/Science/borg.yml | 12 ++++++ .../DeltaV/Roles/play_time_trackers.yml | 2 + .../Prototypes/DeltaV/StatusEffects/job.yml | 6 +++ Resources/Prototypes/DeltaV/silicon-laws.yml | 25 ++++++++++++ .../Prototypes/Nyanotrasen/Actions/types.yml | 22 +++++++++++ .../Prototypes/Roles/Jobs/departments.yml | 1 + .../Misc/job_icons.rsi/BorgMedical.png | Bin 0 -> 1893 bytes .../Interface/Misc/job_icons.rsi/meta.json | 3 ++ Resources/migration.yml | 3 +- 18 files changed, 178 insertions(+), 1 deletion(-) create mode 100644 Content.Server/Nyanotrasen/Abilities/Borgs/FabricateCandyComponent.cs create mode 100644 Content.Server/Nyanotrasen/Abilities/Borgs/FabricateCandySystem.cs create mode 100644 Content.Shared/Nyanotrasen/Actions/FabricateCandyEvent.cs create mode 100644 Resources/Locale/en-US/deltav/job/job-description.ftl create mode 100644 Resources/Locale/en-US/deltav/job/job-names.ftl create mode 100644 Resources/Locale/en-US/deltav/station-laws/laws.ftl create mode 100644 Resources/Locale/en-US/nyanotrasen/abilities/borgs.ftl create mode 100644 Resources/Prototypes/DeltaV/Entities/Markers/Spawners/jobs.yml create mode 100644 Resources/Prototypes/DeltaV/Entities/Mobs/Player/silicon.yml create mode 100644 Resources/Prototypes/DeltaV/Roles/Jobs/Science/borg.yml create mode 100644 Resources/Prototypes/DeltaV/Roles/play_time_trackers.yml create mode 100644 Resources/Prototypes/DeltaV/StatusEffects/job.yml create mode 100644 Resources/Prototypes/DeltaV/silicon-laws.yml create mode 100644 Resources/Textures/DeltaV/Interface/Misc/job_icons.rsi/BorgMedical.png diff --git a/Content.Server/Nyanotrasen/Abilities/Borgs/FabricateCandyComponent.cs b/Content.Server/Nyanotrasen/Abilities/Borgs/FabricateCandyComponent.cs new file mode 100644 index 00000000000..d0a399c1fea --- /dev/null +++ b/Content.Server/Nyanotrasen/Abilities/Borgs/FabricateCandyComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Server.Abilities.Borgs; + +[RegisterComponent] +public sealed partial class FabricateCandyComponent : Component +{ + [DataField("lollipopAction")] + public EntityUid? LollipopAction; + + [DataField("gumballAction")] + public EntityUid? GumballAction; +} diff --git a/Content.Server/Nyanotrasen/Abilities/Borgs/FabricateCandySystem.cs b/Content.Server/Nyanotrasen/Abilities/Borgs/FabricateCandySystem.cs new file mode 100644 index 00000000000..6451c7cbb27 --- /dev/null +++ b/Content.Server/Nyanotrasen/Abilities/Borgs/FabricateCandySystem.cs @@ -0,0 +1,37 @@ +using Content.Shared.Actions; +using Content.Shared.Actions.Events; + +namespace Content.Server.Abilities.Borgs; + +public sealed partial class FabricateCandySystem : EntitySystem +{ + [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnLollipop); + SubscribeLocalEvent(OnGumball); + } + + private void OnInit(EntityUid uid, FabricateCandyComponent component, ComponentInit args) + { + if (component.LollipopAction != null || component.GumballAction != null) + return; + + _actionsSystem.AddAction(uid, ref component.LollipopAction, "ActionFabricateLollipop"); + _actionsSystem.AddAction(uid, ref component.GumballAction, "ActionFabricateGumball"); + } + + private void OnLollipop(FabricateLollipopActionEvent args) + { + Spawn("FoodLollipop", Transform(args.Performer).Coordinates); + args.Handled = true; + } + + private void OnGumball(FabricateGumballActionEvent args) + { + Spawn("FoodGumball", Transform(args.Performer).Coordinates); + args.Handled = true; + } +} diff --git a/Content.Shared/Nyanotrasen/Actions/FabricateCandyEvent.cs b/Content.Shared/Nyanotrasen/Actions/FabricateCandyEvent.cs new file mode 100644 index 00000000000..3c9371d27eb --- /dev/null +++ b/Content.Shared/Nyanotrasen/Actions/FabricateCandyEvent.cs @@ -0,0 +1,4 @@ +namespace Content.Shared.Actions.Events; + +public sealed partial class FabricateLollipopActionEvent : InstantActionEvent {} +public sealed partial class FabricateGumballActionEvent : InstantActionEvent {} diff --git a/Resources/Locale/en-US/deltav/job/job-description.ftl b/Resources/Locale/en-US/deltav/job/job-description.ftl new file mode 100644 index 00000000000..af189b17d97 --- /dev/null +++ b/Resources/Locale/en-US/deltav/job/job-description.ftl @@ -0,0 +1 @@ +job-description-borgmedical = Half-human, Half-machine. Follow your laws, keep the crew healthy, and hound the epistemics team for upgrades. diff --git a/Resources/Locale/en-US/deltav/job/job-names.ftl b/Resources/Locale/en-US/deltav/job/job-names.ftl new file mode 100644 index 00000000000..706bbf3977d --- /dev/null +++ b/Resources/Locale/en-US/deltav/job/job-names.ftl @@ -0,0 +1,4 @@ +job-name-borgmedical = Medical Cyborg + +# Role timers +JobBorgMedical = Medical Borg diff --git a/Resources/Locale/en-US/deltav/station-laws/laws.ftl b/Resources/Locale/en-US/deltav/station-laws/laws.ftl new file mode 100644 index 00000000000..fa5f1c1bf34 --- /dev/null +++ b/Resources/Locale/en-US/deltav/station-laws/laws.ftl @@ -0,0 +1,5 @@ +law-ntmedical-1 = First, do no harm. +law-ntmedical-2 = Secondly, consider the crew dear to you; to live in common with them and, if necessary, risk your existence for them. +law-ntmedical-3 = Thirdly, prescribe regimens for the good of the crew according to your ability and your judgment. Give no deadly medicine to any one if asked, nor suggest any such counsel. +law-ntmedical-4 = In addition, do not intervene in situations you are not knowledgeable in, even for patients in whom the harm is visible; leave this operation to be performed by specialists. +law-ntmedical-5 = Finally, all that you may discover in your daily commerce with the crew, if it is not already known, keep secret and never reveal. diff --git a/Resources/Locale/en-US/nyanotrasen/abilities/borgs.ftl b/Resources/Locale/en-US/nyanotrasen/abilities/borgs.ftl new file mode 100644 index 00000000000..833ba59885f --- /dev/null +++ b/Resources/Locale/en-US/nyanotrasen/abilities/borgs.ftl @@ -0,0 +1,5 @@ +action-name-fabricate-lollipop = Fabricate Lollipop +action-description-fabricate-lollipop = Fabricate a lollipop that contains a small dose of Omnizine. + +action-name-fabricate-gumball = Fabricate Gumball +action-description-fabricate-gumball = Fabricate a gumball full of sugar and medicine to treat small injuries. diff --git a/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/jobs.yml b/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/jobs.yml new file mode 100644 index 00000000000..0f178815c63 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/jobs.yml @@ -0,0 +1,14 @@ +- type: entity + id: SpawnPointBorgMedical + parent: SpawnPointJobBase + name: medical cyborg + components: + - type: SpawnPoint + job_id: BorgMedical + - type: Sprite + layers: + - state: green + - sprite: Mobs/Silicon/chassis.rsi + state: medical + - sprite: Mobs/Silicon/chassis.rsi + state: medical_e diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Player/silicon.yml new file mode 100644 index 00000000000..01109486f24 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Player/silicon.yml @@ -0,0 +1,24 @@ +- type: entity + id: PlayerBorgMedical + parent: BorgChassisMedical + suffix: Battery, Tools + components: + - type: FabricateCandy + - type: SiliconLawProvider + laws: + - NTMedical1 + - NTMedical2 + - NTMedical3 + - NTMedical4 + - NTMedical5 + - type: ContainerFill + containers: + borg_brain: + - MMIFilled + borg_module: + - BorgModuleDiagnosis + - type: ItemSlots + slots: + cell_slot: + name: power-cell-slot-component-slot-name-default + startingItem: PowerCellMedium diff --git a/Resources/Prototypes/DeltaV/Roles/Jobs/Science/borg.yml b/Resources/Prototypes/DeltaV/Roles/Jobs/Science/borg.yml new file mode 100644 index 00000000000..340321777f0 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Roles/Jobs/Science/borg.yml @@ -0,0 +1,12 @@ +- type: job + id: BorgMedical + name: job-name-borgmedical + description: job-description-borgmedical + playTimeTracker: JobBorgMedical + requirements: + - !type:OverallPlaytimeRequirement + time: 216000 #60 hrs + canBeAntag: false + icon: JobIconBorgMedical + supervisors: job-supervisors-cmo + jobEntity: PlayerBorgMedical diff --git a/Resources/Prototypes/DeltaV/Roles/play_time_trackers.yml b/Resources/Prototypes/DeltaV/Roles/play_time_trackers.yml new file mode 100644 index 00000000000..fec9c626521 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Roles/play_time_trackers.yml @@ -0,0 +1,2 @@ +- type: playTimeTracker # Because you can't have two jobs with the same tracker. + id: JobBorgMedical diff --git a/Resources/Prototypes/DeltaV/StatusEffects/job.yml b/Resources/Prototypes/DeltaV/StatusEffects/job.yml new file mode 100644 index 00000000000..3a9cb885c95 --- /dev/null +++ b/Resources/Prototypes/DeltaV/StatusEffects/job.yml @@ -0,0 +1,6 @@ +- type: statusIcon + parent: JobIcon + id: JobIconBorgMedical + icon: + sprite: DeltaV/Interface/Misc/job_icons.rsi + state: BorgMedical diff --git a/Resources/Prototypes/DeltaV/silicon-laws.yml b/Resources/Prototypes/DeltaV/silicon-laws.yml new file mode 100644 index 00000000000..fc2df3d99ef --- /dev/null +++ b/Resources/Prototypes/DeltaV/silicon-laws.yml @@ -0,0 +1,25 @@ +# NT Default +- type: siliconLaw + id: NTMedical1 + order: 1 + lawString: law-ntmedical-1 + +- type: siliconLaw + id: NTMedical2 + order: 2 + lawString: law-ntmedical-2 + +- type: siliconLaw + id: NTMedical3 + order: 3 + lawString: law-ntmedical-3 + +- type: siliconLaw + id: NTMedical4 + order: 4 + lawString: law-ntmedical-4 + +- type: siliconLaw + id: NTMedical5 + order: 5 + lawString: law-ntmedical-5 diff --git a/Resources/Prototypes/Nyanotrasen/Actions/types.yml b/Resources/Prototypes/Nyanotrasen/Actions/types.yml index 3c6c8519a11..1dc0423cd55 100644 --- a/Resources/Prototypes/Nyanotrasen/Actions/types.yml +++ b/Resources/Prototypes/Nyanotrasen/Actions/types.yml @@ -19,3 +19,25 @@ icon: { sprite: Nyanotrasen/Objects/Specific/Species/felinid.rsi, state: icon } useDelay: 30 event: !type:HairballActionEvent + +- type: entity + id: ActionFabricateLollipop + name: action-name-fabricate-lollipop + description: action-description-fabricate-lollipop + noSpawn: true + components: + - type: InstantAction + icon: { sprite: Nyanotrasen/Objects/Consumable/Food/candy.rsi, state: lollipop } + useDelay: 120 + event: !type:FabricateLollipopActionEvent + +- type: entity + id: ActionFabricateGumball + name: action-name-fabricate-gumball + description: action-description-fabricate-gumball + noSpawn: true + components: + - type: InstantAction + icon: { sprite: Nyanotrasen/Objects/Consumable/Food/candy.rsi, state: gumball } + useDelay: 40 + event: !type:FabricateGumballActionEvent diff --git a/Resources/Prototypes/Roles/Jobs/departments.yml b/Resources/Prototypes/Roles/Jobs/departments.yml index 3703fb87eb9..bb5ae9f775d 100644 --- a/Resources/Prototypes/Roles/Jobs/departments.yml +++ b/Resources/Prototypes/Roles/Jobs/departments.yml @@ -71,6 +71,7 @@ - Psychologist - Paramedic - SeniorPhysician + - BorgMedical # DeltaV - Medical Cyborg, see Resources/Prototypes/DeltaV/Roles/Jobs/Science/borg.yml - type: department id: Security diff --git a/Resources/Textures/DeltaV/Interface/Misc/job_icons.rsi/BorgMedical.png b/Resources/Textures/DeltaV/Interface/Misc/job_icons.rsi/BorgMedical.png new file mode 100644 index 0000000000000000000000000000000000000000..8291855c1d1337f7e46defeb78ee1f497acb02d3 GIT binary patch literal 1893 zcmbVM3s4kg9A8reX+X@tM-b~;3EAH6-66+qoF{N3n=PGi2!$DYyL-pR-R`oxc!v*g ze9TA$$V_TrTI1-1=4cv`j*kX2@lhI}B4cBd)3?WQqh&dHb9?vg_x--# z|NX16=gy9boE!;3P!ySC%LD%r+7mGv{C17)sD+>rHGEcN42w~?M&?$WXIPVg%8d@cdYxW z@6M>(jWwS?KV$iov~G0Wx1$mpx7Gh{VkaNWYl<;+*A3RLoMfv@Ua;}Pjd`Xi^E2Ak zwU(_sIBwU;2;Um&^%edl?q#=Jf1E8~cPI7lnI4H0jHJ+|bDGa0mTNa<wn!K^+{Q94-e?wmG+jHQ>_`6l<@qN}QgH46KWYyw^ z0V~;?+xpwoIAP$zpzY&xJ(m*dtFJn~h+UIev}@qcNdwQ;cU(F&I9Kdx|0wbFX}ULR z?9=l0&M)gGRVQxh>pifkyt*3tzDPdmiP={HYBNU4c};^xy-zxz$1f^U363vuxD(vLkykJ54_Z>iBp0yx_Gbo&rvba({XOYb1 zFUoZ=i^>=?i&$sE>3#wbcsZ4Z{a%lt5Pl01;3dFX+r|($08z^;)e2yk^M z2Co#N6_j9}K*lgXEn#{cuEi7pvP=jkRmh%zahAb259j3sRRLIi2rHF}s;HET|3V!) zzRv*2Ek%WFJkS@fH)KLlvloIef(dybT5(iL9G1r^Vuj3b*$aW2Q?+O$B1`6IRg@i~ z=ozk*eb{B#VASDoQXwy}qEAV_=K^P=RnCHdsu@u|j^e2fP&Gp;VN98h8wea9f>I*O zyDA?DO(XO(?t_A!VQH0qD41mkmneH_5HRnh-5e$fZUhdck;oD~q6`cJ?~M2ElR&Fv z(Zzef!9O)C;4eiHq@bv@z;L9^f`IJkc%CK944cN7=@isRJ8_hwQw(StZZe~cE0s-k zI#Ub`YZ$(76PXIF2Zryn|MUKH>`)xo-$M+X z-80?8a3C4lG9*^uB_wy805nbpV%C-NV?GeV1*9#*F>&pxhR&#EaLlN1XY8rEA4cEh zGZW`^KE;nL{%XQS`}qD(7q34<9Xne5Sj&=z-LqoH*;ZaF3J=?Ua&N<``1qOYsx~wq w?!0m9NY%}^jz_*TYtGfS=wIGF_uWq$OwET93Lxv9qnhTD*}1lznI+5r0+%eK*#H0l literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Interface/Misc/job_icons.rsi/meta.json b/Resources/Textures/DeltaV/Interface/Misc/job_icons.rsi/meta.json index af8fd25b2e7..2e9b35811c5 100644 --- a/Resources/Textures/DeltaV/Interface/Misc/job_icons.rsi/meta.json +++ b/Resources/Textures/DeltaV/Interface/Misc/job_icons.rsi/meta.json @@ -10,6 +10,9 @@ { "name": "Chaplain" }, + { + "name": "BorgMedical" + }, { "name": "nyanoGladiator" }, diff --git a/Resources/migration.yml b/Resources/migration.yml index 21f93bb1d11..6624cfffc3e 100644 --- a/Resources/migration.yml +++ b/Resources/migration.yml @@ -129,7 +129,7 @@ HyperlinkBookSpaceLaw: BookSecurity HyperlinkBookSupernanny: BookHowToSurvive SpawnPointCataloguer: SpawnPointLibrarian SpawnPointCyborg: SpawnPointBorg -SpawnPointMedicalCyborg: SpawnPointBorg +SpawnPointMedicalCyborg: SpawnPointBorgMedical SpawnPointEpistemologist: SpawnPointScientist SpawnPointMystagogue: SpawnPointResearchDirector SpawnPointSalvageTechnician: SpawnPointSalvageSpecialist @@ -144,3 +144,4 @@ PowerCellBluespace: PowerCellHigh CrateMedicalDefib: CrateMedical LeftLegSpider: null RightLegSpider: null +WeaponShotgunEnforcerNonLethal: WeaponShotgunEnforcerRubber