From: Sir Warock <67167466+SirWarock@users.noreply.github.com> Date: Thu, 25 Dec 2025 19:44:06 +0000 (+0100) Subject: Add jet injectors (#40076) X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=2d77e48b4c3d92d371eedc41cc0295a8e017ec09;p=space-station-14.git Add jet injectors (#40076) * Added Jet Injectors * Small fixes * YML Linter fix * Requested Adjustments * Better Sprites for the Jet Injector * Actually forgor to give credit * Fix merge conflicts and refactor * Undo Oversight * Introduction of Advanced Jet Injectors * minor oversight * Adhere to requests * Remove Loadout, add Lockers * harder better faster stronger * vend shortage * Sound effect * will this work or do I just gotta choose one at random??? * alright fine I'll do it this way * quiet the hissing, raise the pitch * Merge new sprites --------- Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com> --- diff --git a/Resources/Audio/Items/attributions.yml b/Resources/Audio/Items/attributions.yml index 5a5927c878..bed043b3ca 100644 --- a/Resources/Audio/Items/attributions.yml +++ b/Resources/Audio/Items/attributions.yml @@ -174,3 +174,8 @@ license: "CC0-1.0" copyright: "Created by romulofs, converted to OGG, and edited by TiniestShark (Github)" source: "https://freesound.org/s/127541/" + +- files: ["jet_injector.ogg"] + license: "CC-BY-3.0" + copyright: "Orginal audio by EminYILDIRIM -- https://freesound.org/s/548009/ -- License: Attribution 4.0, 2imitk -- https://freesound.org/s/279044/ -- License: Attribution 3.0 and brunoboselli -- https://freesound.org/s/457294/ -- License: Creative Commons 0, modified by Princess-Cheeseballs (GitHub)" + source: "https://github.com/space-wizards/space-station-14/pull/40076" diff --git a/Resources/Audio/Items/jet_injector.ogg b/Resources/Audio/Items/jet_injector.ogg new file mode 100644 index 0000000000..8ccb40d8ce Binary files /dev/null and b/Resources/Audio/Items/jet_injector.ogg differ diff --git a/Resources/Locale/en-US/chemistry/components/injector-component.ftl b/Resources/Locale/en-US/chemistry/components/injector-component.ftl index 2958dda5ed..762816a9d2 100644 --- a/Resources/Locale/en-US/chemistry/components/injector-component.ftl +++ b/Resources/Locale/en-US/chemistry/components/injector-component.ftl @@ -45,6 +45,8 @@ injector-component-needle-injecting-user = You start injecting the needle. injector-component-needle-injecting-target = {CAPITALIZE(THE($user))} is trying to inject a needle into you! injector-component-needle-drawing-user = You start drawing the needle. injector-component-needle-drawing-target = {CAPITALIZE(THE($user))} is trying to use a needle to draw from you! +injector-component-spray-injecting-user = You start preparing the spray nozzle. +injector-component-spray-injecting-target = {CAPITALIZE(THE($user))} is trying to place a spray nozzle onto you! ## Target Popup Success messages injector-component-feel-prick-message = You feel a tiny prick! diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/medical.yml b/Resources/Prototypes/Catalog/Fills/Lockers/medical.yml index 7d9fe7fb59..67eeb837aa 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/medical.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/medical.yml @@ -64,6 +64,7 @@ - id: UniformScrubsColorPurple weight: 0.05 - id: ClothingMaskSterile + - id: JetInjector - type: entity parent: LockerMedical @@ -132,6 +133,7 @@ - id: HandheldGPSBasic - id: MedkitFilled prob: 0.3 + - id: JetInjector - type: entity parent: LockerParamedic diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml index fe8668ec30..639bc55f87 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml @@ -41,6 +41,7 @@ ChemistryBottleEpinephrine: 3 ChemistryBottleBicaridine: 1 Syringe: 5 + JetInjector: 2 BoxBottle: 3 PillCanisterTricordrazine: 3 PillCanisterIron: 1 @@ -74,4 +75,4 @@ contrabandInventory: PillCanisterRandom: 1 PillSpaceDrugs: 3 - FoodApple: 1 \ No newline at end of file + FoodApple: 1 diff --git a/Resources/Prototypes/Chemistry/injector_modes.yml b/Resources/Prototypes/Chemistry/injector_modes.yml index fd96819df3..53a5ee4f73 100644 --- a/Resources/Prototypes/Chemistry/injector_modes.yml +++ b/Resources/Prototypes/Chemistry/injector_modes.yml @@ -100,20 +100,55 @@ injectSound: /Audio/Items/hypospray.ogg injectPopupTarget: injector-component-feel-prick-message injectOnUse: true - mobTime: 0 delayPerVolume: 0 transferAmounts: - 5 - type: injectorMode - parent: [ BaseHyposprayMode, BaseInjectMode ] + abstract: true + parent: BaseHyposprayMode + id: BaseInstantHyposprayMode + mobTime: 0 + +- type: injectorMode + parent: [ BaseInstantHyposprayMode, BaseInjectMode ] id: HyposprayInjectMode - type: injectorMode - parent: [ BaseHyposprayMode, BaseDynamicMode ] + parent: [ BaseInstantHyposprayMode, BaseDynamicMode ] id: HyposprayDynamicMode - type: injectorMode parent: HyposprayDynamicMode id: HypopenDynamicMode containerDrawTime: 0.75 + +- type: injectorMode + abstract: true + parent: BaseHyposprayMode + id: BaseJetInjectorMode + injectSound: /Audio/Items/jet_injector.ogg + popupUserAttempt: injector-component-spray-injecting-user + popupTargetAttempt: injector-component-spray-injecting-target + +- type: injectorMode + parent: [ BaseJetInjectorMode, BaseInjectMode ] + id: JetInjectorInjectMode + +- type: injectorMode + parent: [ BaseJetInjectorMode, BaseDynamicMode ] + id: JetInjectorDynamicMode + +- type: injectorMode + abstract: true + parent: BaseJetInjectorMode + id: BaseAdvancedJetInjectorMode + mobTime: 2.5 + +- type: injectorMode + parent: [ BaseAdvancedJetInjectorMode, BaseInjectMode ] + id: AdvancedJetInjectorInjectMode + +- type: injectorMode + parent: [ BaseAdvancedJetInjectorMode, BaseDynamicMode ] + id: AdvancedJetInjectorDynamicMode diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml index 3d0180f901..eb602ec985 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml @@ -107,6 +107,68 @@ - type: UseDelay delay: 0.5 +- type: entity + parent: BaseHypospray + id: JetInjector + name: jet injector + description: A sterile injector for convenient administration of drugs to patients. + components: + - type: Sprite + sprite: Objects/Specific/Medical/jetinjector.rsi + layers: + - state: jetinjector_base + map: [ "enum.SolutionContainerLayers.Base" ] + - state: jetinjector_filled1 + map: [ "enum.SolutionContainerLayers.Fill" ] + visible: false + - type: Item + sprite: Objects/Specific/Medical/jetinjector.rsi + - type: UseDelay + delay: 2.0 + - type: SolutionContainerManager + solutions: + hypospray: + maxVol: 15 + - type: SolutionContainerVisuals + maxFillLevels: 3 + fillBaseName: jetinjector_filled + solutionName: hypospray + - type: Injector + solutionName: hypospray + currentTransferAmount: null # Inject everything on injection. + activeModeProtoId: JetInjectorDynamicMode + allowedModes: + - JetInjectorDynamicMode + - JetInjectorInjectMode + +- type: entity + parent: JetInjector + id: AdvancedJetInjector + name: advanced jet injector + description: A pristine, fashionable, high quality injector. Allows for a faster injection, with a slightly larger capacity. + components: + - type: Sprite + sprite: Objects/Specific/Medical/advanced_jetinjector.rsi + layers: + - state: jetinjector_base + map: [ "enum.SolutionContainerLayers.Base" ] + - state: jetinjector_filled1 + map: [ "enum.SolutionContainerLayers.Fill" ] + visible: false + - type: Item + sprite: Objects/Specific/Medical/advanced_jetinjector.rsi + - type: SolutionContainerManager + solutions: + hypospray: + maxVol: 20 + - type: SolutionContainerVisuals + maxFillLevels: 4 + - type: Injector + activeModeProtoId: AdvancedJetInjectorDynamicMode + allowedModes: + - AdvancedJetInjectorDynamicMode + - AdvancedJetInjectorInjectMode + - type: entity parent: SyndiHypo id: AdminHypo diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/medical.yml b/Resources/Prototypes/Recipes/Lathes/Packs/medical.yml index 0bb3c49fe9..0b97e46e7a 100644 --- a/Resources/Prototypes/Recipes/Lathes/Packs/medical.yml +++ b/Resources/Prototypes/Recipes/Lathes/Packs/medical.yml @@ -47,6 +47,7 @@ - WhiteCane - OffsetCane - OffsetCaneWood + - JetInjector - type: latheRecipePack id: RollerBedsStatic @@ -98,6 +99,7 @@ - SyringeBluespace - LauncherSyringe - MiniSyringe + - AdvancedJetInjector - type: latheRecipePack id: MedicalBoards diff --git a/Resources/Prototypes/Recipes/Lathes/medical.yml b/Resources/Prototypes/Recipes/Lathes/medical.yml index bd3ee3773d..b8b39ae175 100644 --- a/Resources/Prototypes/Recipes/Lathes/medical.yml +++ b/Resources/Prototypes/Recipes/Lathes/medical.yml @@ -252,3 +252,27 @@ Glass: 100 Plastic: 100 +- type: latheRecipe + id: JetInjector + result: JetInjector + categories: + - Tools + completetime: 5 + materials: + Steel: 500 + Glass: 500 + Plastic: 250 + Silver: 250 + +- type: latheRecipe + id: AdvancedJetInjector + result: AdvancedJetInjector + categories: + - Tools + completetime: 5 + materials: + Steel: 500 + Glass: 500 + Plastic: 250 + Silver: 400 + Gold: 50 # A bit of gold for the gold ornaments on it! diff --git a/Resources/Prototypes/Research/civilianservices.yml b/Resources/Prototypes/Research/civilianservices.yml index 50bfcc0f57..01407a8ae3 100644 --- a/Resources/Prototypes/Research/civilianservices.yml +++ b/Resources/Prototypes/Research/civilianservices.yml @@ -131,6 +131,7 @@ cost: 5000 recipeUnlocks: - BorgModuleAdvancedChemical + - AdvancedJetInjector - type: technology id: AdvancedCleaning diff --git a/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/inhand-left.png b/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/inhand-left.png new file mode 100644 index 0000000000..5eb91bfbf4 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/inhand-right.png b/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/inhand-right.png new file mode 100644 index 0000000000..9630d22a3d Binary files /dev/null and b/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/jetinjector_base.png b/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/jetinjector_base.png new file mode 100644 index 0000000000..43ca3c4f50 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/jetinjector_base.png differ diff --git a/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/jetinjector_filled1.png b/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/jetinjector_filled1.png new file mode 100644 index 0000000000..9da2b06d2f Binary files /dev/null and b/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/jetinjector_filled1.png differ diff --git a/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/jetinjector_filled2.png b/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/jetinjector_filled2.png new file mode 100644 index 0000000000..0525934675 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/jetinjector_filled2.png differ diff --git a/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/jetinjector_filled3.png b/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/jetinjector_filled3.png new file mode 100644 index 0000000000..c2ae1388ab Binary files /dev/null and b/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/jetinjector_filled3.png differ diff --git a/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/jetinjector_filled4.png b/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/jetinjector_filled4.png new file mode 100644 index 0000000000..52531e9920 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/jetinjector_filled4.png differ diff --git a/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/meta.json b/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/meta.json new file mode 100644 index 0000000000..faf83686a6 --- /dev/null +++ b/Resources/Textures/Objects/Specific/Medical/advanced_jetinjector.rsi/meta.json @@ -0,0 +1,34 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Sprites made by @Sir_Warock on Discord, remastered by @Phantasai on Github", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "jetinjector_base" + }, + { + "name": "jetinjector_filled1" + }, + { + "name": "jetinjector_filled2" + }, + { + "name": "jetinjector_filled3" + }, + { + "name": "jetinjector_filled4" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Specific/Medical/jetinjector.rsi/inhand-left.png b/Resources/Textures/Objects/Specific/Medical/jetinjector.rsi/inhand-left.png new file mode 100644 index 0000000000..25e34bb739 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Medical/jetinjector.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Specific/Medical/jetinjector.rsi/inhand-right.png b/Resources/Textures/Objects/Specific/Medical/jetinjector.rsi/inhand-right.png new file mode 100644 index 0000000000..c4f7f7fdf8 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Medical/jetinjector.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Specific/Medical/jetinjector.rsi/jetinjector_base.png b/Resources/Textures/Objects/Specific/Medical/jetinjector.rsi/jetinjector_base.png new file mode 100644 index 0000000000..c8fdcc3a1e Binary files /dev/null and b/Resources/Textures/Objects/Specific/Medical/jetinjector.rsi/jetinjector_base.png differ diff --git a/Resources/Textures/Objects/Specific/Medical/jetinjector.rsi/jetinjector_filled1.png b/Resources/Textures/Objects/Specific/Medical/jetinjector.rsi/jetinjector_filled1.png new file mode 100644 index 0000000000..9da2b06d2f Binary files /dev/null and b/Resources/Textures/Objects/Specific/Medical/jetinjector.rsi/jetinjector_filled1.png differ diff --git a/Resources/Textures/Objects/Specific/Medical/jetinjector.rsi/jetinjector_filled2.png b/Resources/Textures/Objects/Specific/Medical/jetinjector.rsi/jetinjector_filled2.png new file mode 100644 index 0000000000..29b4017029 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Medical/jetinjector.rsi/jetinjector_filled2.png differ diff --git a/Resources/Textures/Objects/Specific/Medical/jetinjector.rsi/jetinjector_filled3.png b/Resources/Textures/Objects/Specific/Medical/jetinjector.rsi/jetinjector_filled3.png new file mode 100644 index 0000000000..52531e9920 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Medical/jetinjector.rsi/jetinjector_filled3.png differ diff --git a/Resources/Textures/Objects/Specific/Medical/jetinjector.rsi/meta.json b/Resources/Textures/Objects/Specific/Medical/jetinjector.rsi/meta.json new file mode 100644 index 0000000000..a881305a2f --- /dev/null +++ b/Resources/Textures/Objects/Specific/Medical/jetinjector.rsi/meta.json @@ -0,0 +1,31 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Sprites made by @Sir_Warock on Discord, remastered by @Phantasai on Github", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "jetinjector_base" + }, + { + "name": "jetinjector_filled1" + }, + { + "name": "jetinjector_filled2" + }, + { + "name": "jetinjector_filled3" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +}