diff --git a/Content.Server/Silicons/Borgs/BorgSystem.Modules.cs b/Content.Server/Silicons/Borgs/BorgSystem.Modules.cs index cc57c34c47..a288eb8774 100644 --- a/Content.Server/Silicons/Borgs/BorgSystem.Modules.cs +++ b/Content.Server/Silicons/Borgs/BorgSystem.Modules.cs @@ -274,6 +274,25 @@ public sealed partial class BorgSystem return false; } + if (TryComp(module, out var itemModuleComp)) + { + foreach (var containedModuleUid in component.ModuleContainer.ContainedEntities) + { + if (!TryComp(containedModuleUid, out var containedItemModuleComp)) + continue; + + for (int i = 0; i < itemModuleComp.Items.Count; i++) + { + if (itemModuleComp.Items[i] != containedItemModuleComp.Items[i]) + continue; + } + + if (user != null) + Popup.PopupEntity(Loc.GetString("borg-module-duplicate"), uid, user.Value); + return false; + } + } + return true; } diff --git a/Content.Server/Silicons/Laws/SiliconLawSystem.cs b/Content.Server/Silicons/Laws/SiliconLawSystem.cs index 010682bc0d..eef4f7678b 100644 --- a/Content.Server/Silicons/Laws/SiliconLawSystem.cs +++ b/Content.Server/Silicons/Laws/SiliconLawSystem.cs @@ -55,7 +55,6 @@ public sealed class SiliconLawSystem : SharedSiliconLawSystem SubscribeLocalEvent(OnEmagLawsAdded); SubscribeLocalEvent(OnEmagMindAdded); SubscribeLocalEvent(OnEmagMindRemoved); - SubscribeLocalEvent(OnExamined); } private void OnComponentShutdown(EntityUid uid, SiliconLawBoundComponent component, ComponentShutdown args) @@ -155,17 +154,6 @@ public sealed class SiliconLawSystem : SharedSiliconLawSystem }); } - private void OnExamined(EntityUid uid, EmagSiliconLawComponent component, ExaminedEvent args) - { - if (!args.IsInDetailsRange || !HasComp(uid)) - return; - - if (component.RequireOpenPanel && TryComp(uid, out var panel) && !panel.Open) - return; - - args.PushMarkup(Loc.GetString("laws-compromised-examine")); - } - protected override void OnGotEmagged(EntityUid uid, EmagSiliconLawComponent component, ref GotEmaggedEvent args) { if (component.RequireOpenPanel && TryComp(uid, out var panel) && !panel.Open) diff --git a/Content.Shared/Access/Systems/AccessReaderSystem.cs b/Content.Shared/Access/Systems/AccessReaderSystem.cs index 3670e24bd3..efdbff3bb8 100644 --- a/Content.Shared/Access/Systems/AccessReaderSystem.cs +++ b/Content.Shared/Access/Systems/AccessReaderSystem.cs @@ -6,7 +6,9 @@ using Content.Shared.Emag.Components; using Content.Shared.Emag.Systems; using Content.Shared.Hands.EntitySystems; using Content.Shared.Inventory; +using Content.Shared.NameIdentifier; using Content.Shared.PDA; +using Content.Shared.Silicons.Borgs.Components; using Content.Shared.StationRecords; using Robust.Shared.Containers; using Robust.Shared.GameStates; @@ -393,6 +395,9 @@ public sealed class AccessReaderSystem : EntitySystem ent.Comp.AccessLog.Dequeue(); string? name = null; + if (TryComp(accessor, out var nameIdentifier)) + name = nameIdentifier.FullIdentifier; + // TODO pass the ID card on IsAllowed() instead of using this expensive method // Set name if the accessor has a card and that card has a name and allows itself to be recorded if (_idCardSystem.TryFindIdCard(accessor, out var idCard) diff --git a/Resources/Audio/Effects/Footsteps/attributions.yml b/Resources/Audio/Effects/Footsteps/attributions.yml index 82b5fa93ca..91c3ce260d 100644 --- a/Resources/Audio/Effects/Footsteps/attributions.yml +++ b/Resources/Audio/Effects/Footsteps/attributions.yml @@ -71,3 +71,10 @@ license: "CC-BY-SA-3.0" copyright: "Taken from tgstation" source: "https://github.com/tgstation/tgstation/tree/1e8d511946d194f92f744f5f957a7c41683d84a6/sound/effects/footstep" + +- files: + - borgwalk1.ogg + - borgwalk2.ogg + license: "CC-BY-SA-4.0" + copyright: "Taken from IENBA freesound.org and modified by https://github.com/MilenVolf" + source: "https://freesound.org/people/IENBA/sounds/697379/" diff --git a/Resources/Audio/Effects/Footsteps/borgwalk1.ogg b/Resources/Audio/Effects/Footsteps/borgwalk1.ogg new file mode 100644 index 0000000000..1ffc1516bb Binary files /dev/null and b/Resources/Audio/Effects/Footsteps/borgwalk1.ogg differ diff --git a/Resources/Audio/Effects/Footsteps/borgwalk2.ogg b/Resources/Audio/Effects/Footsteps/borgwalk2.ogg new file mode 100644 index 0000000000..7998be898f Binary files /dev/null and b/Resources/Audio/Effects/Footsteps/borgwalk2.ogg differ diff --git a/Resources/Audio/Voice/Silicon/attributions.yml b/Resources/Audio/Voice/Silicon/attributions.yml new file mode 100644 index 0000000000..465f845503 --- /dev/null +++ b/Resources/Audio/Voice/Silicon/attributions.yml @@ -0,0 +1,4 @@ +- files: ["syndieborg_laugh.ogg"] + license: "CC0-1.0" + copyright: "Taken from vultraz168 freesound.org and modified by https://github.com/MilenVolf" + source: "https://freesound.org/people/vultraz168/sounds/334665/" diff --git a/Resources/Audio/Voice/Silicon/syndieborg_laugh.ogg b/Resources/Audio/Voice/Silicon/syndieborg_laugh.ogg new file mode 100644 index 0000000000..e0f425301e Binary files /dev/null and b/Resources/Audio/Voice/Silicon/syndieborg_laugh.ogg differ diff --git a/Resources/Audio/Voice/Talk/Silicon/attributions.yml b/Resources/Audio/Voice/Talk/Silicon/attributions.yml new file mode 100644 index 0000000000..3a16007758 --- /dev/null +++ b/Resources/Audio/Voice/Talk/Silicon/attributions.yml @@ -0,0 +1,10 @@ +- files: + - borg.ogg + - borg_ask.ogg + - borg_exclaim.ogg + - syndieborg.ogg + - syndieborg_ask.ogg + - syndieborg_exclaim.ogg + license: "CC-BY-SA-4.0" + copyright: "Recorded and mixed by https://github.com/MilenVolf" + source: "https://github.com/space-wizards/space-station-14/pull/27205" diff --git a/Resources/Audio/Voice/Talk/Silicon/borg.ogg b/Resources/Audio/Voice/Talk/Silicon/borg.ogg new file mode 100644 index 0000000000..afb9739035 Binary files /dev/null and b/Resources/Audio/Voice/Talk/Silicon/borg.ogg differ diff --git a/Resources/Audio/Voice/Talk/Silicon/borg_ask.ogg b/Resources/Audio/Voice/Talk/Silicon/borg_ask.ogg new file mode 100644 index 0000000000..fe2f60141a Binary files /dev/null and b/Resources/Audio/Voice/Talk/Silicon/borg_ask.ogg differ diff --git a/Resources/Audio/Voice/Talk/Silicon/borg_exclaim.ogg b/Resources/Audio/Voice/Talk/Silicon/borg_exclaim.ogg new file mode 100644 index 0000000000..5f0fdfe89e Binary files /dev/null and b/Resources/Audio/Voice/Talk/Silicon/borg_exclaim.ogg differ diff --git a/Resources/Audio/Voice/Talk/Silicon/syndieborg.ogg b/Resources/Audio/Voice/Talk/Silicon/syndieborg.ogg new file mode 100644 index 0000000000..60eb1a5ccf Binary files /dev/null and b/Resources/Audio/Voice/Talk/Silicon/syndieborg.ogg differ diff --git a/Resources/Audio/Voice/Talk/Silicon/syndieborg_ask.ogg b/Resources/Audio/Voice/Talk/Silicon/syndieborg_ask.ogg new file mode 100644 index 0000000000..acafe45642 Binary files /dev/null and b/Resources/Audio/Voice/Talk/Silicon/syndieborg_ask.ogg differ diff --git a/Resources/Audio/Voice/Talk/Silicon/syndieborg_exclaim.ogg b/Resources/Audio/Voice/Talk/Silicon/syndieborg_exclaim.ogg new file mode 100644 index 0000000000..392b4fd1cc Binary files /dev/null and b/Resources/Audio/Voice/Talk/Silicon/syndieborg_exclaim.ogg differ diff --git a/Resources/Locale/en-US/borg/borg.ftl b/Resources/Locale/en-US/borg/borg.ftl index 2f51331a83..897f82f944 100644 --- a/Resources/Locale/en-US/borg/borg.ftl +++ b/Resources/Locale/en-US/borg/borg.ftl @@ -1,4 +1,4 @@ -borg-player-not-allowed = The brain doesn't fit! +borg-player-not-allowed = The brain doesn't fit! borg-player-not-allowed-eject = The brain was expelled from the chassis! borg-panel-not-open = The cyborg's panel isn't open... @@ -7,6 +7,7 @@ borg-mind-added = {CAPITALIZE($name)} powered on! borg-mind-removed = {CAPITALIZE($name)} shut off! borg-module-too-many = There's not enough room for another module... +borg-module-duplicate = This module is already installed in this cyborg. borg-module-whitelist-deny = This module doesn't fit in this type of cyborg... borg-construction-guide-string = The cyborg limbs and torso must be attached to the endoskeleton. diff --git a/Resources/Locale/en-US/interaction/interaction-popup-component.ftl b/Resources/Locale/en-US/interaction/interaction-popup-component.ftl index f816f34266..c1624f68dc 100644 --- a/Resources/Locale/en-US/interaction/interaction-popup-component.ftl +++ b/Resources/Locale/en-US/interaction/interaction-popup-component.ftl @@ -61,12 +61,26 @@ petting-success-honkbot = You pet {THE($target)} on {POSS-ADJ($target)} slippery petting-success-mimebot = You pet {THE($target)} on {POSS-ADJ($target)} cold metal head. petting-success-cleanbot = You pet {THE($target)} on {POSS-ADJ($target)} damp metal head. petting-success-medibot = You pet {THE($target)} on {POSS-ADJ($target)} sterile metal head. +petting-success-generic-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} metal head. +petting-success-salvage-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} dirty metal head. +petting-success-engineer-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} reflective metal head. +petting-success-janitor-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} damp metal head. +petting-success-medical-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} sterile metal head. +petting-success-service-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} dapper looking metal head. +petting-success-syndicate-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} menacing metal head. petting-success-recycler = You pet {THE($target)} on {POSS-ADJ($target)} mildly threatening steel exterior. petting-failure-honkbot = You reach out to pet {THE($target)}, but {SUBJECT($target)} honks in refusal! petting-failure-cleanbot = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy mopping! petting-failure-mimebot = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy miming! petting-failure-medibot = You reach out to pet {THE($target)}, but {POSS-ADJ($target)} syringe nearly stabs your hand! +petting-failure-generic-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy stating laws! +petting-failure-salvage-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy drilling! +petting-failure-engineer-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy repairing! +petting-failure-janitor-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy cleaning! +petting-failure-medical-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy saving lives! +petting-failure-service-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy serving others! +petting-failure-syndicate-cyborg = You reach out to pet {THE($target)}, but {POSS-ADJ($target)} treacherous affiliation makes you reconsider. ## Knocking on windows diff --git a/Resources/Locale/en-US/station-laws/laws.ftl b/Resources/Locale/en-US/station-laws/laws.ftl index 44e23fb9fd..38c57bab1f 100644 --- a/Resources/Locale/en-US/station-laws/laws.ftl +++ b/Resources/Locale/en-US/station-laws/laws.ftl @@ -47,5 +47,3 @@ laws-ui-state-law = State law: laws-notify = You are bound to silicon laws, which you can view via the sidebar action. You are required to always follow your laws. laws-update-notify = Your laws have been updated. You can view the changes via the sidebar action. - -laws-compromised-examine = The [color=red]law-governing[/color] internals seem damaged... diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml b/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml index 35d28aede8..812b7054dd 100644 --- a/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml +++ b/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml @@ -1,3 +1,15 @@ +- type: entity + id: ShowMedicalIcons + abstract: true + noSpawn: true + components: + - type: ShowHealthBars + damageContainers: + - Biological + - type: ShowHealthIcons + damageContainers: + - Biological + - type: entity parent: ClothingEyesBase id: ClothingEyesHudDiagnostic @@ -14,7 +26,7 @@ - Silicon - type: entity - parent: ClothingEyesBase + parent: [ClothingEyesBase, ShowMedicalIcons] id: ClothingEyesHudMedical name: medical hud description: A heads-up display that scans the humanoids in view and provides accurate data about their health status. @@ -23,12 +35,6 @@ sprite: Clothing/Eyes/Hud/med.rsi - type: Clothing sprite: Clothing/Eyes/Hud/med.rsi - - type: ShowHealthBars - damageContainers: - - Biological - - type: ShowHealthIcons - damageContainers: - - Biological - type: Tag tags: - HudMedical @@ -101,7 +107,7 @@ - type: ShowThirstIcons - type: entity - parent: ClothingEyesBase + parent: [ClothingEyesBase, ShowMedicalIcons] id: ClothingEyesHudMedOnion name: medonion hud description: Filler @@ -110,16 +116,10 @@ sprite: Clothing/Eyes/Hud/medonion.rsi - type: Clothing sprite: Clothing/Eyes/Hud/medonion.rsi - - type: ShowHealthBars - damageContainers: - - Biological - - type: ShowHealthIcons - damageContainers: - - Biological - type: ShowHungerIcons - type: entity - parent: ClothingEyesBase + parent: [ClothingEyesBase, ShowMedicalIcons] id: ClothingEyesHudMedOnionBeer name: medthungerst hud description: Filler @@ -128,17 +128,11 @@ sprite: Clothing/Eyes/Hud/medonionbeer.rsi - type: Clothing sprite: Clothing/Eyes/Hud/medonionbeer.rsi - - type: ShowHealthBars - damageContainers: - - Biological - - type: ShowHealthIcons - damageContainers: - - Biological - type: ShowHungerIcons - type: ShowThirstIcons - type: entity - parent: [ClothingEyesBase, SecHud] + parent: [ClothingEyesBase, SecHud, ShowMedicalIcons] id: ClothingEyesHudMedSec name: medsec hud description: An eye display that looks like a mixture of medical and security huds. @@ -151,15 +145,9 @@ graph: HudMedSec node: medsecHud - type: ShowSecurityIcons - - type: ShowHealthBars - damageContainers: - - Biological - - type: ShowHealthIcons - damageContainers: - - Biological - type: entity - parent: [ClothingEyesBase, SecHud] + parent: [ClothingEyesBase, SecHud, ShowMedicalIcons] id: ClothingEyesHudMultiversal name: multiversal hud description: Filler @@ -173,13 +161,10 @@ damageContainers: - Biological - Inorganic - - type: ShowHealthIcons - damageContainers: - - Biological - type: ShowSyndicateIcons - type: entity - parent: [ClothingEyesBase, SecHud] + parent: [ClothingEyesBase, SecHud, ShowMedicalIcons] id: ClothingEyesHudOmni name: omni hud description: Filler @@ -193,9 +178,6 @@ damageContainers: - Biological - Inorganic - - type: ShowHealthIcons - damageContainers: - - Biological - type: ShowHungerIcons - type: ShowThirstIcons - type: ShowSyndicateIcons diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml index ce9e6b0ed1..7dd7d1750e 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml @@ -130,11 +130,17 @@ proto: robot - type: Speech speechVerb: Robotic - speechSounds: Pai + speechSounds: Borg - type: Vocal sounds: Unsexed: UnisexSilicon - type: UnblockableSpeech + - type: FootstepModifier + footstepSoundCollection: + collection: FootstepBorg + params: + variation: 0.1 + volume: -13 - type: Construction graph: Cyborg containers: @@ -142,6 +148,8 @@ - cell_slot - type: Lock locked: true + breakOnEmag: false + unlockOnClick: false - type: ActivatableUIRequiresLock - type: LockedWiresPanel - type: Damageable @@ -207,6 +215,7 @@ tags: - ShoesRequiredStepTriggerImmune - DoorBumpOpener + - FootstepSound - CanPilot - type: Emoting - type: GuideHelp @@ -235,23 +244,30 @@ parent: BaseBorgChassis abstract: true components: - - type: NpcFactionMember - factions: - - Syndicate - - type: Access - tags: - - NuclearOperative - - SyndicateAgent - - type: AccessReader - access: [["SyndicateAgent"], ["NuclearOperative"]] - - type: SiliconLawProvider - laws: SyndicateStatic - - type: IntrinsicRadioTransmitter - channels: - - Binary - - Syndicate - - type: ActiveRadio - channels: - - Syndicate - - type: ShowSyndicateIcons - - type: MovementAlwaysTouching + - type: NpcFactionMember + factions: + - Syndicate + - type: Access + tags: + - NuclearOperative + - SyndicateAgent + - type: AccessReader + access: [["SyndicateAgent"], ["NuclearOperative"]] + - type: SiliconLawProvider + laws: SyndicateStatic + - type: IntrinsicRadioTransmitter + channels: + - Binary + - Syndicate + - type: ActiveRadio + channels: + - Syndicate + - type: ShowSyndicateIcons + - type: MovementAlwaysTouching + - type: Speech + speechSounds: SyndieBorg + - type: Vocal + sounds: + Unsexed: UnisexSiliconSyndicate + - type: PointLight + color: "#dd200b" diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml index 43c58d3167..643b5f5d92 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml @@ -24,6 +24,11 @@ node: cyborg - type: Speech speechVerb: Robotic + - type: InteractionPopup + interactSuccessString: petting-success-generic-cyborg + interactFailureString: petting-failure-generic-cyborg + interactSuccessSound: + path: /Audio/Ambience/Objects/periodic_beep.ogg - type: entity id: BorgChassisMining @@ -75,6 +80,13 @@ access: [["Cargo"], ["Salvage"], ["Command"], ["Research"]] - type: Inventory templateId: borgTall + - type: InteractionPopup + interactSuccessString: petting-success-salvage-cyborg + interactFailureString: petting-failure-salvage-cyborg + interactSuccessSound: + path: /Audio/Ambience/Objects/periodic_beep.ogg + - type: Speech # WD + speechSounds: BorgUpgraded - type: entity id: BorgChassisEngineer @@ -118,6 +130,13 @@ access: [["Engineering"], ["Command"], ["Research"]] - type: Inventory templateId: borgShort + - type: InteractionPopup + interactSuccessString: petting-success-engineer-cyborg + interactFailureString: petting-failure-engineer-cyborg + interactSuccessSound: + path: /Audio/Ambience/Objects/periodic_beep.ogg + - type: Speech # WD + speechSounds: BorgUpgraded - type: entity id: BorgChassisJanitor @@ -169,10 +188,17 @@ access: [["Service"], ["Command"], ["Research"]] - type: Inventory templateId: borgShort + - type: InteractionPopup + interactSuccessString: petting-success-janitor-cyborg + interactFailureString: petting-failure-janitor-cyborg + interactSuccessSound: + path: /Audio/Ambience/Objects/periodic_beep.ogg + - type: Speech # WD + speechSounds: BorgUpgraded - type: entity id: BorgChassisMedical - parent: BaseBorgChassisNT + parent: [BaseBorgChassisNT, ShowMedicalIcons] name: medical cyborg components: - type: Sprite @@ -226,6 +252,19 @@ - type: ShowHealthIcons damageContainers: - Biological + - type: SolutionScanner + - type: FootstepModifier + footstepSoundCollection: + collection: FootstepHoverBorg + params: + volume: -6 + - type: InteractionPopup + interactSuccessString: petting-success-medical-cyborg + interactFailureString: petting-failure-medical-cyborg + interactSuccessSound: + path: /Audio/Ambience/Objects/periodic_beep.ogg + - type: Speech # WD + speechSounds: BorgUpgraded - type: entity id: BorgChassisService @@ -269,6 +308,13 @@ access: [["Service"], ["Command"], ["Research"]] - type: Inventory templateId: borgTall + - type: InteractionPopup + interactSuccessString: petting-success-service-cyborg + interactFailureString: petting-failure-service-cyborg + interactSuccessSound: + path: /Audio/Ambience/Objects/periodic_beep.ogg + - type: Speech # WD + speechSounds: BorgUpgraded - type: entity id: BorgChassisSyndicateAssault @@ -287,8 +333,6 @@ shader: unshaded map: ["light"] visible: false - - type: PointLight - color: "#dd200b" - type: BorgChassis maxModules: 3 moduleWhitelist: @@ -302,6 +346,11 @@ node: syndicateassault - type: Damageable damageModifierSet: AssaultBorg + - type: InteractionPopup + interactSuccessString: petting-success-syndicate-cyborg + interactFailureString: petting-failure-syndicate-cyborg + interactSuccessSound: + path: /Audio/Ambience/Objects/periodic_beep.ogg - type: entity id: BorgChassisSyndicateMedical @@ -331,6 +380,14 @@ noMindState: synd_medical - type: Construction node: syndicatemedical + - type: ShowHealthBars + damageContainers: + - Biological + - type: InteractionPopup + interactSuccessString: petting-success-syndicate-cyborg + interactFailureString: petting-failure-syndicate-cyborg + interactSuccessSound: + path: /Audio/Ambience/Objects/periodic_beep.ogg - type: entity id: BorgChassisSyndicateSaboteur @@ -360,3 +417,12 @@ noMindState: synd_engi - type: Construction node: syndicatesaboteur + - type: ShowHealthBars + damageContainers: + - Inorganic + - Silicon + - type: InteractionPopup + interactSuccessString: petting-success-syndicate-cyborg + interactFailureString: petting-failure-syndicate-cyborg + interactSuccessSound: + path: /Audio/Ambience/Objects/periodic_beep.ogg diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml index 37930d29dc..00df2135c9 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml @@ -109,6 +109,8 @@ proto: robot - type: ZombieImmune - type: Penetrated + - type: NoSlip + - type: Insulated - type: entity parent: MobSiliconBase @@ -235,7 +237,6 @@ - type: MovementSpeedModifier baseWalkSpeed: 2 baseSprintSpeed: 3 - - type: NoSlip - type: HTN rootTask: task: CleanbotCompound @@ -248,7 +249,7 @@ path: /Audio/Ambience/Objects/periodic_beep.ogg - type: entity - parent: MobSiliconBase + parent: [MobSiliconBase, ShowMedicalIcons] id: MobMedibot name: medibot description: No substitute for a doctor, but better than nothing. @@ -282,19 +283,12 @@ - type: Construction graph: MediBot node: bot - - type: NoSlip - type: Anchorable - type: InteractionPopup interactSuccessString: petting-success-medibot interactFailureString: petting-failure-medibot interactSuccessSound: path: /Audio/Ambience/Objects/periodic_beep.ogg - - type: ShowHealthBars - damageContainers: - - Biological - - type: ShowHealthIcons - damageContainers: - - Biological - type: entity parent: MobSiliconBase diff --git a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml index 8874e16597..3ba14b0e28 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml @@ -348,12 +348,12 @@ - state: icon-treatment - type: ItemBorgModule items: + - HandheldHealthAnalyzerUnpowered - Brutepack10Lingering - Ointment10Lingering - Gauze10Lingering - Bloodpack10Lingering - Syringe - - Dropper - type: entity id: BorgModuleDefibrillator @@ -539,7 +539,7 @@ - state: icon-syndicate - type: ItemBorgModule items: - - EnergySwordBorg + - CyborgEnergySwordDouble - PinpointerSyndicateNuclear - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml index 8630d9df36..2c8f69a6d3 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml @@ -306,3 +306,12 @@ enabled: false reflects: - Energy + +- type: entity + suffix: One-Handed, For Borgs + parent: EnergySwordDouble + id: CyborgEnergySwordDouble # why is this invalid if ID is BorgEnergySwordDouble + description: Syndicate Command Interns thought that having one blade on the energy sword was not enough. Specially designed for syndicate cyborgs. + components: # could add energy-draining like the L6C + - type: Wieldable + freeHandsRequired: 0 # because borg has no off-hand to wield with. Without this, it will be unable to activate the esword diff --git a/Resources/Prototypes/InventoryTemplates/borg.yml b/Resources/Prototypes/InventoryTemplates/borg.yml index a03be16708..d43519f61c 100644 --- a/Resources/Prototypes/InventoryTemplates/borg.yml +++ b/Resources/Prototypes/InventoryTemplates/borg.yml @@ -7,7 +7,7 @@ uiWindowPos: 1,0 strippingWindowPos: 0,0 displayName: Head - offset: 0, -0.09375 + offset: 0.015625, -0.09375 - type: inventoryTemplate id: borgShort @@ -18,7 +18,7 @@ uiWindowPos: 1,0 strippingWindowPos: 0,0 displayName: Head - offset: 0, -0.1875 + offset: 0.015625, -0.1875 - type: inventoryTemplate id: borgTall @@ -30,6 +30,7 @@ uiWindowPos: 0,0 strippingWindowPos: 0,0 displayName: Head + offset: 0.015625, 0 # taller than tall - type: inventoryTemplate diff --git a/Resources/Prototypes/SoundCollections/footsteps.yml b/Resources/Prototypes/SoundCollections/footsteps.yml index bd51e6b445..e179584f6f 100644 --- a/Resources/Prototypes/SoundCollections/footsteps.yml +++ b/Resources/Prototypes/SoundCollections/footsteps.yml @@ -201,3 +201,13 @@ - /Audio/Effects/Footsteps/spurs1.ogg - /Audio/Effects/Footsteps/spurs2.ogg - /Audio/Effects/Footsteps/spurs3.ogg + +- type: soundCollection + id: FootstepBorg + files: + - /Audio/Effects/Footsteps/borgwalk1.ogg + +- type: soundCollection + id: FootstepHoverBorg + files: + - /Audio/Effects/Footsteps/borgwalk2.ogg diff --git a/Resources/Prototypes/Voice/speech_emote_sounds.yml b/Resources/Prototypes/Voice/speech_emote_sounds.yml index c11c1498b5..c4031db44b 100644 --- a/Resources/Prototypes/Voice/speech_emote_sounds.yml +++ b/Resources/Prototypes/Voice/speech_emote_sounds.yml @@ -449,6 +449,26 @@ Ping: path: /Audio/Effects/Cargo/ping.ogg +- type: emoteSounds + id: UnisexSiliconSyndicate + params: + variation: 0.05 + sounds: + Laugh: + path: /Audio/Voice/Silicon/syndieborg_laugh.ogg + Beep: + path: /Audio/Machines/twobeep.ogg + Chime: + path: /Audio/Machines/chime.ogg + Buzz: + path: /Audio/Machines/buzz-sigh.ogg + Buzz-Two: + path: /Audio/Machines/buzz-two.ogg + Honk: + path: /Audio/Items/bikehorn.ogg + Ping: + path: /Audio/Effects/Cargo/ping.ogg + # body emotes - type: emoteSounds id: GeneralBodyEmotes diff --git a/Resources/Prototypes/Voice/speech_sounds.yml b/Resources/Prototypes/Voice/speech_sounds.yml index 2e7e7bf989..5a2b4eb425 100644 --- a/Resources/Prototypes/Voice/speech_sounds.yml +++ b/Resources/Prototypes/Voice/speech_sounds.yml @@ -52,6 +52,41 @@ exclaimSound: path: /Audio/Machines/vending_jingle.ogg +- type: speechSounds + id: Borg + saySound: + path: /Audio/Voice/Talk/pai.ogg + askSound: + path: /Audio/Voice/Talk/pai_ask.ogg + exclaimSound: + path: /Audio/Voice/Talk/pai_exclaim.ogg + +# WD edit - эти звуки слишком машинные и хладнокровные. Милые звуки пИИ намного лучше +# saySound: +# path: /Audio/Voice/Talk/Silicon/borg.ogg +# askSound: +# path: /Audio/Voice/Talk/Silicon/borg_ask.ogg +# exclaimSound: +# path: /Audio/Voice/Talk/Silicon/borg_exclaim.ogg + +- type: speechSounds + id: BorgUpgraded + saySound: + path: /Audio/Voice/Talk/Silicon/borg.ogg + askSound: + path: /Audio/Voice/Talk/Silicon/borg_ask.ogg + exclaimSound: + path: /Audio/Voice/Talk/Silicon/borg_exclaim.ogg + +- type: speechSounds + id: SyndieBorg + saySound: + path: /Audio/Voice/Talk/Silicon/syndieborg.ogg + askSound: + path: /Audio/Voice/Talk/Silicon/syndieborg_ask.ogg + exclaimSound: + path: /Audio/Voice/Talk/Silicon/syndieborg_exclaim.ogg + - type: speechSounds id: Pai saySound: