Rebase vials to DrinkBase, closeable vials, mini vials (#36132)

* .rsi

* mini vial

* try stop TryStopNukeOpsFromConstantlyFailing from failing

* slight sprite change

* mail and lathe recipe

* real test fail

* resolve arbitrage

* cleanup

* always forgetting something

* always forgetting something

* drink no more

* remove integrated vial

* initial port

* Rename the rsi states

* Rename the rsi states

* up to standards

* finish

* testfail

* minor touchup

* arby

* op

* mix meta

* small changes to the vials

* commit

* commit

* style nit

---------

Co-authored-by: iaada <iaada@users.noreply.github.com>
Co-authored-by: Janet Blackquill <uhhadd@gmail.com>
This commit is contained in:
āda 2026-01-15 12:32:37 -06:00 • committed by GitHub
parent 610881db82
commit fdeb5a736d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
37 changed files with 272 additions and 171 deletions

View file

@ -24,7 +24,7 @@
sprite: Objects/Specific/Chemistry/vial.rsi
state: vial
product: CrateChemistryVials
cost: 1000
cost: 1100
category: cargoproduct-category-name-medical
group: market

View file

@ -122,12 +122,15 @@
components:
- type: Storage
grid:
- 0,0,2,1
- 0,0,3,1
- type: EntityTableContainerFill
containers:
storagebase:
id: BaseChemistryEmptyVial
amount: 6
storagebase: !type:AllSelector
children:
- id: ChemistryEmptyVial
amount: 3
- id: ChemistryEmptyVialSmall
rolls: 2 # group the small vials on the right column
- type: Sprite
layers:
- state: box

View file

@ -33,7 +33,7 @@
- id: SyringeStimulants
- id: VestineChemistryVial
amount: 2
- id: BaseChemistryEmptyVial
- id: ChemistryEmptyVial
- type: entity
parent: [BoxCardboard, BaseSyndicateContraband]

View file

@ -60,7 +60,10 @@
- id: Syringe
amount: !type:RangeNumberSelector
range: 1, 2
- id: BaseChemistryEmptyVial
- id: ChemistryEmptyVial
amount: !type:RangeNumberSelector
range: 0, 2
- id: ChemistryEmptyVialSmall
amount: !type:RangeNumberSelector
range: 0, 2

View file

@ -1,170 +1,177 @@
# TODO: Have a seperate lid state that can be popped on and off (not as a seperate item) that changes whether the vial can be spilled or not.
- type: entity
name: vial
parent: BaseItem
id: BaseChemistryEmptyVial
description: A small vial.
abstract: true
parent: [ DrinkBaseMaterialGlass, DrinkBase, DrinkBaseOpenable, DrinkBaseEmptyTrash, DrinkVisualsAll ]
id: BaseChemistryVial
components:
- type: Item
size: Tiny
- type: Openable
sound:
collection: bottleCloseSounds # using closed here for the quieter sound
closeable: true
closeSound:
collection: bottleCloseSounds
- type: FitsInDispenser
solution: drink
- type: ExaminableSolution
exactVolume: true # It's a chemistry tool
- type: Tag
tags:
- Trash
- CentrifugeCompatible
- type: PhysicalComposition
materialComposition:
Glass: 25
- type: FitsInDispenser
solution: beaker
- type: SpaceGarbage
- CentrifugeCompatible # unique feature of vials
## Entities
- type: entity
parent: BaseChemistryVial
id: ChemistryEmptyVial
name: vial
description: A small vial.
components:
- type: Item
sprite: Objects/Specific/Chemistry/vial.rsi
- type: Sprite
sprite: Objects/Specific/Chemistry/vial.rsi
layers:
- state: vial-1
- state: vial-1-1
map: ["enum.SolutionContainerLayers.Fill"]
visible: false
- type: Appearance
- type: SolutionContainerVisuals
maxFillLevels: 6
fillBaseName: vial-1-
inHandsMaxFillLevels: 4
inHandsFillBaseName: -fill-
- type: Edible
edible: Drink
solution: beaker
destroyOnEmpty: false
utensil: None
- type: SolutionContainerManager
solutions:
beaker:
drink:
maxVol: 30
- type: MixableSolution
solution: beaker
- type: RefillableSolution
solution: beaker
- type: DrainableSolution
solution: beaker
- type: ExaminableSolution
solution: beaker
exactVolume: true
- type: DrawableSolution
solution: beaker
- type: SolutionTransfer
maxTransferAmount: 30
canChangeTransferAmount: true
- type: SolutionItemStatus
solution: beaker
- type: UserInterface
interfaces:
enum.TransferAmountUiKey.Key:
type: TransferAmountBoundUserInterface
- type: Item
size: Tiny
sprite: Objects/Specific/Chemistry/vial.rsi
shape:
- 0,0,0,0
- type: MeleeWeapon
soundNoDamage:
path: "/Audio/Effects/Fluids/splat.ogg"
damage:
types:
Blunt: 0
- type: TrashOnSolutionEmpty
solution: beaker
- type: StaticPrice
price: 100
- type: DamageOnLand
damage:
types:
Blunt: 5
- type: DamageOtherOnHit
damage:
types:
Blunt: 2
- type: Damageable
damageContainer: Inorganic
- type: Destructible
thresholds:
- trigger: &DamageTrigger100
!type:DamageTrigger
damage: 100
behaviors: &OverkillBehavior
- !type:DoActsBehavior
acts: [ "Destruction" ]
- trigger:
!type:DamageTrigger
damage: 15
damage: 15 # stronger than base
behaviors:
- !type:PlaySoundBehavior
- &SoundGlassBreak !type:PlaySoundBehavior
sound:
collection: GlassBreak
params:
volume: -4
- !type:SpillBehavior { }
- !type:SpawnEntitiesBehavior
spawn:
ShardGlass:
ShardGlass: # less glass than base
min: 0
max: 1
transferForensics: true
- !type:DoActsBehavior
acts: [ "Destruction" ]
- type: Spillable
solution: beaker
- type: DnaSubstanceTrace
- type: entity
parent: BaseChemistryVial
id: ChemistryEmptyVialSmall
name: mini vial
description: A smaller vial.
components:
- type: Item
sprite: Objects/Specific/Chemistry/vial_mini.rsi
- type: Sprite
sprite: Objects/Specific/Chemistry/vial_mini.rsi
- type: SolutionContainerVisuals
maxFillLevels: 5
inHandsMaxFillLevels: 4
- type: SolutionContainerManager
solutions:
drink:
maxVol: 10
- type: SolutionTransfer
maxTransferAmount: 10
- type: StaticPrice
price: 50
- type: PhysicalComposition
materialComposition:
Glass: 10
- type: Destructible
thresholds:
- trigger: *DamageTrigger100
behaviors: *OverkillBehavior
- trigger:
!type:DamageTrigger
damage: 5 # smaller so weaker
behaviors: # remove glass shard spawn
- *SoundGlassBreak
- !type:SpillBehavior { }
- !type:DoActsBehavior
acts: [ "Destruction" ]
## Reagent filled
- type: entity
parent: ChemistryEmptyVial
id: VestineChemistryVial
parent: BaseChemistryEmptyVial
suffix: vestine
components:
- type: Label
currentLabel: reagent-name-vestine
- type: SolutionContainerManager
solutions:
beaker:
drink:
maxVol: 30
reagents:
- ReagentId: Vestine
Quantity: 30
- type: Tag
tags: []
tags: &TagVial # Remove trash tag when we have a filled solution
- CentrifugeCompatible
- type: entity
parent: ChemistryEmptyVialSmall
id: RadiumChemistryVial
parent: BaseChemistryEmptyVial
suffix: radium
components:
- type: Label
currentLabel: reagent-name-radium
- type: SolutionContainerManager
solutions:
beaker:
maxVol: 5
drink:
maxVol: 10
reagents:
- ReagentId: Radium
Quantity: 5
- type: Tag
tags: *TagVial
- type: entity
parent: ChemistryEmptyVialSmall
id: ChlorineChemistryVial
parent: BaseChemistryEmptyVial
suffix: chlorine
components:
- type: Label
currentLabel: reagent-name-chlorine
- type: SolutionContainerManager
solutions:
beaker:
maxVol: 5
drink:
maxVol: 10
reagents:
- ReagentId: Chlorine
Quantity: 5
- type: Tag
tags: *TagVial
- type: entity
parent: ChemistryEmptyVialSmall
id: PlasmaChemistryVial
parent: BaseChemistryEmptyVial
suffix: plasma
components:
- type: Label
currentLabel: reagent-name-plasma
- type: SolutionContainerManager
solutions:
beaker:
drink:
maxVol: 10
reagents:
- ReagentId: Plasma
Quantity: 10
- type: Tag
tags: *TagVial

View file

@ -1023,10 +1023,10 @@
- item: SprayBottle
- item: GasAnalyzer
- item: BorgDropper
- item: BaseChemistryEmptyVial
- item: ChemistryEmptyVial
hand:
emptyLabel: borg-slot-small-containers-empty
emptyRepresentative: BaseChemistryEmptyVial
emptyRepresentative: ChemistryEmptyVial
whitelist:
components:
- FitsInDispenser

View file

@ -77,6 +77,7 @@
- type: Machine
board: ElectrolysisUnitMachineCircuitboard
# TODO centrifuge should spill the vial if the lid is off
- type: entity
id: MachineCentrifuge
parent: BaseTabletopChemicalMachine

View file

@ -15,7 +15,8 @@
- Syringe
- PillCanister
- HandLabeler
- BaseChemistryEmptyVial
- ChemistryEmptyVial
- ChemistryEmptyVialSmall
- Dropper
- type: latheRecipePack

View file

@ -91,13 +91,21 @@
Steel: 250
- type: latheRecipe
id: BaseChemistryEmptyVial
result: BaseChemistryEmptyVial
id: ChemistryEmptyVial
result: ChemistryEmptyVial
completetime: 2
materials:
Glass: 100
Wood: 20
- type: latheRecipe
id: ChemistryEmptyVialSmall
result: ChemistryEmptyVialSmall
completetime: 2
materials:
Glass: 50
Wood: 20
- type: latheRecipe
id: ClothingEyesGlassesChemical
result: ClothingEyesGlassesChemical

View file

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 557 B

View file

@ -1,75 +1,78 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Drawn by Ubaser, taken inspiration by /tg/'s vials",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "vial"
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Drawn by Ubaser, taken inspiration by /tg/'s vials. icon_open edit by iaada(GitHub)",
"size": {
"x": 32,
"y": 32
},
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-left-fill-1",
"directions": 4
},
{
"name": "inhand-left-fill-2",
"directions": 4
},
{
"name": "inhand-left-fill-3",
"directions": 4
},
{
"name": "inhand-left-fill-4",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
},
{
"name": "inhand-right-fill-1",
"directions": 4
},
{
"name": "inhand-right-fill-2",
"directions": 4
},
{
"name": "inhand-right-fill-3",
"directions": 4
},
{
"name": "inhand-right-fill-4",
"directions": 4
},
{
"name": "vial-1"
},
{
"name": "vial-1-1"
},
{
"name": "vial-1-2"
},
{
"name": "vial-1-3"
},
{
"name": "vial-1-4"
},
{
"name": "vial-1-5"
},
{
"name": "vial-1-6"
}
]
"states": [
{
"name": "vial"
},
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-left-fill-1",
"directions": 4
},
{
"name": "inhand-left-fill-2",
"directions": 4
},
{
"name": "inhand-left-fill-3",
"directions": 4
},
{
"name": "inhand-left-fill-4",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
},
{
"name": "inhand-right-fill-1",
"directions": 4
},
{
"name": "inhand-right-fill-2",
"directions": 4
},
{
"name": "inhand-right-fill-3",
"directions": 4
},
{
"name": "inhand-right-fill-4",
"directions": 4
},
{
"name": "icon_empty"
},
{
"name": "icon_open"
},
{
"name": "fill-1"
},
{
"name": "fill-2"
},
{
"name": "fill-3"
},
{
"name": "fill-4"
},
{
"name": "fill-5"
},
{
"name": "fill-6"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 464 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 472 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1,72 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Drawn by Ubaser, taken inspiration by /tg/'s vials. Edited and shrunk by iaada(GitHub)",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-left-fill-1",
"directions": 4
},
{
"name": "inhand-left-fill-2",
"directions": 4
},
{
"name": "inhand-left-fill-3",
"directions": 4
},
{
"name": "inhand-left-fill-4",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
},
{
"name": "inhand-right-fill-1",
"directions": 4
},
{
"name": "inhand-right-fill-2",
"directions": 4
},
{
"name": "inhand-right-fill-3",
"directions": 4
},
{
"name": "inhand-right-fill-4",
"directions": 4
},
{
"name": "icon_empty"
},
{
"name": "icon_open"
},
{
"name": "fill-1"
},
{
"name": "fill-2"
},
{
"name": "fill-3"
},
{
"name": "fill-4"
},
{
"name": "fill-5"
}
]
}

View file

@ -722,6 +722,9 @@ ClothingUniformJumpsuitParamedicNT: ClothingUniformJumpsuitParamedic
# 2025-08-29
PrefilledSyringe: Syringe
# 2025-09-12
BaseChemistryEmptyVial: ChemistryEmptyVial
# 2025-10-6
BibleTanakh: null
BibleSatanic: null