Repository: impstation/imp-station-14
Pull request #1884: Borg changes
Author: login: Tyranex
Created: 2025-03-09T07:06:32Z | Merged: 2025-03-10T19:12:47Z

<!-- Impstation note: there's no need to read all the official contributing guidelines,
but please DON'T combine upstream changes with your own changes.
Make separate pull requests for separate changes. -->
<!-- Guidelines: https://docs.spacestation14.io/en/getting-started/pr-guideline -->

**Changelog**
<!-- Impstation note: we have our own AUTOMATIC changelog now, so please DO use this section! -->
<!-- Add a Changelog entry to make players aware of new features or changes that could affect gameplay.
Make sure to read the guidelines and take this Changelog template out of the comment block in order for it to show up.
Changelog must have a :cl: symbol, so the bot recognizes the changes and adds them to the game's changelog. -->

implementation of the salv borg changes that's been discussed over the course of a month in the Discord. All in all, the salv borg now starts with a basic mining module with a unique non-wield pickaxe, (marked as DO NOT MAP of course) and put the mining module back in research and crafting.

I also finally added borg screams! I made it a collection so it's easier for people to add more in future, and in fixing the annoying blacklist redundancy, we now finally have the menacing syndicate assault borg laugh. The scream added is the scream from goon, SS13, credited in the attributions.

:cl:
- add: Added a new basic mining module for salvage cyborg!
- add: Cyborgs can now scream! And syndicate assault cyborgs can now laugh. Go give the crew a heart attack.
- tweak: The mining module is no longer given to the salvage chassis, it must instead be researched and crafted.



Diff:
diff --git a/Resources/Audio/_Impstation/Voice/Silicon/attributions.yml b/Resources/Audio/_Impstation/Voice/Silicon/attributions.yml
new file mode 100644
index 0000000000000..5d514848ab1a8
--- /dev/null
+++ b/Resources/Audio/_Impstation/Voice/Silicon/attributions.yml
@@ -0,0 +1,4 @@
+- files: ["silicon_scream.ogg"]
+  license: "Custom"
+  copyright: "Original Robot_Scream_2.ogg by goonstation."
+  source: "https://github.com/goonstation/goonstation/blob/master/sound/voice/screams/Robot_Scream_2.ogg"
diff --git a/Resources/Audio/_Impstation/Voice/Silicon/silicon_scream.ogg b/Resources/Audio/_Impstation/Voice/Silicon/silicon_scream.ogg
new file mode 100644
index 0000000000000..1bfd4a6a3a1d8
Binary files /dev/null and b/Resources/Audio/_Impstation/Voice/Silicon/silicon_scream.ogg differ
diff --git a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml
index bc58891d6fa11..e020789d55100 100644
--- a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml
+++ b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml
@@ -225,7 +225,7 @@
     - Crowbar
     - RadioHandheld
   - type: BorgModuleIcon
-    icon: { sprite: Interface/Actions/actions_borg.rsi, state: mining-module }
+    icon: { sprite: _Impstation/Interface/Actions/actions_borg.rsi, state: mining-module } #imp edit
 
 - type: entity
   id: BorgModuleGrapplingGun
diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
index 6e742b9fec87b..ef29743236a49 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
@@ -621,6 +621,7 @@
     - BorgModuleHarvesting
     - BorgModuleDefibrillator
     - BorgModuleAdvancedTreatment
+    - BorgModuleMining #imp
     - RipleyHarness
     - RipleyLArm
     - RipleyRArm
diff --git a/Resources/Prototypes/Research/industrial.yml b/Resources/Prototypes/Research/industrial.yml
index d1dcb143055f8..27b355f555652 100644
--- a/Resources/Prototypes/Research/industrial.yml
+++ b/Resources/Prototypes/Research/industrial.yml
@@ -14,6 +14,7 @@
   - MineralScannerEmpty
   - OreProcessorIndustrialMachineCircuitboard
   - ClothingMaskWeldingGas
+  - BorgModuleMining # imp
 
 - type: technology
   id: SpaceScanning
diff --git a/Resources/Prototypes/Voice/speech_emote_sounds.yml b/Resources/Prototypes/Voice/speech_emote_sounds.yml
index e92c2524b9b3b..da264909eefda 100644
--- a/Resources/Prototypes/Voice/speech_emote_sounds.yml
+++ b/Resources/Prototypes/Voice/speech_emote_sounds.yml
@@ -1046,6 +1046,8 @@
   params:
     variation: 0.05
   sounds:
+    Scream:
+      collection: SiliconScreams # Imp addition
     Beep:
       path: /Audio/Machines/twobeep.ogg
     Chime:
@@ -1064,6 +1066,8 @@
   params:
     variation: 0.05
   sounds:
+    Scream:
+      collection: SiliconScreams # Imp addition
     Laugh:
       path: /Audio/Voice/Silicon/syndieborg_laugh.ogg
     Beep:
diff --git a/Resources/Prototypes/Voice/speech_emotes.yml b/Resources/Prototypes/Voice/speech_emotes.yml
index ebaf505869940..c321427226c92 100644
--- a/Resources/Prototypes/Voice/speech_emotes.yml
+++ b/Resources/Prototypes/Voice/speech_emotes.yml
@@ -7,9 +7,11 @@
   whitelist:
     components:
     - Vocal
-  blacklist:
-    components:
-    - BorgChassis
+
+  # Imp, commenting out redundant blacklisting to allow people to not go crazy wondering why their implementation of any borg emote sounds aren't working. (Who did this???)
+  # blacklist:
+  #  components:
+  #  - BorgChassis
   chatMessages: ["chat-emote-msg-scream"]
   chatTriggers:
     - scream
@@ -37,9 +39,9 @@
   whitelist:
     components:
     - Vocal
-  blacklist:
-    components:
-    - BorgChassis
+  # blacklist:
+  #  components:
+  #  - BorgChassis
   chatMessages: ["chat-emote-msg-laugh"]
   chatTriggers:
     - laugh
diff --git a/Resources/Prototypes/_Impstation/Entities/Mobs/NPCs/tcktck.yml b/Resources/Prototypes/_Impstation/Entities/Mobs/NPCs/tcktck.yml
index e85d9d6820c15..68ce934f9aa0a 100644
--- a/Resources/Prototypes/_Impstation/Entities/Mobs/NPCs/tcktck.yml
+++ b/Resources/Prototypes/_Impstation/Entities/Mobs/NPCs/tcktck.yml
@@ -151,7 +151,7 @@
     speechSounds: Borg
   - type: Vocal
     sounds:
-      Unsexed: UnisexSilicon
+      Unsexed: TckTck
   - type: UnblockableSpeech
   - type: ReplacementAccent
     accent: silicon
diff --git a/Resources/Prototypes/_Impstation/Entities/Objects/Specific/Robotics/Borg/borg_modules.yml b/Resources/Prototypes/_Impstation/Entities/Objects/Specific/Robotics/Borg/borg_modules.yml
index 40c9a488f3c3c..5f7082af7f285 100644
--- a/Resources/Prototypes/_Impstation/Entities/Objects/Specific/Robotics/Borg/borg_modules.yml
+++ b/Resources/Prototypes/_Impstation/Entities/Objects/Specific/Robotics/Borg/borg_modules.yml
@@ -1,3 +1,4 @@
+#TckTck modules
 - type: entity
   id: BorgModuleTckTck
   parent: [ BaseBorgModule, BaseProviderBorgModule, DecapoidEmpireContraband ]
@@ -58,6 +59,7 @@
     tags:
       - BorgModuleTckTck
 
+#Borg modules
 - type: entity
   id: BorgModuleArtistic
   parent: [ BaseBorgModule, BaseProviderBorgModule ]
@@ -114,3 +116,20 @@
     - BorgDropper
   - type: BorgModuleIcon
     icon: { sprite: _Impstation/Interface/Actions/actions_borg.rsi, state: bartender-module }
+
+- type: entity
+  id: BorgModuleBasicMining
+  parent: [ BaseBorgModuleCargo, BaseProviderBorgModule ]
+  name: basic mining cyborg module
+  components:
+  - type: Sprite
+    layers:
+    - state: cargo
+    - state: icon-mining-basic
+  - type: ItemBorgModule
+    items:
+    - BorgPickaxe
+    - OreBag
+    - RadioHandheld
+  - type: BorgModuleIcon
+    icon: { sprite: _Impstation/Interface/Actions/actions_borg.rsi, state: basic-mining-module }
diff --git a/Resources/Prototypes/_Impstation/Entities/Objects/Weapons/Melee/mining.yml b/Resources/Prototypes/_Impstation/Entities/Objects/Weapons/Melee/mining.yml
new file mode 100644
index 0000000000000..511c6110b13db
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/Entities/Objects/Weapons/Melee/mining.yml
@@ -0,0 +1,35 @@
+- type: entity
+  name: Pickaxe
+  parent: BaseItem
+  id: BorgPickaxe
+  description: Notched to perfection, for jamming it into rocks.
+  suffix: DO NOT MAP
+  components:
+  - type: Tag
+    tags:
+    - Pickaxe
+  - type: Sprite
+    sprite: Objects/Weapons/Melee/pickaxe.rsi
+    state: pickaxe
+  - type: MeleeWeapon
+    attackRate: 0.7
+    wideAnimationRotation: -135
+    soundHit:
+      path: "/Audio/Weapons/smash.ogg"
+      params:
+        volume: -3
+    damage:
+      groups:
+        Brute: 10
+      types:
+        Structural: 30
+  - type: Item
+    size: Normal
+    shape:
+    - 0,0,2,0
+    - 1,1,1,2
+    sprite: Objects/Weapons/Melee/pickaxe.rsi
+    storedRotation: -45
+  - type: UseDelay
+  - type: DamageOtherOnHit
+    staminaCost: 5
diff --git a/Resources/Prototypes/_Impstation/Recipes/Lathes/robotics.yml b/Resources/Prototypes/_Impstation/Recipes/Lathes/robotics.yml
index 00006b5470dcd..15a7ecaaaf3b6 100644
--- a/Resources/Prototypes/_Impstation/Recipes/Lathes/robotics.yml
+++ b/Resources/Prototypes/_Impstation/Recipes/Lathes/robotics.yml
@@ -2,3 +2,13 @@
   parent: BaseBorgModuleRecipe
   id: BorgModuleArtistic
   result: BorgModuleArtistic
+
+- type: latheRecipe
+  parent: BaseBorgModuleRecipe
+  id: BorgModuleMining
+  materials:
+    Steel: 500
+    Glass: 500
+    Plastic: 500
+    Gold: 100
+  result: BorgModuleMining
diff --git a/Resources/Prototypes/_Impstation/SoundCollections/screams.yml b/Resources/Prototypes/_Impstation/SoundCollections/screams.yml
index a0f0c65913f27..2d7f550321e70 100644
--- a/Resources/Prototypes/_Impstation/SoundCollections/screams.yml
+++ b/Resources/Prototypes/_Impstation/SoundCollections/screams.yml
@@ -29,3 +29,8 @@
     - /Audio/_Impstation/Voice/Slime/s_femalescream_3.ogg
     - /Audio/_Impstation/Voice/Slime/s_femalescream_4.ogg
     - /Audio/_Impstation/Voice/Slime/s_femalescream_5.ogg
+
+- type: soundCollection
+  id: SiliconScreams
+  files:
+    - /Audio/_Impstation/Voice/Silicon/silicon_scream.ogg
diff --git a/Resources/Prototypes/_Impstation/Voice/speech_emote_sounds.yml b/Resources/Prototypes/_Impstation/Voice/speech_emote_sounds.yml
index bf1ecd06ce106..a6602760002ce 100644
--- a/Resources/Prototypes/_Impstation/Voice/speech_emote_sounds.yml
+++ b/Resources/Prototypes/_Impstation/Voice/speech_emote_sounds.yml
@@ -102,3 +102,21 @@
       collection: MonkeyScreeches
     DefaultDeathgasp:
       path: /Audio/_Impstation/Animals/bros_hurt.ogg
+
+- type: emoteSounds
+  id: TckTck
+  params:
+    variation: 0.05
+  sounds:
+    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
diff --git a/Resources/Prototypes/borg_types.yml b/Resources/Prototypes/borg_types.yml
index c8edd924d3b71..9a4370bca1681 100644
--- a/Resources/Prototypes/borg_types.yml
+++ b/Resources/Prototypes/borg_types.yml
@@ -81,7 +81,7 @@
 
   defaultModules:
   - BorgModuleGrapplingGun
-  - BorgModuleMining
+  - BorgModuleBasicMining # imp
   - BorgModuleAppraisal
 
   radioChannels:
diff --git a/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/icon-mining-basic.png b/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/icon-mining-basic.png
new file mode 100644
index 0000000000000..897a18ef82a0c
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/icon-mining-basic.png differ
diff --git a/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/icon-mining.png b/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/icon-mining.png
index 897a18ef82a0c..051c57adf303f 100644
Binary files a/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/icon-mining.png and b/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/icon-mining.png differ
diff --git a/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/meta.json b/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/meta.json
index 8b11b32a54636..f49c2dcf46798 100644
--- a/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/meta.json
+++ b/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/meta.json
@@ -1,7 +1,7 @@
 {
   "version": 1,
   "license": "CC0-1.0",
-  "copyright": "Created by EmoGarbage404 (github) for Space Station 14. icon-construction.png created by deltanedas (github). syndicateborgbomb.png created by Mangohydra (github). icon-beer by aada.",
+  "copyright": "Created by EmoGarbage404 (github) for Space Station 14. icon-construction.png created by deltanedas (github). syndicateborgbomb.png created by Mangohydra (github). icon-beer by aada. Mining module by LazyRiverfolk",
   "size": {
     "x": 32,
     "y": 32
@@ -129,6 +129,9 @@
     },
     {
       "name": "syndicate"
+    },
+    {
+      "name": "icon-mining-basic"
     }
   ]
 }
diff --git a/Resources/Textures/_Impstation/Interface/Actions/actions_borg.rsi/basic-mining-module.png b/Resources/Textures/_Impstation/Interface/Actions/actions_borg.rsi/basic-mining-module.png
new file mode 100644
index 0000000000000..bfef5bfd04d50
Binary files /dev/null and b/Resources/Textures/_Impstation/Interface/Actions/actions_borg.rsi/basic-mining-module.png differ
diff --git a/Resources/Textures/_Impstation/Interface/Actions/actions_borg.rsi/meta.json b/Resources/Textures/_Impstation/Interface/Actions/actions_borg.rsi/meta.json
index 02a3c88bd2710..c52aea15fe093 100644
--- a/Resources/Textures/_Impstation/Interface/Actions/actions_borg.rsi/meta.json
+++ b/Resources/Textures/_Impstation/Interface/Actions/actions_borg.rsi/meta.json
@@ -1,7 +1,7 @@
 {
     "version": 1,
     "license": "CC-BY-SA-3.0",
-    "copyright": "artistic bartender and bureaucracy by iaada(github), tcktck modules by kipdotnet (github)",
+    "copyright": "artistic bartender and bureaucracy by iaada(github), tcktck modules by kipdotnet (github), mining module by LazyRiverfolk",
     "size": {
         "x": 32,
         "y": 32
@@ -21,6 +21,12 @@
         },
         {
             "name": "tcktck-tools-module"
+        },
+        {
+            "name": "basic-mining-module"
+        },
+        {
+            "name": "mining-module"
         }
     ]
 }
diff --git a/Resources/Textures/_Impstation/Interface/Actions/actions_borg.rsi/mining-module.png b/Resources/Textures/_Impstation/Interface/Actions/actions_borg.rsi/mining-module.png
new file mode 100644
index 0000000000000..a5af785e17134
Binary files /dev/null and b/Resources/Textures/_Impstation/Interface/Actions/actions_borg.rsi/mining-module.png differ


Reviews:
user: login: kipdotnet
body: Assault borgs dont seem to have screams? it works fine for the basic borg though and the laugh works too.
Also, if its not a trouble, could you replace the scream from tck'tck with a generic beep sound? the default scream kinda doesnt fit the vibe I wanted for it
state: DISMISSED
author_association: NONE
submitted_at: 2025-03-09T10:02:23Z
user: login: hivehum
state: CHANGES_REQUESTED
author_association: NONE
submitted_at: 2025-03-09T13:31:38Z
user: login: hivehum
state: DISMISSED
author_association: NONE
submitted_at: 2025-03-09T15:23:27Z
user: login: Tyranex
state: COMMENTED
author_association: NONE
submitted_at: 2025-03-09T17:43:08Z
user: login: hivehum
body: tested working. that assault cyborg laugh is so evil, i love it lol

ty for the contribution! and the willingness to nerf your main thing lmao respect
state: APPROVED
author_association: NONE
submitted_at: 2025-03-10T19:12:42Z

Review comments:
diff_hunk: @@ -14,6 +14,7 @@
   - MineralScannerEmpty
   - OreProcessorIndustrialMachineCircuitboard
   - ClothingMaskWeldingGas
+  - BorgModuleMining
path: Resources/Prototypes/Research/industrial.yml
user: login: hivehum
body: imp tag
created_at: 2025-03-09T13:30:25Z
author_association: NONE
diff_hunk: @@ -81,7 +81,7 @@
 
   defaultModules:
   - BorgModuleGrapplingGun
-  - BorgModuleMining
+  - BorgModuleBasicMining
path: Resources/Prototypes/borg_types.yml
user: login: hivehum
body: imp tag
created_at: 2025-03-09T13:30:57Z
author_association: NONE
diff_hunk: @@ -129,6 +129,9 @@
     },
     {
       "name": "syndicate"
+    },
+    {
+      "name": "icon-mining-adv"
path: Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/meta.json
user: login: hivehum
body: edit the attributions on this metadata to mention who created this asset
created_at: 2025-03-09T13:31:25Z
author_association: NONE
diff_hunk: @@ -0,0 +1,35 @@
+- type: entity
+  name: Pickaxe
+  parent: BaseItem
+  id: BorgPickaxe
+  description: Notched to perfection, for jamming it into rocks.
+  suffix: DO NOT MAP
+  components:
+  - type: Tag
+    tags:
+    - Pickaxe
+  - type: Sprite
+    sprite: Objects/Weapons/Melee/pickaxe.rsi
+    state: pickaxe
+  - type: MeleeWeapon
+    attackRate: 0.7
+    wideAnimationRotation: -135
+    soundHit:
+      path: "/Audio/Weapons/smash.ogg"
+      params:
+        volume: -3
+    damage:
+      groups:
+        Brute: 10
+      types:
+        Structural: 30
+  - type: Item
+    size: Normal
+    shape:
+    - 0,0,2,0
+    - 1,1,1,2
+    sprite: Objects/Weapons/Melee/pickaxe.rsi
+    storedRotation: -45
+  - type: UseDelay
+  - type: DamageOtherOnHit # Imp
path: Resources/Prototypes/_Impstation/Entities/Objects/Weapons/Melee/mining.yml
user: login: hivehum
body: unnecessary imp tag (sorry i missed this the first go lol
created_at: 2025-03-09T15:22:11Z
author_association: NONE
diff_hunk: @@ -0,0 +1,35 @@
+- type: entity
+  name: Pickaxe
+  parent: BaseItem
+  id: BorgPickaxe
+  description: Notched to perfection, for jamming it into rocks.
+  suffix: DO NOT MAP
+  components:
+  - type: Tag
+    tags:
+    - Pickaxe
+  - type: Sprite
+    sprite: Objects/Weapons/Melee/pickaxe.rsi
+    state: pickaxe
+  - type: MeleeWeapon
+    attackRate: 0.7
+    wideAnimationRotation: -135
+    soundHit:
+      path: "/Audio/Weapons/smash.ogg"
+      params:
+        volume: -3
+    damage:
+      groups:
+        Brute: 10
+      types:
+        Structural: 30
+  - type: Item
+    size: Normal
+    shape:
+    - 0,0,2,0
+    - 1,1,1,2
+    sprite: Objects/Weapons/Melee/pickaxe.rsi
+    storedRotation: -45
+  - type: UseDelay
+  - type: DamageOtherOnHit # Imp
path: Resources/Prototypes/_Impstation/Entities/Objects/Weapons/Melee/mining.yml
user: login: Tyranex
body: Whoops! That was from me copying over the other pickaxe prototype when making this.. Fixing now
created_at: 2025-03-09T17:43:08Z
author_association: NONE

PR comments:
user: login: crocodilecarousel
created_at: 2025-03-09T07:18:56Z
body: borg screams lets goooo
author_association: NONE
user: login: Tyranex
created_at: 2025-03-09T11:23:35Z
body: > Assault borgs dont seem to have screams? it works fine for the basic borg though and the laugh works too. Also, if its not a trouble, could you replace the scream from tck'tck with a generic beep sound? the default scream kinda doesnt fit the vibe I wanted for it

Assault borgs here don't have screams because they don't share the "UnisexSilicon" emotesounds, they have their own unique emote sound collection (Probably because of the guy who added the syndicate borg laugh in the first place if I had to guess). That part was intentional, as I wanted to try to create a unique scream for syndie borg, but for now, I can throw the normal silicon one in as placeholder.

As for TckTck, same issue different side, they're using UnisexSilicon, so the solution here would be to give tck'tck their own unique emoteSounds, which isn't too big a pain to do. I'll get right on it! This also opens up the possibility of tck'tck being unique with their sounds if that's something you wanted for the future of the lil' guy.

Working on fixes now.
author_association: NONE
user: login: mqole
created_at: 2025-03-09T13:19:27Z
body: > fix: Fixed a redundant blacklisting that prevented implementation of certain cyborg emotes.

can probably delete this from the changelog since its not player-facing
author_association: MEMBER