diff --git a/baystation12.dme b/baystation12.dme
index 5e58985c8c2..53fd2c83297 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -576,6 +576,7 @@
#include "code\game\objects\items\weapons\tanks\tank_types.dm"
#include "code\game\objects\items\weapons\tanks\tanks.dm"
#include "code\game\objects\storage\coat.dm"
+#include "code\game\objects\structures\barsign.dm"
#include "code\game\objects\structures\bedsheet_bin.dm"
#include "code\game\objects\structures\displaycase.dm"
#include "code\game\objects\structures\door_assembly.dm"
diff --git a/code/ZAS_defines.dm b/code/ZAS_defines.dm
deleted file mode 100644
index 6c14fafad4d..00000000000
--- a/code/ZAS_defines.dm
+++ /dev/null
@@ -1,89 +0,0 @@
-//from setup.dm, which was removed in tgcode
-
-#define MINIMUM_AIR_RATIO_TO_SUSPEND 0.05
- //Minimum ratio of air that must move to/from a tile to suspend group processing
-#define MINIMUM_AIR_TO_SUSPEND MOLES_CELLSTANDARD*MINIMUM_AIR_RATIO_TO_SUSPEND
- //Minimum amount of air that has to move before a group processing can be suspended
-
-#define MINIMUM_MOLES_DELTA_TO_MOVE MOLES_CELLSTANDARD*MINIMUM_AIR_RATIO_TO_SUSPEND //Either this must be active
-#define MINIMUM_TEMPERATURE_TO_MOVE T20C+100 //or this (or both, obviously)
-
-#define MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND 0.012
-#define MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND 4
- //Minimum temperature difference before group processing is suspended
-#define MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER 0.5
- //Minimum temperature difference before the gas temperatures are just set to be equal
-
-#define MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION T20C+10
-#define MINIMUM_TEMPERATURE_START_SUPERCONDUCTION T20C+200
-
-#define FLOOR_HEAT_TRANSFER_COEFFICIENT 0.08
-#define WALL_HEAT_TRANSFER_COEFFICIENT 0.03
-#define SPACE_HEAT_TRANSFER_COEFFICIENT 0.20 //a hack to partly simulate radiative heat
-#define OPEN_HEAT_TRANSFER_COEFFICIENT 0.40
-#define WINDOW_HEAT_TRANSFER_COEFFICIENT 0.10 //a hack for now
- //Must be between 0 and 1. Values closer to 1 equalize temperature faster
- //Should not exceed 0.4 else strange heat flow occur
-
-#define FIRE_MINIMUM_TEMPERATURE_TO_SPREAD 150+T0C
-#define FIRE_MINIMUM_TEMPERATURE_TO_EXIST 100+T0C
-#define FIRE_SPREAD_RADIOSITY_SCALE 0.85
-#define FIRE_CARBON_ENERGY_RELEASED 500000 //Amount of heat released per mole of burnt carbon into the tile
-#define FIRE_PLASMA_ENERGY_RELEASED 3000000 //Amount of heat released per mole of burnt plasma into the tile
-#define FIRE_GROWTH_RATE 25000 //For small fires
-
-//Plasma fire properties
-#define PLASMA_MINIMUM_BURN_TEMPERATURE 100+T0C
-#define PLASMA_UPPER_TEMPERATURE 1370+T0C
-#define PLASMA_MINIMUM_OXYGEN_NEEDED 2
-#define PLASMA_MINIMUM_OXYGEN_PLASMA_RATIO 30
-#define PLASMA_OXYGEN_FULLBURN 10
-
-#define T0C 273.15 // 0degC
-#define T20C 293.15 // 20degC
-#define TCMB 2.7 // -270.3degC
-
-#define TANK_LEAK_PRESSURE (30.*ONE_ATMOSPHERE) // Tank starts leaking
-#define TANK_RUPTURE_PRESSURE (40.*ONE_ATMOSPHERE) // Tank spills all contents into atmosphere
-
-#define TANK_FRAGMENT_PRESSURE (50.*ONE_ATMOSPHERE) // Boom 3x3 base explosion
-#define TANK_FRAGMENT_SCALE (10.*ONE_ATMOSPHERE) // +1 for each SCALE kPa aboe threshold
- // was 2 atm
-
-#define NORMPIPERATE 30 //pipe-insulation rate divisor
-#define HEATPIPERATE 8 //heat-exch pipe insulation
-
-#define FLOWFRAC 0.99 // fraction of gas transfered per process
-
-#define CELL_VOLUME 2500 //liters in a cell
-#define MOLES_CELLSTANDARD (ONE_ATMOSPHERE*CELL_VOLUME/(T20C*R_IDEAL_GAS_EQUATION)) //moles in a 2.5 m^3 cell at 101.325 Pa and 20 degC
-
-#define O2STANDARD 0.21
-#define N2STANDARD 0.79
-
-#define MOLES_O2STANDARD MOLES_CELLSTANDARD*O2STANDARD // O2 standard value (21%)
-#define MOLES_N2STANDARD MOLES_CELLSTANDARD*N2STANDARD // N2 standard value (79%)
-
-#define MOLES_PLASMA_VISIBLE 0.5 //Moles in a standard cell after which plasma is visible
-
-#define SPECIFIC_HEAT_TOXIN 200
-#define SPECIFIC_HEAT_AIR 20
-#define SPECIFIC_HEAT_CDO 30
-#define HEAT_CAPACITY_CALCULATION(oxygen,carbon_dioxide,nitrogen,toxins) \
- (carbon_dioxide*SPECIFIC_HEAT_CDO + (oxygen+nitrogen)*SPECIFIC_HEAT_AIR + toxins*SPECIFIC_HEAT_TOXIN)
-
-#define MINIMUM_HEAT_CAPACITY 0.0003
-#define QUANTIZE(variable) (round(variable,0.0001))
-#define TRANSFER_FRACTION 5 //What fraction (1/#) of the air difference to try and transfer
-
-//from FEA_gas_mixture.dm
-
-#define SPECIFIC_HEAT_TOXIN 200
-#define SPECIFIC_HEAT_AIR 20
-#define SPECIFIC_HEAT_CDO 30
-#define HEAT_CAPACITY_CALCULATION(oxygen,carbon_dioxide,nitrogen,toxins) \
- (carbon_dioxide*SPECIFIC_HEAT_CDO + (oxygen+nitrogen)*SPECIFIC_HEAT_AIR + toxins*SPECIFIC_HEAT_TOXIN)
-
-#define MINIMUM_HEAT_CAPACITY 0.0003
-#define QUANTIZE(variable) (round(variable,0.0001))
-#define TRANSFER_FRACTION 5 //What fraction (1/#) of the air difference to try and transfer
diff --git a/code/datums/vote.dm b/code/datums/vote.dm
deleted file mode 100644
index 3824d3c2dcd..00000000000
--- a/code/datums/vote.dm
+++ /dev/null
@@ -1,13 +0,0 @@
-/datum/vote
- var/voting = 0 // true if currently voting
- var/nextvotetime = 0 // time at which next vote can be started
- var/votetime = 60 // time at which voting will end
- var/mode = 0 // 0 = restart vote, 1 = mode vote
- // modes which can be voted for
- var/winner = null // the vote winner
-
- var/customname
- var/choices = list()
- var/enteringchoices = 0
-
- var/instant_restart = 0
\ No newline at end of file
diff --git a/code/game/objects/effects/signs.dm b/code/game/objects/effects/signs.dm
deleted file mode 100644
index 53db0edde7a..00000000000
--- a/code/game/objects/effects/signs.dm
+++ /dev/null
@@ -1,233 +0,0 @@
-/obj/effect/sign/securearea/ex_act(severity)
- switch(severity)
- if(1.0)
- del(src)
- return
- if(2.0)
- del(src)
- return
- if(3.0)
- del(src)
- return
- else
- return
-
-/obj/effect/sign/securearea/blob_act()
- del(src)
- return
-
-
-/obj/effect/sign/ex_act(severity)
- switch(severity)
- if(1.0)
- del(src)
- return
- if(2.0)
- del(src)
- return
- if(3.0)
- del(src)
- return
- else
- return
-
-/obj/effect/sign/blob_act()
- del(src)
- return
-
-
-/obj/effect/sign/map
- desc = "A framed picture of the station."
- name = "station map"
- icon = 'icons/obj/decals.dmi'
- anchored = 1.0
- opacity = 0
- density = 0
-
-/obj/effect/sign/map/left
- icon_state = "map-left"
-
-/obj/effect/sign/map/right
- icon_state = "map-right"
-
-/obj/effect/sign/securearea
- desc = "A warning sign which reads 'SECURE AREA'. This obviously applies to a nun-Clown."
- name = "SECURE AREA"
- icon = 'icons/obj/decals.dmi'
- icon_state = "securearea"
- anchored = 1.0
- opacity = 0
- density = 0
-
-/obj/effect/sign/biohazard
- desc = "A warning sign which reads 'BIOHAZARD'"
- name = "BIOHAZARD"
- icon = 'icons/obj/decals.dmi'
- icon_state = "bio"
- anchored = 1.0
- opacity = 0
- density = 0
-
-/obj/effect/sign/electricshock
- desc = "A warning sign which reads 'HIGH VOLTAGE'"
- name = "HIGH VOLTAGE"
- icon = 'icons/obj/decals.dmi'
- icon_state = "shock"
- anchored = 1.0
- opacity = 0
- density = 0
-
-/obj/effect/sign/movingparts
- desc = "A warning sign which reads 'CAUTION: MOVING PARTS, machinery liable to stop and start at random'"
- name = "CAUTION"
- icon = 'decals.dmi'
- icon_state = "securearea"
- anchored = 1.0
- opacity = 0
- density = 0
-
-/obj/effect/sign/examroom
- desc = "A guidance sign which reads 'EXAM ROOM'"
- name = "EXAM"
- icon = 'icons/obj/decals.dmi'
- icon_state = "examroom"
- anchored = 1.0
- opacity = 0
- density = 0
-
-/obj/effect/sign/vacuum
- desc = "A warning sign which reads 'HARD VACUUM AHEAD'"
- name = "HARD VACUUM AHEAD"
- icon = 'icons/obj/decals.dmi'
- icon_state = "space"
- anchored = 1.0
- opacity = 0
- density = 0
-
-/obj/effect/sign/deathsposal
- desc = "A warning sign which reads 'DISPOSAL LEADS TO SPACE'"
- name = "DISPOSAL LEADS TO SPACE"
- icon = 'icons/obj/decals.dmi'
- icon_state = "deathsposal"
- anchored = 1.0
- opacity = 0
- density = 0
-
-/obj/effect/sign/pods
- desc = "A warning sign which reads 'ESCAPE PODS'"
- name = "ESCAPE PODS"
- icon = 'icons/obj/decals.dmi'
- icon_state = "pods"
- anchored = 1.0
- opacity = 0
- density = 0
-
-/obj/effect/sign/fire
- desc = "A warning sign which reads 'DANGER: FIRE'"
- name = "DANGER: FIRE"
- icon = 'icons/obj/decals.dmi'
- icon_state = "fire"
- anchored = 1.0
- opacity = 0
- density = 0
-
-
-/obj/effect/sign/nosmoking_1
- desc = "A warning sign which reads 'NO SMOKING'"
- name = "NO SMOKING"
- icon = 'icons/obj/decals.dmi'
- icon_state = "nosmoking"
- anchored = 1.0
- opacity = 0
- density = 0
-
-
-/obj/effect/sign/nosmoking_2
- desc = "A warning sign which reads 'NO SMOKING'"
- name = "NO SMOKING"
- icon = 'icons/obj/decals.dmi'
- icon_state = "nosmoking2"
- anchored = 1.0
- opacity = 0
- density = 0
-
-/obj/effect/sign/redcross
- desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here.'"
- name = "Med-Bay"
- icon = 'icons/obj/decals.dmi'
- icon_state = "redcross"
- anchored = 1.0
- opacity = 0
- density = 0
-
-/obj/effect/sign/goldenplaque
- desc = "To be Robust is not an action or a way of life, but a mental state. Only those with the force of Will strong enough to act during a crisis, saving friend from foe, are truly Robust. Stay Robust my friends."
- name = "The Most Robust Men Award for Robustness"
- icon = 'icons/obj/decals.dmi'
- icon_state = "goldenplaque"
- anchored = 1.0
- opacity = 0
- density = 0
-
-/obj/effect/sign/kiddieplaque
- desc = "Next to the extremely long list of names and job titles, there is a drawing of a little child. The child is holding a crayon and writing some code in his diary with it. The child is smiling evilly."
- name = "Credits plaque for AI developers."
- icon = 'icons/obj/decals.dmi'
- icon_state = "kiddieplaque"
- anchored = 1.0
- opacity = 0
- density = 0
-
-/obj/effect/sign/atmosplaque
- desc = "This plaque commemorates the fall of the Atmos FEA division. For all the charred, dizzy, and brittle men who have died in its hands."
- name = "FEA Atmospherics Division"
- icon = 'icons/obj/decals.dmi'
- icon_state = "atmosplaque"
- anchored = 1.0
- opacity = 0
- density = 0
-
-/obj/effect/sign/maltesefalcon1 //The sign is 64x32, so it needs two tiles. ;3
- desc = "The Maltese Falcon, Space Bar and Grill."
- name = "The Maltese Falcon"
- icon = 'icons/obj/decals.dmi'
- icon_state = "maltesefalcon1"
- anchored = 1.0
- opacity = 0
- density = 0
-
-/obj/effect/sign/maltesefalcon2
- desc = "The Maltese Falcon, Space Bar and Grill."
- name = "The Maltese Falcon"
- icon = 'icons/obj/decals.dmi'
- icon_state = "maltesefalcon2"
- anchored = 1.0
- opacity = 0
- density = 0
-
-/obj/effect/sign/science//These 3 have multiple types, just var-edit the icon_state to whatever one you want on the map
- desc = "A warning sign which reads 'SCIENCE!'"
- name = "SCIENCE!"
- icon = 'icons/obj/decals.dmi'
- icon_state = "science1"
- anchored = 1.0
- opacity = 0
- density = 0
-
-/obj/effect/sign/chemistry
- desc = "A warning sign which reads 'CHEMISTY'"
- name = "CHEMISTRY"
- icon = 'icons/obj/decals.dmi'
- icon_state = "chemistry1"
- anchored = 1.0
- opacity = 0
- density = 0
-
-/obj/effect/sign/botany
- desc = "A warning sign which reads 'HYDROPONICS'"
- name = "HYDROPONICS"
- icon = 'icons/obj/decals.dmi'
- icon_state = "hydro1"
- anchored = 1.0
- opacity = 0
- density = 0
\ No newline at end of file
diff --git a/code/game/objects/hud.dm b/code/game/objects/hud.dm
deleted file mode 100644
index a3a712affb3..00000000000
--- a/code/game/objects/hud.dm
+++ /dev/null
@@ -1,21 +0,0 @@
-/obj/hud
- name = "hud"
- unacidable = 1
- var/mob/mymob = null
- var/list/adding = null
- var/list/other = null
- var/obj/screen/druggy = null
- var/vimpaired = null
- var/obj/screen/alien_view = null
- var/obj/screen/g_dither = null
- var/obj/screen/blurry = null
- var/list/darkMask = null
- var/obj/screen/r_hand_hud_object = null
- var/obj/screen/l_hand_hud_object = null
- var/show_intent_icons = 1
- var/list/obj/screen/hotkeybuttons = null
- var/hotkey_ui_hidden = 0 //This is to hide the buttons that can be used via hotkeys. (hotkeybuttons list of buttons)
-
- var/list/obj/screen/item_action/item_action_list = null //Used for the item action ui buttons.
-
- var/h_type = /obj/screen //this is like...the most pointless thing ever. Use a god damn define!
\ No newline at end of file
diff --git a/code/game/objects/sign_decals.dm b/code/game/objects/sign_decals.dm
deleted file mode 100644
index 10a08d81363..00000000000
--- a/code/game/objects/sign_decals.dm
+++ /dev/null
@@ -1,49 +0,0 @@
-/obj/effect/sign/barsign
- icon = 'barsigns.dmi'
- icon_state = "empty"
- anchored = 1
- New()
- ChangeSign(pick("pinkflamingo", "magmasea", "limbo", "rustyaxe", "armokbar", "brokendrum", "meadbay", "thedamnwall", "thecavern", "cindikate", "theorchard", "thesaucyclown", "theclownshead"))
- return
- proc/ChangeSign(var/Text)
- src.icon_state = "[Text]"
- //on = 0
- //brightness_on = 4 //uncomment these when the lighting fixes get in
- return
-
-/obj/effect/sign/securearea/ex_act(severity)
- switch(severity)
- if(1.0)
- del(src)
- return
- if(2.0)
- del(src)
- return
- if(3.0)
- del(src)
- return
- else
- return
-
-/obj/effect/sign/securearea/blob_act()
- del(src)
- return
-
-
-/obj/effect/sign/ex_act(severity)
- switch(severity)
- if(1.0)
- del(src)
- return
- if(2.0)
- del(src)
- return
- if(3.0)
- del(src)
- return
- else
- return
-
-/obj/effect/sign/blob_act()
- del(src)
- return
\ No newline at end of file
diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm
index 9446a318de6..5d91c0caa87 100644
--- a/code/game/objects/structures/signs.dm
+++ b/code/game/objects/structures/signs.dm
@@ -131,16 +131,3 @@
name = "\improper HYDROPONICS"
desc = "A warning sign which reads 'HYDROPONICS'"
icon_state = "hydro1"
-
-/obj/structure/sign/barsign
- icon = 'barsigns.dmi'
- icon_state = "empty"
- anchored = 1
- New()
- ChangeSign(pick("pinkflamingo", "magmasea", "limbo", "rustyaxe", "armokbar", "brokendrum", "meadbay", "thedamnwall", "thecavern", "cindikate", "theorchard", "thesaucyclown", "theclownshead"))
- return
- proc/ChangeSign(var/Text)
- src.icon_state = "[Text]"
- //on = 0
- //brightness_on = 4 //uncomment these when the lighting fixes get in
- return
diff --git a/code/modules/chemical/Chemistry-Machinery.dm b/code/modules/chemical/Chemistry-Machinery.dm
deleted file mode 100644
index 7a07b171b76..00000000000
--- a/code/modules/chemical/Chemistry-Machinery.dm
+++ /dev/null
@@ -1,851 +0,0 @@
-#define SOLID 1
-#define LIQUID 2
-#define GAS 3
-
-/obj/machinery/chem_dispenser/
- name = "chem dispenser"
- density = 1
- anchored = 1
- icon = 'chemical.dmi'
- icon_state = "dispenser"
- use_power = 1
- idle_power_usage = 40
- var/energy = 25
- var/max_energy = 75
- var/amount = 30
- var/beaker = null
- var/list/dispensable_reagents = list("hydrogen","lithium","carbon","nitrogen","oxygen","fluorine","sodium","aluminum","silicon","phosphorus","sulfur","chlorine","potassium","iron","copper","mercury","tungsten","radium","water","ethanol","sugar","acid","milk",)
- var/charging_reagents = 0
-
- ex_act(severity)
- switch(severity)
- if(1.0)
- del(src)
- return
- if(2.0)
- if (prob(50))
- del(src)
- return
-
- blob_act()
- if (prob(50))
- del(src)
-
- meteorhit()
- del(src)
- return
-
- proc/updateWindow(mob/user as mob)
- winset(user, "chemdispenser.energy", "text=\"Energy: [round(src.energy)]\"")
- winset(user, "chemdispenser.amount", "text=\"Amount: [src.amount]\"")
- if (beaker)
- winset(user, "chemdispenser.eject", "text=\"Eject beaker\"")
- else
- winset(user, "chemdispenser.eject", "text=\"\[Insert beaker\]\"")
- if(charging_reagents)
- winset(user, "chemdispenser.charging", "text=\"Charging\"")
- else
- winset(user, "chemdispenser.charging", "text=\"Not Charging\"")
- proc/initWindow(mob/user as mob)
- var/i = 0
- var list/nameparams = params2list(winget(user, "chemdispenser_reagents.template_name", "pos;size;type;image;image-mode"))
- var list/buttonparams = params2list(winget(user, "chemdispenser_reagents.template_dispense", "pos;size;type;image;image-mode;text;is-flat"))
- for(var/re in dispensable_reagents)
- for(var/da in typesof(/datum/reagent) - /datum/reagent)
- var/datum/reagent/temp = new da()
- if(temp.id == re)
- var list/newparams1 = nameparams.Copy()
- var list/newparams2 = buttonparams.Copy()
- var/posy = 8 + 40 * i
- newparams1["pos"] = text("8,[posy]")
- newparams2["pos"] = text("248,[posy]")
- newparams1["parent"] = "chemdispenser_reagents"
- newparams2["parent"] = "chemdispenser_reagents"
- newparams1["text"] = temp.name
- newparams2["command"] = text("skincmd \"chemdispenser;[temp.id]\"")
- winset(user, "chemdispenser_reagent_name[i]", list2params(newparams1))
- winset(user, "chemdispenser_reagent_dispense[i]", list2params(newparams2))
- i++
- winset(user, "chemdispenser_reagents", "size=340x[8 + 40 * i]")
-
- SkinCmd(mob/user as mob, var/data as text)
- if(stat & BROKEN) return
- if(usr.stat || usr.restrained()) return
- if(!in_range(src, usr)) return
-
- usr.machine = src
-
- if (data == "amountc")
- var/num = text2num(input("Enter desired output amount", "Amount", "30"))
- if (num)
- amount = text2num(num)
- else if (data == "eject")
- if (src.beaker)
- var/obj/item/weapon/reagent_containers/glass/B = src.beaker
- B.loc = src.loc
- src.beaker = null
- else if (data == "tcharge")
- src.charging_reagents = !src.charging_reagents
- else if (copytext(data, 1, 7) == "amount")
- if (text2num(copytext(data, 7)))
- amount = text2num(copytext(data, 7))
- else
- if (dispensable_reagents.Find(data) && beaker != null)
- var/obj/item/weapon/reagent_containers/glass/B = src.beaker
- var/datum/reagents/R = B.reagents
- var/space = R.maximum_volume - R.total_volume
- R.add_reagent(data, min(amount, round(energy) * 10, space))
- energy = max(energy - min(amount, space) / 10, 0)
-
- amount = round(amount, 10) // Chem dispenser doesnt really have that much prescion
- if (amount < 0) // Since the user can actually type the commands himself, some sanity checking
- amount = 0
- if (amount > 100)
- amount = 100
-
- for(var/mob/player)
- if (player.machine == src && player.client)
- updateWindow(player)
-
- src.add_fingerprint(usr)
- return
-
- attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
- if (istype(W,/obj/item/weapon/vending_charge/chemistry))
- var/obj/item/weapon/vending_charge/chemistry/C = W
- energy += C.charge_amt
- del(C)
- user << "You load the charge into the machine."
- return
-
- if(!istype(W, /obj/item/weapon/reagent_containers/glass))
- return
-
- var/obj/item/weapon/reagent_containers/glass/B = W
-
- if(src.beaker)
- user << "A beaker is already loaded into the machine."
- return
-
- src.beaker = B
- user.drop_item()
- B.loc = src
- user << "You add the beaker to the machine!"
- for(var/mob/player)
- if (player.machine == src && player.client)
- updateWindow(player)
-
- attack_ai(mob/user as mob)
- return src.attack_hand(user)
-
- attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
- attack_hand(mob/user as mob)
- if(stat & BROKEN)
- return
- user.machine = src
-
- initWindow(user)
- updateWindow(user)
- winshow(user, "chemdispenser", 1)
- user.skincmds["chemdispenser"] = src
- return
-
-
-/obj/machinery/chem_dispenser/process()
- if(stat & NOPOWER) return
- if(!charging_reagents || src.energy > 30) return
-
- use_power(10000)
- src.energy += 0.05
-
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-/obj/machinery/chem_master/
- name = "ChemMaster 3000"
- density = 1
- anchored = 1
- icon = 'chemical.dmi'
- icon_state = "mixer0"
- use_power = 1
- idle_power_usage = 20
- var/beaker = null
- var/mode = 0
- var/condi = 0
- var/bottlesprite = "1" //yes, strings
- var/pillsprite = "1"
- var/client/has_sprites = list()
-
- New()
- var/datum/reagents/R = new/datum/reagents(100)
- reagents = R
- R.my_atom = src
-
- ex_act(severity)
- switch(severity)
- if(1.0)
- del(src)
- return
- if(2.0)
- if (prob(50))
- del(src)
- return
-
- blob_act()
- if (prob(50))
- del(src)
-
- meteorhit()
- del(src)
- return
-
- attackby(var/obj/item/weapon/reagent_containers/glass/B as obj, var/mob/user as mob)
- if(!istype(B, /obj/item/weapon/reagent_containers/glass) && !istype(B,/obj/item/weapon/reagent_containers/syringe))
- return
-
- if(src.beaker)
- if(istype(beaker,/obj/item/weapon/reagent_containers/syringe))
- user << "A syringe is already loaded into the machine."
- else
- user << "A beaker is already loaded into the machine."
- return
-
- src.beaker = B
- user.drop_item()
- B.loc = src
- if(istype(B,/obj/item/weapon/reagent_containers/syringe))
- user << "You add the syringe to the machine!"
- src.updateUsrDialog()
- icon_state = "mixers"
- else
- user << "You add the beaker to the machine!"
- src.updateUsrDialog()
- icon_state = "mixer1"
-
- Topic(href, href_list)
- if(stat & BROKEN) return
- if(usr.stat || usr.restrained()) return
- if(!in_range(src, usr)) return
-
- src.add_fingerprint(usr)
- usr.machine = src
- if(!beaker) return
- var/datum/reagents/R = beaker:reagents
-
- if (href_list["analyze"])
- var/dat = ""
- if(!condi)
- if(href_list["name"] == "Blood")
- var/datum/reagent/blood/G
- for(var/datum/reagent/F in R.reagent_list)
- if(F.name == href_list["name"])
- G = F
- break
- var/A = G.name
- var/B = G.data["blood_type"]
- var/C = G.data["blood_DNA"]
- dat += "
Chemmaster 3000Chemical infos:
Name:
[A]
Description:
Blood Type: [B]
DNA: [C]
(Back)"
- else
- dat += "Chemmaster 3000Chemical infos:
Name:
[href_list["name"]]
Description:
[href_list["desc"]]
(Back)"
- else
- dat += "Condimaster 3000Condiment infos:
Name:
[href_list["name"]]
Description:
[href_list["desc"]]
(Back)"
- usr << browse(dat, "window=chem_master;size=575x400")
- return
-
- else if (href_list["add1"])
- R.trans_id_to(src, href_list["add1"], 1)
- else if (href_list["add5"])
- R.trans_id_to(src, href_list["add5"], 5)
- else if (href_list["add10"])
- R.trans_id_to(src, href_list["add10"], 10)
- else if (href_list["addall"])
- var/temp_amt = R.get_reagent_amount(href_list["addall"])
- R.trans_id_to(src, href_list["addall"], temp_amt)
-
- else if (href_list["remove1"])
- reagents.remove_reagent(href_list["remove1"], 1)
- if(mode) R.add_reagent(href_list["remove1"], 1)
- else if (href_list["remove5"])
- reagents.remove_reagent(href_list["remove5"], 5)
- if(mode) R.add_reagent(href_list["remove5"], 5)
- else if (href_list["remove10"])
- reagents.remove_reagent(href_list["remove10"], 10)
- if(mode) R.add_reagent(href_list["remove10"], 10)
- else if (href_list["removeall"])
- if(mode)
- var/temp_amt = reagents.get_reagent_amount(href_list["removeall"])
- R.add_reagent(href_list["removeall"], temp_amt)
- reagents.del_reagent(href_list["removeall"])
-
- else if (href_list["toggle"])
- if(mode)
- mode = 0
- else
- mode = 1
- else if (href_list["main"])
- attack_hand(usr)
- return
- else if (href_list["eject"])
- beaker:loc = src.loc
- beaker = null
- reagents.clear_reagents()
- icon_state = "mixer0"
- else if (href_list["createpill"])
- var/name = reject_bad_text(input(usr,"Name:","Name your pill!",reagents.get_master_reagent_name()))
- var/obj/item/weapon/reagent_containers/pill/P = new/obj/item/weapon/reagent_containers/pill(src.loc)
- if(!name) name = reagents.get_master_reagent_name()
- P.name = "[name] pill"
- P.pixel_x = rand(-7, 7) //random position
- P.pixel_y = rand(-7, 7)
- P.icon_state = "pill"+pillsprite
- reagents.trans_to(P,50)
- else if (href_list["createbottle"])
- if(!condi)
- var/name = reject_bad_text(input(usr,"Name:","Name your bottle!",reagents.get_master_reagent_name()))
- var/obj/item/weapon/reagent_containers/glass/bottle/P = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc)
- if(!name) name = reagents.get_master_reagent_name()
- P.name = "[name] bottle"
- P.pixel_x = rand(-7, 7) //random position
- P.pixel_y = rand(-7, 7)
- P.icon_state = "bottle"+bottlesprite
- reagents.trans_to(P,30)
- else
- var/obj/item/weapon/reagent_containers/food/condiment/P = new/obj/item/weapon/reagent_containers/food/condiment(src.loc)
- reagents.trans_to(P,50)
- else if(href_list["change_pill"])
- #define MAX_PILL_SPRITE 20 //max icon state of the pill sprites
- var/dat = ""
- for(var/i = 1 to MAX_PILL_SPRITE)
- dat += " |
"
- dat += "
"
- usr << browse(dat, "window=chem_master")
- return
- else if(href_list["change_bottle"])
- #define MAX_BOTTLE_SPRITE 20 //max icon state of the bottle sprites
- var/dat = ""
- for(var/i = 1 to MAX_BOTTLE_SPRITE)
- dat += " |
"
- dat += "
"
- usr << browse(dat, "window=chem_master")
- return
- else if(href_list["pill_sprite"])
- pillsprite = href_list["pill_sprite"]
- else if(href_list["bottle_sprite"])
- bottlesprite = href_list["bottle_sprite"]
- else
- usr << browse(null, "window=chem_master")
- src.updateUsrDialog()
- return
-
- attack_ai(mob/user as mob)
- return src.attack_hand(user)
-
- attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
- attack_hand(mob/user as mob)
- if(stat & BROKEN)
- spawn()
- if(!(user.client in has_sprites)) //yes, it's in three places, so they get downloaded even when they arent going to be shown, because they could be in the future
- spawn()
- has_sprites += user.client
- for(var/i = 1 to MAX_PILL_SPRITE)
- usr << browse_rsc(icon('chemical.dmi', "pill" + num2text(i)), "pill[i].png")
- for(var/i = 1 to MAX_BOTTLE_SPRITE)
- usr << browse_rsc(icon('chemical.dmi', "bottle" + num2text(i)), "bottle[i].png")
- return
- user.machine = src
- var/dat = ""
- if(!beaker)
- dat = "Please insert beaker.
"
- dat += "Close"
- if(!(user.client in has_sprites))
- spawn()
- has_sprites += user.client
- for(var/i = 1 to MAX_PILL_SPRITE)
- usr << browse_rsc(icon('chemical.dmi', "pill" + num2text(i)), "pill[i].png")
- for(var/i = 1 to MAX_BOTTLE_SPRITE)
- usr << browse_rsc(icon('chemical.dmi', "bottle" + num2text(i)), "bottle[i].png")
- else
- if(!(user.client in has_sprites))
- has_sprites += user.client
- for(var/i = 1 to MAX_PILL_SPRITE)
- usr << browse_rsc(icon('chemical.dmi', "pill" + num2text(i)), "pill[i].png")
- for(var/i = 1 to MAX_BOTTLE_SPRITE)
- usr << browse_rsc(icon('chemical.dmi', "bottle" + num2text(i)), "bottle[i].png")
- var/datum/reagents/R = beaker:reagents
- dat += "Eject beaker and Clear Buffer
"
- if(!R.total_volume)
- dat += "Beaker is empty."
- else
- dat += "Add to buffer:
"
- for(var/datum/reagent/G in R.reagent_list)
- dat += "[G.name] , [G.volume] Units - "
- dat += "(Analyze) "
- dat += "(1) "
- if(G.volume >= 5) dat += "(5) "
- if(G.volume >= 10) dat += "(10) "
- dat += "(All)
"
- if(!mode)
- dat += "
Transfer to disposal:
"
- else
- dat += "
Transfer to beaker:
"
- if(reagents.total_volume)
- for(var/datum/reagent/N in reagents.reagent_list)
- dat += "[N.name] , [N.volume] Units - "
- dat += "(Analyze) "
- dat += "(1) "
- if(N.volume >= 5) dat += "(5) "
- if(N.volume >= 10) dat += "(10) "
- dat += "(All)
"
- else
- dat += "Empty
"
- if(!condi)
- dat += "
Create pill (50 units max)
"
- dat += "Create bottle (30 units max)
"
- else
- dat += "Create bottle (50 units max)"
- if(!condi)
- user << browse("Chemmaster 3000Chemmaster menu:
[dat]", "window=chem_master;size=575x400")
- else
- user << browse("Condimaster 3000Condimaster menu:
[dat]", "window=chem_master;size=575x400")
- onclose(user, "chem_master")
- return
-
-
-/obj/machinery/chem_master/condimaster
- name = "CondiMaster 3000"
- condi = 1
-
-////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////
-
-/obj/machinery/computer/pandemic
- name = "PanD.E.M.I.C 2200"
- density = 1
- anchored = 1
- icon = 'chemical.dmi'
- icon_state = "mixer0"
- var/temphtml = ""
- var/wait = null
- var/obj/item/weapon/reagent_containers/glass/beaker = null
-
-
- set_broken()
- icon_state = (src.beaker?"mixer1_b":"mixer0_b")
- stat |= BROKEN
-
-
- power_change()
-
- if(stat & BROKEN)
- icon_state = (src.beaker?"mixer1_b":"mixer0_b")
-
- else if(powered())
- icon_state = (src.beaker?"mixer1":"mixer0")
- stat &= ~NOPOWER
-
- else
- spawn(rand(0, 15))
- src.icon_state = (src.beaker?"mixer1_nopower":"mixer0_nopower")
- stat |= NOPOWER
-
-
- Topic(href, href_list)
- if(stat & (NOPOWER|BROKEN)) return
- if(usr.stat || usr.restrained()) return
- if(!in_range(src, usr)) return
-
- usr.machine = src
- if(!beaker) return
-
- if (href_list["create_vaccine"])
- if(!src.wait)
- var/obj/item/weapon/reagent_containers/glass/bottle/B = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc)
- if(B)
- var/vaccine_type = text2path(href_list["create_vaccine"])//the path is received as string - converting
- var/datum/disease/D = new vaccine_type
- if(D)
- B.name = "[D.name] vaccine bottle"
- B.reagents.add_reagent("vaccine",15,vaccine_type)
- del(D)
- wait = 1
- var/datum/reagents/R = beaker.reagents
- var/datum/reagent/blood/Blood = null
- for(var/datum/reagent/blood/L in R.reagent_list)
- if(L)
- Blood = L
- break
- var/list/res = Blood.data["resistances"]
- spawn(res.len*500)
- src.wait = null
- else
- src.temphtml = "The replicator is not ready yet."
- src.updateUsrDialog()
- return
- else if (href_list["create_virus_culture"])
- if(!wait)
- var/obj/item/weapon/reagent_containers/glass/bottle/B = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc)
- B.icon_state = "bottle3"
- var/type = text2path(href_list["create_virus_culture"])//the path is received as string - converting
- var/datum/disease/D = new type
- var/list/data = list("viruses"=list(D))
- var/name = sanitize(input(usr,"Name:","Name the culture",D.name))
- if(!name || name == " ") name = D.name
- B.name = "[name] culture bottle"
- B.desc = "A small bottle. Contains [D.agent] culture in synthblood medium."
- B.reagents.add_reagent("blood",20,data)
- src.updateUsrDialog()
- wait = 1
- spawn(2000)
- src.wait = null
- else
- src.temphtml = "The replicator is not ready yet."
- src.updateUsrDialog()
- return
- else if (href_list["empty_beaker"])
- beaker.reagents.clear_reagents()
- src.updateUsrDialog()
- return
- else if (href_list["eject"])
- beaker:loc = src.loc
- beaker = null
- icon_state = "mixer0"
- src.updateUsrDialog()
- return
- else if(href_list["clear"])
- src.temphtml = ""
- src.updateUsrDialog()
- return
- else
- usr << browse(null, "window=pandemic")
- src.updateUsrDialog()
- return
-
- src.add_fingerprint(usr)
- return
-
- attack_ai(mob/user as mob)
- return src.attack_hand(user)
-
- attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
- attack_hand(mob/user as mob)
- if(stat & (NOPOWER|BROKEN))
- return
- user.machine = src
- var/dat = ""
- if(src.temphtml)
- dat = "[src.temphtml]
Main Menu"
- else if(!beaker)
- dat += "Please insert beaker.
"
- dat += "Close"
- else
- var/datum/reagents/R = beaker.reagents
- var/datum/reagent/blood/Blood = null
- for(var/datum/reagent/blood/B in R.reagent_list)
- if(B)
- Blood = B
- break
- if(!R.total_volume||!R.reagent_list.len)
- dat += "The beaker is empty
"
- else if(!Blood)
- dat += "No blood sample found in beaker"
- else
- dat += "Blood sample data:
"
- dat += "Blood DNA: [(Blood.data["blood_DNA"]||"none")]
"
- dat += "Blood Type: [(Blood.data["blood_type"]||"none")]
"
-
-
- if(Blood.data["viruses"])
- var/list/vir = Blood.data["viruses"]
- if(vir.len)
- for(var/datum/disease/D in Blood.data["viruses"])
- if(!D.hidden[PANDEMIC])
-
- dat += "Disease Agent: [D?"[D.agent] - Create virus culture bottle":"none"]
"
- dat += "Common name: [(D.name||"none")]
"
- dat += "Description: [(D.desc||"none")]
"
- dat += "Possible cure: [(D.cure||"none")]
"
-
- dat += "Contains antibodies to: "
- if(Blood.data["resistances"])
- var/list/res = Blood.data["resistances"]
- if(res.len)
- dat += ""
- for(var/type in Blood.data["resistances"])
- var/datum/disease/DR = new type
- dat += "- [DR.name] - Create vaccine bottle
"
- del(DR)
- dat += "
"
- else
- dat += "nothing
"
- else
- dat += "nothing
"
- dat += "
Eject beaker[((R.total_volume&&R.reagent_list.len) ? "-- Empty beaker":"")]
"
- dat += "Close"
-
- user << browse("[src.name]
[dat]", "window=pandemic;size=575x400")
- onclose(user, "pandemic")
- return
-
- attackby(var/obj/I as obj, var/mob/user as mob)
- if(istype(I, /obj/item/weapon/screwdriver))
- playsound(src.loc, 'Screwdriver.ogg', 50, 1)
- if(do_after(user, 20))
- if (src.stat & BROKEN)
- user << "\blue The broken glass falls out."
- var/obj/structure/computerframe/A = new /obj/structure/computerframe(src.loc)
- new /obj/item/weapon/shard(src.loc)
- var/obj/item/weapon/circuitboard/pandemic/M = new /obj/item/weapon/circuitboard/pandemic(A)
- for (var/obj/C in src)
- C.loc = src.loc
- A.circuit = M
- A.state = 3
- A.icon_state = "3"
- A.anchored = 1
- del(src)
- else
- user << "\blue You disconnect the monitor."
- var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- var/obj/item/weapon/circuitboard/pandemic/M = new /obj/item/weapon/circuitboard/pandemic(A)
- for (var/obj/C in src)
- C.loc = src.loc
- A.circuit = M
- A.state = 4
- A.icon_state = "4"
- A.anchored = 1
- del(src)
- else if(istype(I, /obj/item/weapon/reagent_containers/glass))
- if(stat & (NOPOWER|BROKEN)) return
- if(src.beaker)
- user << "A beaker is already loaded into the machine."
- return
-
- src.beaker = I
- user.drop_item()
- I.loc = src
- user << "You add the beaker to the machine!"
- src.updateUsrDialog()
- icon_state = "mixer1"
-
- else
- ..()
- return
-////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////
-/obj/machinery/reagentgrinder
- name = "Reagent Grinder"
- icon = 'kitchen.dmi'
- icon_state = "juicer1"
- layer = 2.9
- density = 1
- anchored = 1
- use_power = 1
- idle_power_usage = 5
- active_power_usage = 100
- var/obj/item/weapon/reagent_containers/beaker = null
- var/global/list/allowed_items = list ( // reagent = amount, amount of 0 indicate to determine the amount from the reagents list, only implemented on plants for now
- /obj/item/stack/sheet/plasma = list("plasma" = 20),
- /obj/item/stack/sheet/uranium = list("uranium" = 20),
- /obj/item/stack/sheet/clown = list("banana" = 20),
- /obj/item/stack/sheet/silver = list("silver" = 20),
- /obj/item/stack/sheet/gold = list("gold" = 20),
-/*
- /obj/item/weapon/reagent_containers/food/snacks/grown/banana = list("banana" = 0),
- /obj/item/weapon/reagent_containers/food/snacks/grown/carrot = list("imidazoline" = 0),
- /obj/item/weapon/reagent_containers/food/snacks/grown/corn = list("cornoil" = 0),
- /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap = list("psilocybin" = 0),
- /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita = list("amatoxin" = 0, "psilocybin" = 0),
- /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/angel = list("amatoxin" = 0, "psilocybin" = 0),
- /obj/item/weapon/reagent_containers/food/snacks/grown/chili = list("capsaicin" = 0),
- /obj/item/weapon/reagent_containers/food/snacks/grown/icepepper = list("frostoil" = 0),
-*/
- /obj/item/weapon/grown/nettle = list("acid" = 0),
- /obj/item/weapon/grown/deathnettle = list("pacid" = 0),
- )
-
-/obj/machinery/reagentgrinder/New()
- ..()
- beaker = new /obj/item/weapon/reagent_containers/glass/large(src)
- return
-
-/obj/machinery/reagentgrinder/update_icon()
- icon_state = "juicer"+num2text(!isnull(beaker))
- return
-
-
-/obj/machinery/reagentgrinder/attackby(var/obj/item/O as obj, var/mob/user as mob)
- if (istype(O,/obj/item/weapon/reagent_containers/glass) || \
- istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass))
- if (beaker)
- return 1
- else
- src.beaker = O
- user.drop_item()
- O.loc = src
- src.verbs += /obj/machinery/reagentgrinder/verb/detach
- update_icon()
- src.updateUsrDialog()
- return 0
- if (!is_type_in_list(O, allowed_items))
- user << "Cannot refine into a reagent."
- return 1
- user.before_take_item(O)
- O.loc = src
- src.updateUsrDialog()
- return 0
-
-/obj/machinery/reagentgrinder/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
-/obj/machinery/reagentgrinder/attack_ai(mob/user as mob)
- return 0
-
-/obj/machinery/reagentgrinder/attack_hand(mob/user as mob)
- user.machine = src
- interact(user)
-
-/obj/machinery/reagentgrinder/proc/interact(mob/user as mob) // The microwave Menu
- var/is_chamber_empty = 0
- var/is_beaker_ready = 0
- var/processing_chamber = ""
- var/beaker_contents = ""
-
- for (var/i in allowed_items)
- for (var/obj/item/O in src.contents)
- if (!istype(O,i))
- continue
- processing_chamber+= "some [O]
"
- break
- if (!processing_chamber)
- is_chamber_empty = 1
- processing_chamber = "Nothing."
- if (!beaker)
- beaker_contents = "\The [src] has no beaker attached."
- else if (!beaker.reagents.total_volume)
- beaker_contents = "\The [src] has attached an empty beaker."
- is_beaker_ready = 1
- else if (beaker.reagents.total_volume < beaker.reagents.maximum_volume)
- beaker_contents = "\The [src] has attached a beaker with something."
- is_beaker_ready = 1
- else
- beaker_contents = "\The [src] has attached a beaker and the beaker is full!"
-
- var/dat = {"
-Processing chamber contains:
-[processing_chamber]
-[beaker_contents]
-"}
- if (is_beaker_ready && !is_chamber_empty && !(stat & (NOPOWER|BROKEN)))
- dat += "Turn on!
"
- if (beaker)
- dat += "Detach a beaker!
"
- user << browse("Reagent Grinder[dat]", "window=reagentgrinder")
- onclose(user, "reagentgrinder")
- return
-
-
-/obj/machinery/reagentgrinder/Topic(href, href_list)
- if(..())
- return
- usr.machine = src
- switch(href_list["action"])
- if ("grind")
- grind()
-
- if ("detach")
- detach()
- src.updateUsrDialog()
- return
-
-/obj/machinery/reagentgrinder/verb/detach()
- set category = "Object"
- set name = "Detach Beaker from the grinder"
- set src in oview(1)
- if (usr.stat != 0)
- return
- if (!beaker)
- return
- src.verbs -= /obj/machinery/reagentgrinder/verb/detach
- beaker.loc = src.loc
- beaker = null
- update_icon()
-
-/obj/machinery/reagentgrinder/proc/get_allowed_by_id(var/obj/item/weapon/grown/O)
- for (var/i in allowed_items)
- if (istype(O, i))
- return allowed_items[i]
-
-/obj/machinery/reagentgrinder/proc/get_grownweapon_amount(var/obj/item/weapon/grown/O)
- if (!istype(O))
- return 5
- else if (O.potency == -1)
- return 5
- else
- return round(O.potency)
-
-/obj/machinery/reagentgrinder/proc/get_grind_id(var/obj/item/stack/sheet/O)
- for (var/i in allowed_items)
- if (istype(O, i))
- return allowed_items[i]
-
-/obj/machinery/reagentgrinder/proc/get_grind_amount(var/obj/item/stack/sheet/O)
- return 20
-
-/obj/machinery/reagentgrinder/proc/grind()
- power_change()
- if(stat & (NOPOWER|BROKEN))
- return
- if (!beaker || beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
- return
- playsound(src.loc, 'juicer.ogg', 20, 1)
- for (var/obj/item/weapon/reagent_containers/food/snacks/O in src.contents)
- if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
- break
- var/allowed = get_allowed_by_id(O)
- for (var/r_id in allowed)
- var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume
- var/amount = allowed[r_id]
- if (amount == 0)
- if (O.reagents != null && O.reagents.has_reagent(r_id))
- beaker.reagents.add_reagent(r_id,min(O.reagents.get_reagent_amount(r_id), space))
- else
- beaker.reagents.add_reagent(r_id,min(amount, space))
-
- if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
- break
- del(O)
- for (var/obj/item/stack/sheet/O in src.contents)
- var/allowed = get_allowed_by_id(O)
- if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
- break
- for(var/i = 1; i <= round(O.amount, 1); i++)
- for (var/r_id in allowed)
- var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume
- var/amount = allowed[r_id]
- beaker.reagents.add_reagent(r_id,min(amount, space))
- if (space < amount)
- break
- if (i == round(O.amount, 1))
- del(O)
- break
- for (var/obj/item/weapon/grown/O in src.contents)
- if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
- break
- var/allowed = get_allowed_by_id(O)
- for (var/r_id in allowed)
- var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume
- var/amount = allowed[r_id]
- if (amount == 0)
- if (O.reagents != null && O.reagents.has_reagent(r_id))
- beaker.reagents.add_reagent(r_id,min(O.reagents.get_reagent_amount(r_id), space))
- else
- beaker.reagents.add_reagent(r_id,min(amount, space))
-
- if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
- break
- del(O)
\ No newline at end of file
diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm
deleted file mode 100644
index 29508185e15..00000000000
--- a/code/modules/chemical/Chemistry-Tools.dm
+++ /dev/null
@@ -1,4211 +0,0 @@
-//BUG!!!: reactions on splashing etc cause errors because stuff gets deleted before it executes.
-// Bandaid fix using spawn - very ugly, need to fix this.
-
-///////////////////////////////Grenades
-//Includes changes by Mord_Sith to allow for buildable cameras
-/obj/item/weapon/chem_grenade
- name = "Grenade Casing"
- icon_state = "chemg"
- icon = 'chemical.dmi'
- item_state = "flashbang"
- w_class = 2.0
- force = 2.0
- var/obj/item/weapon/reagent_containers/glass/beaker_one
- var/obj/item/weapon/reagent_containers/glass/beaker_two
- var/obj/item/device/assembly/attached_device
- var/active = 0
- var/exploding = 0
- var/state = 0
- var/path = 0
- var/motion = 0
- var/direct = "SOUTH"
- var/obj/item/weapon/circuitboard/circuit = null
- var/list/allowed_containers = list("/obj/item/weapon/reagent_containers/glass/beaker", "/obj/item/weapon/reagent_containers/glass/dispenser", "/obj/item/weapon/reagent_containers/glass/bottle")
- var/affected_area = 3
- var/mob/attacher = "Unknown"
- throw_speed = 4
- throw_range = 20
- flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
- slot_flags = SLOT_BELT
-
- attackby(var/obj/item/weapon/W, var/mob/user)
- if(path || !active)
- switch(active)
- if(0)
- if(istype(W, /obj/item/device/assembly/igniter))
- active = 1
- icon_state = initial(icon_state) +"_ass"
- name = "unsecured grenade"
- path = 1
- del(W)
- if(1)
- if(istype(W, /obj/item/weapon/reagent_containers/glass))
- if(beaker_one && beaker_two)
- user << "\red There are already two beakers inside, remove one first!"
- return
-
- if(!beaker_one)
- beaker_one = W
- user.drop_item()
- W.loc = src
- user << "\blue You insert the beaker into the casing."
- else if(!beaker_two)
- beaker_two = W
- user.drop_item()
- W.loc = src
- user << "\blue You insert the beaker into the casing."
-
- else if(istype(W, /obj/item/device/assembly/signaler) || istype(W, /obj/item/device/assembly/timer) || istype(W, /obj/item/device/assembly/infra) || istype(W, /obj/item/device/assembly/prox_sensor))
- if(attached_device)
- user << "\red There is already an device attached to the controls, remove it first!"
- return
-
- attached_device = W
- user.drop_item()
- W.loc = src
- user << "\blue You attach the [W] to the grenade controls!"
- W.master = src
- bombers += "[key_name(user)] attached a [W] to a grenade casing."
- message_admins("[key_name_admin(user)] attached a [W] to a grenade casing.")
- log_game("[key_name_admin(user)] attached a [W] to a grenade casing.")
- attacher = key_name(user)
-
- else if(istype(W, /obj/item/weapon/screwdriver))
- if(beaker_one && beaker_two && attached_device)
- user << "\blue You lock the assembly."
- playsound(src.loc, 'Screwdriver.ogg', 25, -3)
- name = "grenade"
- icon_state = initial(icon_state) + "_locked"
- active = 2
- path = 1
- else
- user << "\red You need to add all components before locking the assembly."
- if(2)
- if(istype(W, /obj/item/weapon/screwdriver))
- user << "\blue You disarm the [src]!"
- playsound(src.loc, 'Screwdriver.ogg', 25, -3)
- name = "grenade casing"
- icon_state = initial(icon_state) +"_ass"
- active = 1
- path = 1
-
- if(path != 1)
- if(!istype(src.loc,/turf))
- user << "\red You need to put the canister on the ground to do that!"
- else
- switch(state)
- if(0)
- if(istype(W, /obj/item/weapon/wrench))
- playsound(src.loc, 'Ratchet.ogg', 50, 1)
- if(do_after(user, 20))
- user << "\blue You wrench the canister in place."
- src.name = "Camera Assembly"
- src.anchored = 1
- src.state = 1
- path = 2
- if(1)
- if(istype(W, /obj/item/weapon/wrench))
- playsound(src.loc, 'Ratchet.ogg', 50, 1)
- if(do_after(user, 20))
- user << "\blue You unfasten the canister."
- src.name = "Grenade Casing"
- src.anchored = 0
- src.state = 0
- path = 0
- if(istype(W, /obj/item/device/multitool))
- playsound(src.loc, 'Deconstruct.ogg', 50, 1)
- user << "\blue You place the electronics inside the canister."
- src.circuit = W
- user.drop_item()
- W.loc = src
- if(istype(W, /obj/item/weapon/screwdriver) && circuit)
- playsound(src.loc, 'Screwdriver.ogg', 50, 1)
- user << "\blue You screw the circuitry into place."
- src.state = 2
- if(istype(W, /obj/item/weapon/crowbar) && circuit)
- playsound(src.loc, 'Crowbar.ogg', 50, 1)
- user << "\blue You remove the circuitry."
- src.state = 1
- circuit.loc = src.loc
- src.circuit = null
- if(2)
- if(istype(W, /obj/item/weapon/screwdriver) && circuit)
- playsound(src.loc, 'Screwdriver.ogg', 50, 1)
- user << "\blue You unfasten the circuitry."
- src.state = 1
- if(istype(W, /obj/item/weapon/cable_coil))
- if(W:amount >= 1)
- playsound(src.loc, 'Deconstruct.ogg', 50, 1)
- if(do_after(user, 20))
- W:amount -= 1
- if(!W:amount) del(W)
- user << "\blue You add cabling to the canister."
- src.state = 3
- if(3)
- if(istype(W, /obj/item/weapon/wirecutters))
- playsound(src.loc, 'wirecutter.ogg', 50, 1)
- user << "\blue You remove the cabling."
- src.state = 2
- var/obj/item/weapon/cable_coil/A = new /obj/item/weapon/cable_coil( src.loc )
- A.amount = 1
- if(issignaler(W))
- playsound(src.loc, 'Deconstruct.ogg', 50, 1)
- user << "\blue You attach the wireless signaller unit to the circutry."
- user.drop_item()
- W.loc = src
- src.state = 4
- if(4)
- if(istype(W, /obj/item/weapon/crowbar) && !motion)
- playsound(src.loc, 'Crowbar.ogg', 50, 1)
- user << "\blue You remove the remote signalling device."
- src.state = 3
- var/obj/item/device/assembly/signaler/S = locate() in src
- if(S)
- S.loc = src.loc
- else
- new /obj/item/device/assembly/signaler( src.loc, 1 )
- if(isprox(W) && motion == 0)
-// if(W:amount >= 1)
- playsound(src.loc, 'Deconstruct.ogg', 50, 1)
-// W:use(1)
- user << "\blue You attach the proximity sensor."
- user.drop_item()
- W.loc = src
- motion = 1
- if(istype(W, /obj/item/weapon/crowbar) && motion)
- playsound(src.loc, 'Crowbar.ogg', 50, 1)
- user << "\blue You remove the proximity sensor."
- var/obj/item/device/assembly/prox_sensor/S = locate() in src
- if(S)
- S.loc = src.loc
- else
- new /obj/item/device/assembly/prox_sensor( src.loc, 1 )
- motion = 0
- if(istype(W, /obj/item/stack/sheet/glass))
- if(W:amount >= 1)
- playsound(src.loc, 'Deconstruct.ogg', 50, 1)
- if(do_after(user, 20))
- if(W)
- W:use(1)
- user << "\blue You put in the glass lens."
- src.state = 5
- if(5)
- if(istype(W, /obj/item/weapon/crowbar))
- playsound(src.loc, 'Crowbar.ogg', 50, 1)
- user << "\blue You remove the glass lens."
- src.state = 4
- new /obj/item/stack/sheet/glass( src.loc, 2 )
- if(istype(W, /obj/item/weapon/screwdriver))
- playsound(src.loc, 'Screwdriver.ogg', 50, 1)
- user << "\blue You connect the lense."
- var/B
- if(motion == 1)
- B = new /obj/machinery/camera/motion( src.loc )
- else
- B = new /obj/machinery/camera( src.loc )
- B:network = "SS13"
- B:network = input(usr, "Which network would you like to connect this camera to?", "Set Network", "SS13")
- direct = input(user, "Direction?", "Assembling Camera", null) in list( "NORTH", "EAST", "SOUTH", "WEST" )
- B:dir = text2dir(direct)
- del(src)
- return
-
-
- attack_self(mob/user as mob)
- if(active == 2)
- attached_device.attack_self(user)
- return
- user.machine = src
- var/dat = {" Grenade properties:
-
Beaker one: [beaker_one] [beaker_one ? "Remove" : ""]
-
Beaker two: [beaker_two] [beaker_two ? "Remove" : ""]
-
Control attachment: [attached_device ? "[attached_device]" : "None"] [attached_device ? "Remove" : ""]"}
-
- user << browse(dat, "window=trans_valve;size=600x300")
- onclose(user, "trans_valve")
- return
-
-
- Topic(href, href_list)
- ..()
- if (usr.stat || usr.restrained())
- return
- if (src.loc == usr)
- if(href_list["beakerone"])
- beaker_one.loc = get_turf(src)
- beaker_one = null
- if(href_list["beakertwo"])
- beaker_two.loc = get_turf(src)
- beaker_two = null
- if(href_list["rem_device"])
- attached_device.loc = get_turf(src)
- attached_device = null
- if(href_list["device"])
- attached_device.attack_self(usr)
- src.attack_self(usr)
- src.add_fingerprint(usr)
- return
-
- receive_signal(signal)
- if(!(active == 2))
- return //cant go off before it gets primed
- explode()
-
-
- HasProximity(atom/movable/AM as mob|obj)
- if(istype(attached_device, /obj/item/device/assembly/prox_sensor))
- var/obj/item/device/assembly/prox_sensor/D = attached_device
- if (istype(AM, /obj/effect/beam))
- return
- if (AM.move_speed < 12)
- D.sense()
-
-
- proc
- explode()
- if(exploding) return
- exploding = 1
-
- if(reliability)
- playsound(src.loc, 'bamf.ogg', 50, 1)
- beaker_two.reagents.maximum_volume += beaker_one.reagents.maximum_volume // make sure everything can mix
- beaker_one.reagents.update_total()
- beaker_one.reagents.trans_to(beaker_two, beaker_one.reagents.total_volume)
- var/turf/bombturf = get_turf(src)
- var/bombarea = bombturf.loc.name
- var/log_str = "Grenade detonated in [bombarea] with device attacher: [attacher]. Last touched by: [src.fingerprintslast]"
- bombers += log_str
- message_admins(log_str)
- log_game(log_str)
- if(beaker_one.reagents.total_volume) //The possible reactions didnt use up all reagents.
- var/datum/effect/effect/system/steam_spread/steam = new /datum/effect/effect/system/steam_spread()
- steam.set_up(10, 0, get_turf(src))
- steam.attach(src)
- steam.start()
-
- for(var/atom/A in view(affected_area, src.loc))
- if( A == src ) continue
- src.reagents.reaction(A, 1, 10)
-
-
- invisibility = 100 //Why am i doing this?
- spawn(50) //To make sure all reagents can work
- del(src) //correctly before deleting the grenade.
- else
- icon_state = initial(icon_state) + "_locked"
- crit_fail = 1
- if(beaker_one)
- beaker_one.loc = get_turf(src.loc)
- if(beaker_two)
- beaker_two.loc = get_turf(src.loc)
-
- c_state(var/i = 0)
- if(i)
- icon_state = initial(icon_state) + "_armed"
- else
- icon_state = initial(icon_state) + "_locked"
- return
-
- large
- name = "Large Chem Grenade"
- desc = "An oversized grenade that affects a larger area."
- icon_state = "large_grenade"
- allowed_containers = list("/obj/item/weapon/reagent_containers/glass")
- origin_tech = "combat=3;materials=3"
- affected_area = 4
-
- metalfoam
- name = "Metal-Foam Grenade"
- desc = "Used for emergency sealing of air breaches."
- path = 1
- active = 2
-
- New()
- ..()
- attached_device = new /obj/item/device/assembly/timer(src)
- attached_device.master = src
- var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
- var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
-
- B1.reagents.add_reagent("aluminum", 30)
- B2.reagents.add_reagent("foaming_agent", 10)
- B2.reagents.add_reagent("pacid", 10)
-
- beaker_two = B1
- beaker_one = B2
- icon_state = "chemg_locked"
-
- incendiary
- name = "Incendiary Grenade"
- desc = "Used for clearing rooms of living things."
- path = 1
- active = 2
-
- New()
- ..()
- attached_device = new /obj/item/device/assembly/timer(src)
- attached_device.master = src
- var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
- var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
-
- B1.reagents.add_reagent("aluminum", 25)
- B2.reagents.add_reagent("plasma", 25)
- B2.reagents.add_reagent("acid", 25)
-
- beaker_two = B1
- beaker_one = B2
- icon_state = "chemg_locked"
-
- cleaner
- name = "Cleaner Grenade"
- desc = "BLAM!-brand foaming space cleaner. In a special applicator for rapid cleaning of wide areas."
- active = 2
- path = 1
-
- New()
- ..()
- attached_device = new /obj/item/device/assembly/timer(src)
- attached_device.master = src
- var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
- var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
-
- B1.reagents.add_reagent("fluorosurfactant", 40)
- B2.reagents.add_reagent("water", 40)
- B2.reagents.add_reagent("cleaner", 10)
-
- beaker_two = B1
- beaker_one = B2
- icon_state = "chemg_locked"
-
-/obj/effect/syringe_gun_dummy
- name = ""
- desc = ""
- icon = 'chemical.dmi'
- icon_state = "null"
- anchored = 1
- density = 0
-
- New()
- var/datum/reagents/R = new/datum/reagents(15)
- reagents = R
- R.my_atom = src
-
-/obj/item/weapon/gun/grenadelauncher
- name = "grenade launcher"
- icon = 'gun.dmi'
- icon_state = "riotgun"
- item_state = "riotgun"
- w_class = 4.0
- throw_speed = 2
- throw_range = 10
- force = 5.0
- var/list/grenades = new/list()
- var/max_grenades = 3
- m_amt = 2000
-
- examine()
- set src in view()
- ..()
- if (!(usr in view(2)) && usr!=src.loc) return
- usr << "\icon [src] Grenade launcher:"
- usr << "\blue [grenades] / [max_grenades] Grenades."
-
- attackby(obj/item/I as obj, mob/user as mob)
-
- if((istype(I, /obj/item/weapon/chem_grenade)) || (istype(I, /obj/item/weapon/flashbang)) || (istype(I, /obj/item/weapon/smokebomb)) || (istype(I, /obj/item/weapon/mustardbomb)) || (istype(I, /obj/item/weapon/empgrenade)))
- if(grenades.len < max_grenades)
- user.drop_item()
- I.loc = src
- grenades += I
- user << "\blue You put the grenade in the grenade launcher."
- user << "\blue [grenades.len] / [max_grenades] Grenades."
- else
- usr << "\red The grenade launcher cannot hold more grenades."
-
- afterattack(obj/target, mob/user , flag)
-
- if (istype(target, /obj/item/weapon/storage/backpack ))
- return
-
- else if (locate (/obj/structure/table, src.loc))
- return
-
- else if(target == user)
- return
-
- if(grenades.len)
- spawn(0) fire_grenade(target,user)
- else
- usr << "\red The grenade launcher is empty."
-
- proc
- fire_grenade(atom/target, mob/user)
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] fired a grenade!", user), 1)
- user << "\red You fire the grenade launcher!"
- if (istype(grenades[1], /obj/item/weapon/chem_grenade))
- var/obj/item/weapon/chem_grenade/F = grenades[1]
- grenades -= F
- F.loc = user.loc
- F.throw_at(target, 30, 2)
- message_admins("[key_name_admin(user)] fired a chemistry grenade from a grenade launcher ([src.name]).")
- log_game("[key_name_admin(user)] used a chemistry grenade ([src.name]).")
- F.state = 1
- F.icon_state = initial(icon_state)+"_armed"
- playsound(user.loc, 'armbomb.ogg', 75, 1, -3)
- spawn(15)
- F.explode()
- else if (istype(grenades[1], /obj/item/weapon/flashbang))
- var/obj/item/weapon/flashbang/F = grenades[1]
- grenades -= F
- F.loc = user.loc
- F.throw_at(target, 30, 2)
- F.active = 1
- F.icon_state = "flashbang1"
- playsound(user.loc, 'armbomb.ogg', 75, 1, -3)
- spawn(15)
- F.prime()
- else if (istype(grenades[1], /obj/item/weapon/smokebomb))
- var/obj/item/weapon/smokebomb/F = grenades[1]
- grenades -= F
- F.loc = user.loc
- F.throw_at(target, 30, 2)
- F.icon_state = "flashbang1"
- playsound(user.loc, 'armbomb.ogg', 75, 1, -3)
- spawn(15)
- F.prime()
- else if (istype(grenades[1], /obj/item/weapon/mustardbomb))
- var/obj/item/weapon/mustardbomb/F = grenades[1]
- grenades -= F
- F.loc = user.loc
- F.throw_at(target, 30, 2)
- F.icon_state = "flashbang1"
- playsound(user.loc, 'armbomb.ogg', 75, 1, -3)
- spawn(15)
- F.prime()
- else if (istype(grenades[1], /obj/item/weapon/empgrenade))
- var/obj/item/weapon/empgrenade/F = grenades[1]
- grenades -= F
- F.loc = user.loc
- F.throw_at(target, 30, 2)
- F.active = 1
- F.icon_state = "empar"
- playsound(user.loc, 'armbomb.ogg', 75, 1, -3)
- spawn(15)
- F.prime()
- if (locate (/obj/structure/table, src.loc) || locate (/obj/item/weapon/storage, src.loc))
- return
- else
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] fired a grenade!", user), 1)
- user << "\red You fire the grenade launcher!"
- if (istype(grenades[1], /obj/item/weapon/chem_grenade))
- var/obj/item/weapon/chem_grenade/F = grenades[1]
- grenades -= F
- F.loc = user.loc
- F.throw_at(target, 30, 2)
- message_admins("[key_name_admin(user)] fired a chemistry grenade from a grenade launcher ([src.name]).")
- log_game("[key_name_admin(user)] used a chemistry grenade ([src.name]).")
- F.state = 1
- F.icon_state = initial(icon_state)+"_armed"
- playsound(user.loc, 'armbomb.ogg', 75, 1, -3)
- spawn(15)
- F.explode()
- else if (istype(grenades[1], /obj/item/weapon/flashbang))
- var/obj/item/weapon/flashbang/F = grenades[1]
- grenades -= F
- F.loc = user.loc
- F.throw_at(target, 30, 2)
- F.active = 1
- F.icon_state = "flashbang1"
- playsound(user.loc, 'armbomb.ogg', 75, 1, -3)
- spawn(15)
- F.prime()
- else if (istype(grenades[1], /obj/item/weapon/smokebomb))
- var/obj/item/weapon/smokebomb/F = grenades[1]
- grenades -= F
- F.loc = user.loc
- F.throw_at(target, 30, 2)
- F.icon_state = "flashbang1"
- playsound(user.loc, 'armbomb.ogg', 75, 1, -3)
- spawn(15)
- F.prime()
- else if (istype(grenades[1], /obj/item/weapon/mustardbomb))
- var/obj/item/weapon/mustardbomb/F = grenades[1]
- grenades -= F
- F.loc = user.loc
- F.throw_at(target, 30, 2)
- F.icon_state = "flashbang1"
- playsound(user.loc, 'armbomb.ogg', 75, 1, -3)
- spawn(15)
- F.prime()
- else if (istype(grenades[1], /obj/item/weapon/empgrenade))
- var/obj/item/weapon/empgrenade/F = grenades[1]
- grenades -= F
- F.loc = user.loc
- F.throw_at(target, 30, 2)
- F.active = 1
- F.icon_state = "empar"
- playsound(user.loc, 'armbomb.ogg', 75, 1, -3)
- spawn(15)
- F.prime()
-
-
-/obj/item/weapon/gun/syringe
- name = "syringe gun"
- desc = "A spring loaded rifle designed to fit syringes, designed to incapacitate unruly patients from a distance."
- icon = 'gun.dmi'
- icon_state = "syringegun"
- item_state = "syringegun"
- w_class = 3.0
- throw_speed = 2
- throw_range = 10
- force = 4.0
- var/list/syringes = new/list()
- var/max_syringes = 1
- m_amt = 2000
-
- examine()
- set src in view()
- ..()
- if (!(usr in view(2)) && usr!=src.loc) return
- usr << "\blue [syringes.len] / [max_syringes] syringes."
-
- attackby(obj/item/I as obj, mob/user as mob)
-
- if(istype(I, /obj/item/weapon/reagent_containers/syringe))
- if(syringes.len < max_syringes)
- user.drop_item()
- I.loc = src
- syringes += I
- user << "\blue You put the syringe in [src]."
- user << "\blue [syringes.len] / [max_syringes] syringes."
- else
- usr << "\red [src] cannot hold more syringes."
-
- afterattack(obj/target, mob/user , flag)
- if(!isturf(target.loc) || target == user) return
-
- if(syringes.len)
- spawn(0) fire_syringe(target,user)
- else
- usr << "\red [src] is empty."
-
- proc
- fire_syringe(atom/target, mob/user)
- if (locate (/obj/structure/table, src.loc))
- return
- else
- var/turf/trg = get_turf(target)
- var/obj/effect/syringe_gun_dummy/D = new/obj/effect/syringe_gun_dummy(get_turf(src))
- var/obj/item/weapon/reagent_containers/syringe/S = syringes[1]
- if((!S) || (!S.reagents)) //ho boy! wot runtimes!
- return
- S.reagents.trans_to(D, S.reagents.total_volume)
- syringes -= S
- del(S)
- D.icon_state = "syringeproj"
- D.name = "syringe"
- playsound(user.loc, 'syringeproj.ogg', 50, 1)
-
- for(var/i=0, i<6, i++)
- if(!D) break
- if(D.loc == trg) break
- step_towards(D,trg)
-
- if(D)
- for(var/mob/living/carbon/M in D.loc)
- if(!istype(M,/mob/living/carbon)) continue
- if(M == user) continue
- //Syring gune attack logging by Yvarov
- var/R
- for(var/datum/reagent/A in D.reagents.reagent_list)
- R += A.id + " ("
- R += num2text(A.volume) + "),"
- if (istype(M, /mob))
- M.attack_log += "\[[time_stamp()]\] [user]/[user.ckey] shot [M]/[M.ckey] with a syringegun ([R])"
- user.attack_log += "\[[time_stamp()]\] [user]/[user.ckey] shot [M]/[M.ckey] with a syringegun ([R])"
- log_attack("[user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R])")
-
- log_admin("ATTACK: [user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R]).")
- msg_admin_attack("ATTACK: [user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R]).")
-
- else
- M.attack_log += "\[[time_stamp()]\] UNKNOWN SUBJECT (No longer exists) shot [M]/[M.ckey] with a syringegun ([R])"
- log_attack("UNKNOWN shot [M] ([M.ckey]) with a syringegun ([R])")
-
- log_admin("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a syringegun ([R]).")
- msg_admin_attack("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a syringegun ([R]).")
-
- D.reagents.trans_to(M, 15)
- M.take_organ_damage(5)
- for(var/mob/O in viewers(world.view, D))
- O.show_message(text("\red [] is hit by the syringe!", M.name), 1)
-
- del(D)
- if(D)
- for(var/atom/A in D.loc)
- if(A == user) continue
- if(A.density) del(D)
-
- sleep(1)
-
- if (D) spawn(10) del(D)
-
- return
-
-/obj/item/weapon/gun/syringe/rapidsyringe
- name = "rapid syringe gun"
- desc = "A modification of the syringe gun design, using a rotating cylinder to store up to four syringes."
- icon_state = "rapidsyringegun"
- max_syringes = 4
-
-/obj/structure/reagent_dispensers
- name = "Dispenser"
- desc = "..."
- icon = 'objects.dmi'
- icon_state = "watertank"
- density = 1
- anchored = 0
- flags = FPRINT
- pressure_resistance = 2*ONE_ATMOSPHERE
-
- var/amount_per_transfer_from_this = 10
- var/possible_transfer_amounts = list(10,25,50,100)
-
- attackby(obj/item/weapon/W as obj, mob/user as mob)
- return
-
- New()
- var/datum/reagents/R = new/datum/reagents(1000)
- reagents = R
- R.my_atom = src
- if (!possible_transfer_amounts)
- src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT
- ..()
-
- examine()
- set src in view()
- ..()
- if (!(usr in view(2)) && usr!=src.loc) return
- usr << "\blue It contains:"
- if(reagents && reagents.reagent_list.len)
- for(var/datum/reagent/R in reagents.reagent_list)
- usr << "\blue [R.volume] units of [R.name]"
- else
- usr << "\blue Nothing."
-
- verb/set_APTFT() //set amount_per_transfer_from_this
- set name = "Set transfer amount"
- set category = "Object"
- set src in view(1)
- var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts
- if (N)
- amount_per_transfer_from_this = N
-
- ex_act(severity)
- switch(severity)
- if(1.0)
- del(src)
- return
- if(2.0)
- if (prob(50))
- new /obj/effect/effect/water(src.loc)
- del(src)
- return
- if(3.0)
- if (prob(5))
- new /obj/effect/effect/water(src.loc)
- del(src)
- return
- else
- return
-
- blob_act()
- if(prob(50))
- new /obj/effect/effect/water(src.loc)
- del(src)
-
-
-
-/obj/item/weapon/reagent_containers
- name = "Container"
- desc = "..."
- icon = 'chemical.dmi'
- icon_state = null
- w_class = 1
- var/amount_per_transfer_from_this = 5
- var/possible_transfer_amounts = list(5,10,15,25,30)
- var/volume = 30
-
- verb/set_APTFT() //set amount_per_transfer_from_this
- set name = "Set transfer amount"
- set category = "Object"
- set src in range(0)
- var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts
- if (N)
- amount_per_transfer_from_this = N
-
- New()
- ..()
- if (!possible_transfer_amounts)
- src.verbs -= /obj/item/weapon/reagent_containers/verb/set_APTFT
- var/datum/reagents/R = new/datum/reagents(volume)
- reagents = R
- R.my_atom = src
-
- attackby(obj/item/weapon/W as obj, mob/user as mob)
-
- return
- attack_self(mob/user as mob)
- return
- attack(mob/M as mob, mob/user as mob, def_zone)
- return
- attackby(obj/item/I as obj, mob/user as mob)
-
- return
- afterattack(obj/target, mob/user , flag)
- return
-
-////////////////////////////////////////////////////////////////////////////////
-/// (Mixing)Glass.
-////////////////////////////////////////////////////////////////////////////////
-/obj/item/weapon/reagent_containers/glass
- name = " "
- desc = " "
- icon = 'chemical.dmi'
- icon_state = "null"
- item_state = "null"
- amount_per_transfer_from_this = 10
- possible_transfer_amounts = list(5,10,15,25,30,50)
- volume = 50
- flags = FPRINT | TABLEPASS | OPENCONTAINER
-
- var/list/can_be_placed_into = list(
- /obj/machinery/chem_master/,
- /obj/machinery/chem_dispenser/,
- /obj/machinery/reagentgrinder,
- /obj/structure/table,
- /obj/structure/closet/secure_closet,
- /obj/structure/closet,
- /obj/structure/sink,
- /obj/item/weapon/storage,
- /obj/machinery/atmospherics/unary/cryo_cell,
- /obj/item/weapon/chem_grenade,
- /obj/machinery/bot/medbot,
- /obj/machinery/computer/pandemic,
- /obj/item/weapon/secstorage/ssafe,
- /obj/machinery/disposal,
- /obj/machinery/disease2/incubator,
- /obj/machinery/disease2/isolator,
- /obj/machinery/disease2/biodestroyer,
- /obj/item/device/cooker,
- /obj/item/device/grinder,
- /mob/living/simple_animal/livestock/cow
- )
-
- examine()
- set src in view()
- ..()
- if (!(usr in view(2)) && usr!=src.loc) return
- usr << "\blue It contains:"
- if(reagents && reagents.reagent_list.len)
- for(var/datum/reagent/R in reagents.reagent_list)
- usr << "\blue [R.volume] units of [R.name]"
- else
- usr << "\blue Nothing."
-
- afterattack(obj/target, mob/user , flag)
- for(var/type in src.can_be_placed_into)
- if(istype(target, type))
- return
-
- if(ismob(target) && target.reagents && reagents.total_volume)
- user << "\blue You splash the solution onto [target]."
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] has been splashed with something by []!", target, user), 1)
- src.reagents.reaction(target, TOUCH)
- spawn(5) src.reagents.clear_reagents()
- return
- else if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
-
- if(!target.reagents.total_volume && target.reagents)
- user << "\red [target] is empty."
- return
-
- if(reagents.total_volume >= reagents.maximum_volume)
- user << "\red [src] is full."
- return
-
- var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
- user << "\blue You fill [src] with [trans] units of the contents of [target]."
-
- else if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it.
- if(!reagents.total_volume)
- user << "\red [src] is empty."
- return
-
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "\red [target] is full."
- return
-
- var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
- user << "\blue You transfer [trans] units of the solution to [target]."
-
- //Safety for dumping stuff into a ninja suit. It handles everything through attackby() and this is unnecessary.
- else if(istype(target, /obj/item/clothing/suit/space/space_ninja))
- return
-
- else if(reagents.total_volume)
- user << "\blue You splash the solution onto [target]."
- src.reagents.reaction(target, TOUCH)
- spawn(5) src.reagents.clear_reagents()
- return
-
-////////////////////////////////////////////////////////////////////////////////
-/// (Mixing)Glass. END
-////////////////////////////////////////////////////////////////////////////////
-
-////////////////////////////////////////////////////////////////////////////////
-/// Droppers.
-////////////////////////////////////////////////////////////////////////////////
-/obj/item/weapon/reagent_containers/dropper
- name = "Dropper"
- desc = "A dropper. Transfers 5 units."
- icon = 'chemical.dmi'
- icon_state = "dropper0"
- amount_per_transfer_from_this = 5
- possible_transfer_amounts = list(1,2,3,4,5)
- volume = 5
- var/filled = 0
-
- afterattack(obj/target, mob/user , flag)
- if(!target.reagents) return
-
- if(filled)
-
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "\red [target] is full."
- return
-
- if(!target.is_open_container() && !ismob(target) && !istype(target,/obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/cigarette)) //You can inject humans and food but you cant remove the shit.
- user << "\red You cannot directly fill this object."
- return
-
- if(ismob(target))
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] drips something onto []!", user, target), 1)
- src.reagents.reaction(target, TOUCH)
-
- var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
- user << "\blue You transfer [trans] units of the solution."
- if (src.reagents.total_volume<=0)
- filled = 0
- icon_state = "dropper[filled]"
-
- else
-
- if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers))
- user << "\red You cannot directly remove reagents from [target]."
- return
-
- if(!target.reagents.total_volume)
- user << "\red [target] is empty."
- return
-
- var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this)
-
- user << "\blue You fill the dropper with [trans] units of the solution."
-
- filled = 1
- icon_state = "dropper[filled]"
-
- return
-
-////////////////////////////////////////////////////////////////////////////////
-/// Droppers. END
-////////////////////////////////////////////////////////////////////////////////
-
-////////////////////////////////////////////////////////////////////////////////
-/// Syringes.
-////////////////////////////////////////////////////////////////////////////////
-#define SYRINGE_DRAW 0
-#define SYRINGE_INJECT 1
-
-/obj/item/weapon/reagent_containers/syringe
- name = "Syringe"
- desc = "A syringe."
- icon = 'syringe.dmi'
- item_state = "syringe_0"
- icon_state = "0"
- amount_per_transfer_from_this = 5
- possible_transfer_amounts = null //list(5,10,15)
- volume = 15
- var/has_blood = 0
- var/mode = SYRINGE_DRAW
-
- on_reagent_change()
- update_icon()
-
- pickup(mob/user)
- ..()
- update_icon()
-
- dropped(mob/user)
- ..()
- update_icon()
-
- attack_self(mob/user as mob)
-/*
- switch(mode)
- if(SYRINGE_DRAW)
- mode = SYRINGE_INJECT
- if(SYRINGE_INJECT)
- mode = SYRINGE_DRAW
-*/
- mode = !mode
- update_icon()
-
- attack_hand()
- ..()
- update_icon()
-
- attack_paw()
- return attack_hand()
-
- attackby(obj/item/I as obj, mob/user as mob)
-
- return
-
- afterattack(obj/target, mob/user , flag)
- if(!target.reagents) return
-
- switch(mode)
- if(SYRINGE_DRAW)
-
- if(reagents.total_volume >= reagents.maximum_volume)
- user << "\red The syringe is full."
- return
-
- if(ismob(target))//Blood!
- if(istype(target, /mob/living/carbon/metroid))
- user << "\red You are unable to locate any blood."
- return
- if(src.reagents.has_reagent("blood"))
- user << "\red There is already a blood sample in this syringe"
- return
- if(istype(target, /mob/living/carbon))//maybe just add a blood reagent to all mobs. Then you can suck them dry...With hundreds of syringes. Jolly good idea.
- var/amount = src.reagents.maximum_volume - src.reagents.total_volume
- var/mob/living/carbon/T = target
- if(!T.dna)
- usr << "You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum)"
- return
- if(NOCLONE in T.mutations) //target done been et, no more blood in him
- user << "\red You are unable to locate any blood."
- return
- if(ishuman(T))
- if(T:vessel.get_reagent_amount("blood") < amount)
- return
-
- var/datum/reagent/B = new /datum/reagent/blood
- B.holder = src
- B.volume = amount
- //set reagent data
- B.data["donor"] = T
- /*
- if(T.virus && T.virus.spread_type != SPECIAL)
- B.data["virus"] = new T.virus.type(0)
- */
-
-
-
- for(var/datum/disease/D in T.viruses)
- if(!B.data["viruses"])
- B.data["viruses"] = list()
-
-
- B.data["viruses"] += new D.type
-
- // not sure why it was checking if(B.data["virus2"]), but it seemed wrong
- if(T.virus2)
- B.data["virus2"] = T.virus2.getcopy()
-
- B.data["blood_DNA"] = copytext(T.dna.unique_enzymes,1,0)
- if(T.resistances&&T.resistances.len)
- B.data["resistances"] = T.resistances.Copy()
- if(istype(target, /mob/living/carbon/human))//I wish there was some hasproperty operation...
- B.data["blood_type"] = copytext(T.dna.b_type,1,0)
- var/list/temp_chem = list()
- for(var/datum/reagent/R in target.reagents.reagent_list)
- temp_chem += R.name
- temp_chem[R.name] = R.volume
- B.data["trace_chem"] = list2params(temp_chem)
- B.data["antibodies"] = T.antibodies
- //debug
- //for(var/D in B.data)
- // world << "Data [D] = [B.data[D]]"
- //debug
- if(ishuman(T))
- T:vessel.remove_reagent("blood",amount) // Removes blood if human
-
- src.reagents.reagent_list += B
- src.reagents.update_total()
- src.on_reagent_change()
- src.reagents.handle_reactions()
-// T:vessel.trans_to(src, amount) // Virus2 and antibodies aren't in blood in the first place.
-
- user << "\blue You take a blood sample from [target]"
- for(var/mob/O in viewers(4, user))
- O.show_message("\red [user] takes a blood sample from [target].", 1)
-
- if(prob(2) && istype(T,/mob/living/carbon/monkey))
- T:react_to_attack(user)
-
- else //if not mob
- if(!target.reagents.total_volume)
- user << "\red [target] is empty."
- return
-
- if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers) && !istype(target,/obj/item/metroid_core))
- user << "\red You cannot directly remove reagents from this object."
- return
-
- var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) // transfer from, transfer to - who cares?
-
- user << "\blue You fill the syringe with [trans] units of the solution."
- if (reagents.total_volume >= reagents.maximum_volume)
- mode=!mode
- update_icon()
-
- if(SYRINGE_INJECT)
- if(!reagents.total_volume)
- user << "\red The Syringe is empty."
- return
- if(istype(target, /obj/item/weapon/implantcase/chem))
- return
-
- if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/metroid_core) && !istype(target, /obj/item/clothing/mask/cigarette) && !istype(target, /obj/item/weapon/cigpacket))
- user << "\red You cannot directly fill this object."
- return
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "\red [target] is full."
- return
-
- if(istype(target, /obj/item/metroid_core))
- var/obj/item/metroid_core/core = target
- core.Flush = 30 // reset flush counter
-
- if(ismob(target) && target != user)
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] is trying to inject []!", user, target), 1)
- if(!do_mob(user, target)) return
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] injects [] with the syringe!", user, target), 1)
- src.reagents.reaction(target, INGEST)
- if(prob(2) && istype(target,/mob/living/carbon/monkey))
- var/mob/living/carbon/monkey/M = target
- M.react_to_attack(user)
- if(ismob(target) && target == user)
- src.reagents.reaction(target, INGEST)
- spawn(5)
- var/datum/reagent/blood/B
- for(var/datum/reagent/blood/d in src.reagents.reagent_list)
- B = d
- break
- var/trans
- if(B && ishuman(target))
- var/mob/living/carbon/human/H = target
- H.vessel.add_reagent("blood",(B.volume > 5? 5 : B.volume),B.data)
- src.reagents.remove_reagent("blood",(B.volume > 5? 5 : B.volume))
- else
- trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
- user << "\blue You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units."
- if (reagents.total_volume <= 0 && mode==SYRINGE_INJECT)
- mode = SYRINGE_DRAW
- update_icon()
-
- return
-
- update_icon()
- var/rounded_vol = round(reagents.total_volume,5)
- overlays = null
- has_blood = 0
- for(var/datum/reagent/blood/B in reagents.reagent_list)
- has_blood = 1
- break
- if(ismob(loc))
- var/injoverlay
- switch(mode)
- if (SYRINGE_DRAW)
- injoverlay = "draw"
- if (SYRINGE_INJECT)
- injoverlay = "inject"
- overlays += injoverlay
- icon_state = "[rounded_vol]"
- item_state = "syringe_[rounded_vol]"
- if(reagents.total_volume)
- var/obj/effect/overlay = new/obj
- overlay.icon = 'syringefilling.dmi'
- switch(rounded_vol)
- if(5) overlay.icon_state = "5"
- if(10) overlay.icon_state = "10"
- if(15) overlay.icon_state = "15"
-
- var/list/rgbcolor = list(0,0,0)
- var/finalcolor
- for(var/datum/reagent/re in reagents.reagent_list) // natural color mixing bullshit/algorithm
- if(!finalcolor)
- rgbcolor = GetColors(re.color)
- finalcolor = re.color
- else
- var/newcolor[3]
- var/prergbcolor[3]
- prergbcolor = rgbcolor
- newcolor = GetColors(re.color)
-
- rgbcolor[1] = (prergbcolor[1]+newcolor[1])/2
- rgbcolor[2] = (prergbcolor[2]+newcolor[2])/2
- rgbcolor[3] = (prergbcolor[3]+newcolor[3])/2
-
- finalcolor = rgb(rgbcolor[1], rgbcolor[2], rgbcolor[3])
-
- overlay.icon += finalcolor
- if(!istype(src.loc, /turf)) overlay.layer = 30
- overlays += overlay
-
-
-/obj/item/weapon/reagent_containers/ld50_syringe
- name = "Lethal Injection Syringe"
- desc = "A syringe used for lethal injections."
- icon = 'syringe.dmi'
- item_state = "syringe_0"
- icon_state = "0"
- amount_per_transfer_from_this = 50
- possible_transfer_amounts = null //list(5,10,15)
- volume = 50
- var/mode = SYRINGE_DRAW
-
- on_reagent_change()
- update_icon()
-
- pickup(mob/user)
- ..()
- update_icon()
-
- dropped(mob/user)
- ..()
- update_icon()
-
- attack_self(mob/user as mob)
-/*
- switch(mode)
- if(SYRINGE_DRAW)
- mode = SYRINGE_INJECT
- if(SYRINGE_INJECT)
- mode = SYRINGE_DRAW
-*/
- mode = !mode
- update_icon()
-
- attack_hand()
- ..()
- update_icon()
-
- attack_paw()
- return attack_hand()
-
- attackby(obj/item/I as obj, mob/user as mob)
-
- return
-
- afterattack(obj/target, mob/user , flag)
- if(!target.reagents) return
-
- switch(mode)
- if(SYRINGE_DRAW)
-
- if(reagents.total_volume >= reagents.maximum_volume)
- user << "\red The syringe is full."
- return
-
- if(ismob(target))
- if(istype(target, /mob/living/carbon))//I Do not want it to suck 50 units out of people
- usr << "This needle isn't designed for drawing blood."
- return
- else //if not mob
- if(!target.reagents.total_volume)
- user << "\red [target] is empty."
- return
-
- if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers))
- user << "\red You cannot directly remove reagents from this object."
- return
-
- var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) // transfer from, transfer to - who cares?
-
- user << "\blue You fill the syringe with [trans] units of the solution."
- if (reagents.total_volume >= reagents.maximum_volume)
- mode=!mode
- update_icon()
-
- if(SYRINGE_INJECT)
- if(!reagents.total_volume)
- user << "\red The Syringe is empty."
- return
- if(istype(target, /obj/item/weapon/implantcase/chem))
- return
- if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food))
- user << "\red You cannot directly fill this object."
- return
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "\red [target] is full."
- return
-
- if(ismob(target) && target != user)
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] is trying to inject [] with a giant syringe!", user, target), 1)
- if(!do_mob(user, target, 300)) return
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] injects [] with a giant syringe!", user, target), 1)
- src.reagents.reaction(target, INGEST)
- if(ismob(target) && target == user)
- src.reagents.reaction(target, INGEST)
- spawn(5)
- var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
- user << "\blue You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units."
- if (reagents.total_volume >= reagents.maximum_volume && mode==SYRINGE_INJECT)
- mode = SYRINGE_DRAW
- update_icon()
-
- return
-
- update_icon()
- var/rounded_vol = round(reagents.total_volume,50)
- if(ismob(loc))
- var/mode_t
- switch(mode)
- if (SYRINGE_DRAW)
- mode_t = "d"
- if (SYRINGE_INJECT)
- mode_t = "i"
- icon_state = "[mode_t][rounded_vol]"
- else
- icon_state = "[rounded_vol]"
- item_state = "syringe_[rounded_vol]"
-
-////////////////////////////////////////////////////////////////////////////////
-/// Syringes. END
-////////////////////////////////////////////////////////////////////////////////
-
-////////////////////////////////////////////////////////////////////////////////
-/// HYPOSPRAY
-////////////////////////////////////////////////////////////////////////////////
-
-/obj/item/weapon/reagent_containers/hypospray
- name = "hypospray"
- desc = "The DeForest Medical Corporation hypospray is a sterile, air-needle autoinjector for rapid administration of drugs to patients."
- icon = 'syringe.dmi'
- item_state = "hypo"
- icon_state = "hypo"
- amount_per_transfer_from_this = 5
- volume = 30
- possible_transfer_amounts = null
- flags = FPRINT | TABLEPASS | OPENCONTAINER
- slot_flags = SLOT_BELT
-
-/obj/item/weapon/reagent_containers/hypospray/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
-
-/obj/item/weapon/reagent_containers/hypospray/New() //comment this to make hypos start off empty
- ..()
- reagents.add_reagent("tricordrazine", 30)
- return
-
-/obj/item/weapon/reagent_containers/hypospray/attack(mob/M as mob, mob/user as mob)
- if(!reagents.total_volume)
- user << "\red \The [src] is empty."
- return
- if (!( istype(M, /mob) ))
- return
- if (reagents.total_volume)
- user << "\blue You inject [M] with \the [src]."
- M << "\red You feel a tiny prick!"
-
- M.attack_log += text("\[[time_stamp()]\] Has been injected with [src.name] by [user.name] ([user.ckey])")
- user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to inject [M.name] ([M.ckey])")
-
- log_admin("ATTACK: [user] ([user.ckey]) injected [M] ([M.ckey]) with [src].")
- msg_admin_attack("ATTACK: [user] ([user.ckey]) injected [M] ([M.ckey]) with [src].")
-
- log_attack("[user.name] ([user.ckey]) injected [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
-
-
- src.reagents.reaction(M, INGEST)
- if(M.reagents)
- var/trans = reagents.trans_to(M, amount_per_transfer_from_this)
- user << "\blue [trans] units injected. [reagents.total_volume] units remaining in \the [src]."
- return
-
-/obj/item/weapon/reagent_containers/borghypo
- name = "cyborg hypospray"
- desc = "An advanced chemical synthesizer and injection system, designed for heavy-duty medical equipment."
- icon = 'syringe.dmi'
- item_state = "hypo"
- icon_state = "hypo"
- amount_per_transfer_from_this = 5
- volume = 30
- possible_transfer_amounts = null
- flags = FPRINT
- var/mode = 1
- var/charge_cost = 50
- var/charge_tick = 0
- var/recharge_time = 5 //Time it takes for shots to recharge (in seconds)
-
- New()
- ..()
- processing_objects.Add(src)
-
-
- Del()
- processing_objects.Remove(src)
- ..()
-
- process() //Every [recharge_time] seconds, recharge some reagents for the cyborg
- charge_tick++
- if(charge_tick < recharge_time) return 0
- charge_tick = 0
-
- if(isrobot(src.loc))
- var/mob/living/silicon/robot/R = src.loc
- if(R && R.cell)
- if(mode == 1 && reagents.total_volume < 30) //Don't recharge reagents and drain power if the storage is full.
- R.cell.use(charge_cost) //Take power from borg...
- reagents.add_reagent("tricordrazine",5) //And fill hypo with reagent.
- if(mode == 2 && reagents.total_volume < 30)
- R.cell.use(charge_cost)
- reagents.add_reagent("inaprovaline", 5)
- if(mode == 3 && reagents.total_volume < 30)
- R.cell.use(charge_cost)
- reagents.add_reagent("spaceacillin", 5)
- //update_icon()
- return 1
-
-/obj/item/weapon/reagent_containers/borghypo/attack(mob/M as mob, mob/user as mob)
- if(!reagents.total_volume)
- user << "\red The injector is empty."
- return
- if (!( istype(M, /mob) ))
- return
- if (reagents.total_volume)
- user << "\blue You inject [M] with the injector."
- M << "\red You feel a tiny prick!"
-
- src.reagents.reaction(M, INGEST)
- if(M.reagents)
- var/trans = reagents.trans_to(M, amount_per_transfer_from_this)
- user << "\blue [trans] units injected. [reagents.total_volume] units remaining."
- return
-
-/obj/item/weapon/reagent_containers/borghypo/attack_self(mob/user as mob)
- playsound(src.loc, 'pop.ogg', 50, 0) //Change the mode
- if(mode == 1)
- mode = 2
- charge_tick = 0 //Prevents wasted chems/cell charge if you're cycling through modes.
- reagents.clear_reagents() //Flushes whatever was in the storage previously, so you don't get chems all mixed up.
- user << "\blue Synthesizer is now producing 'Inaprovaline'."
- return
- if(mode == 2)
- mode = 3
- charge_tick = 0
- reagents.clear_reagents()
- user << "\blue Synthesizer is now producing 'Spaceacillin'."
- return
- if(mode == 3)
- mode = 1
- charge_tick = 0
- reagents.clear_reagents()
- user << "\blue Synthesizer is now producing 'Tricordrazine'."
- return
-
-/obj/item/weapon/reagent_containers/borghypo/examine()
- set src in view()
- ..()
- if (!(usr in view(2)) && usr!=src.loc) return
-
- if(reagents && reagents.reagent_list.len)
- for(var/datum/reagent/R in reagents.reagent_list)
- usr << "\blue It currently has [R.volume] units of [R.name] stored."
- else
- usr << "\blue It is currently empty. Allow some time for the internal syntheszier to produce more."
-
-
-
-/obj/item/weapon/reagent_containers/hypospray/ert
- name = "emergency hypospray"
- desc = "The DeForest Medical Corporation hypospray is a sterile, air-needle autoinjector for rapid administration of drugs to patients."
- amount_per_transfer_from_this = 50
- volume = 50
-
-/obj/item/weapon/reagent_containers/hypospray/autoinjector
- name = "autoinjector"
- desc = "A rapid and safe way to administer small amounts of drugs by untrained or trained personnel."
- icon_state = "autoinjector"
- item_state = "autoinjector"
- amount_per_transfer_from_this = 5
- volume = 5
-
-/obj/item/weapon/reagent_containers/hypospray/autoinjector/New()
- ..()
- reagents.remove_reagent("tricordrazine", 30)
- reagents.add_reagent("inaprovaline", 5)
- update_icon()
- return
-
-/obj/item/weapon/reagent_containers/hypospray/autoinjector/attack(mob/M as mob, mob/user as mob)
- ..()
- update_icon()
- return
-
-/obj/item/weapon/reagent_containers/hypospray/autoinjector/update_icon()
- if(reagents.total_volume > 0)
- icon_state = "[initial(icon_state)]1"
- else
- icon_state = "[initial(icon_state)]0"
-
-/obj/item/weapon/reagent_containers/hypospray/autoinjector/examine()
- ..()
- if(reagents && reagents.reagent_list.len)
- for(var/datum/reagent/R in reagents.reagent_list)
- usr << "\blue It currently has [R.volume] units of [R.name] stored."
- else
- usr << "\blue It is currently empty."
-
-////////////////////////////////////////////////////////////////////////////////
-/// Bunsen Burner
-////////////////////////////////////////////////////////////////////////////////
-
-//todo: make a subclass of this for cooking, allow it to accept multiple containers simultaneously etc
-//todo: use mini plasma tanks for fuel
-
-/obj/item/device/cooker
- name = "bunsen burner"
- desc = "A small, gas-powered cooker."
- icon = 'chemical.dmi'
- icon_state = "bunsen1" //spawns with an empty beaker already on it
- var/obj/item/weapon/reagent_containers/glass/held_container
- var/heating_stage = 0
- var/active = 0
- var/icon_empty = "bunsen0"
- var/icon_full = "bunsen1"
- var/icon_active = "bunsen2"
-
-/obj/item/device/cooker/New()
- held_container = new /obj/item/weapon/reagent_containers/glass/large/(src)
-
-/obj/item/device/cooker/verb/toggle()
- set src in oview(1)
- set category = "Object"
- set name = "Toggle cooker"
-
- if(held_container)
- if(!active)
- usr << "\blue You switch the [src] on."
- active = 1
- icon_state = icon_active
- spawn(50)
- heat()
- else
- usr << "\blue You switch the [src] off."
- active = 0
- icon_state = icon_full
- else
- usr << "\red You can not toggle the [src] when it holds no containers!"
-
-/obj/item/device/cooker/proc/heat()
- if(!held_container)
- heating_stage = 0
- active = 0
- icon_state = icon_empty
- return
-
- if(active)
- icon_state = icon_active
- spawn(50)
- heat()
- else
- heating_stage = 0
- icon_state = icon_full
- return
-
- if(heating_stage++ >= 5)
- visible_message("bubbles!")
- held_container.reagents.handle_reactions(1)
- else
- visible_message("hisses and steams!")
-
-/obj/item/device/cooker/attackby(var/obj/item/O as obj, var/mob/user as mob)
- if(istype(O, /obj/item/weapon/reagent_containers/glass/))
- if(held_container)
- //todo: empty O into held_container
- user << "\red There is already a [held_container] on the [src]!"
- else
- user.drop_item()
- user << "\blue You place the [O] on the [src]."
- held_container = O
- O.loc = src
- icon_state = icon_full
- return 1
- else if(!held_container)
- user << "\red There is nothing to put [O] in to!"
- return 1
- else if (istype(O,/obj/item))
- if(w_class > 2)
- user << "\red That won't fit in the [held_container]!"
- else
- //add random things to the container. when the burner is activated, they will melt
- O.loc = held_container
- return 1
- else
- user << "\red That won't fit in the [held_container]!"
- return 1
-
- return ..()
-
-/obj/item/device/cooker/attack_hand(var/mob/user as mob)
- if(held_container)
- held_container.attack_hand(user)
- if(held_container.loc != src)
- held_container = null
- icon_state = icon_empty
- user << "\blue You remove the [held_container] from the [src]."
- return 1
- else
- ..()
-
-////////////////////////////////////////////////////////////////////////////////
-/// Grinder
-////////////////////////////////////////////////////////////////////////////////
-
-//todo: make a thing like this for cooking, or just redo the kitchen machinery so that they make more sense
-//this is a (mostly) non-retarded version of obj/machiner/reagentgrinder
-
-var/list/grind_products = list()
-
-/obj/item/device/grinder
- name = "grinder"
- desc = "A small, automated grinder for breaking things down into a powder."
- icon = 'chemical.dmi'
- icon_state = "grinder1" //spawns with an empty beaker already on it
- var/obj/item/weapon/reagent_containers/glass/held_container
- var/grinding_stage = 0
- var/active = 0
- var/icon_empty = "grinder0"
- var/icon_full = "grinder1"
- var/icon_active = "grinder2"
-
-/obj/item/device/grinder/New()
- held_container = new /obj/item/weapon/reagent_containers/glass/large/(src)
-
-/obj/item/device/grinder/verb/toggle()
- set src in oview(1)
- set category = "Object"
- set name = "Toggle grinder"
-
- if(held_container)
- if(!active)
- usr << "\blue You switch the [src] on."
- active = 1
- icon_state = icon_active
- spawn(50)
- grind()
- else
- usr << "\blue You switch the [src] off."
- active = 0
- icon_state = icon_full
- else
- usr << "\red You can not toggle the [src] when it holds no container!"
-
-/obj/item/device/grinder/verb/eject()
- set src in oview(1)
- set category = "Object"
- set name = "Eject contents from grinder"
-
- for(var/obj/item/I in src)
- if(I == held_container)
- continue
- I.loc = src.loc
-
-/obj/item/device/grinder/proc/grind()
- if(!held_container)
- grinding_stage = 0
- active = 0
- icon_state = icon_empty
- return
-
- if(active)
- icon_state = icon_active
- spawn(50)
- grind()
- else
- grinding_stage = 0
- icon_state = icon_full
- return
-
- var/grinding = 0
- for(var/obj/item/I in src)
- if(I == held_container)
- continue
- if( prob(max(grinding_stage * 20, 100)) )
- var/pre_volume = held_container.reagents.total_volume
-
- //shitty hardcode of things for now, but it's the fastest easiest solution
- if(istype(I,/obj/item/weapon/rocksliver))
- var/obj/item/weapon/rocksliver/R = I
- held_container.reagents.add_reagent("ground_rock",10, R.geological_data)
- else
- held_container.reagents.add_reagent("chemical_waste",10)
- del(I)
-
- //slight hack to spill some chemical waste if it won't fit
- if(pre_volume == held_container.reagents.total_volume)
- var/obj/effect/decal/ash/A = new(src.loc)
- A.name = "gritty powder"
- A.desc = "Looks like some kind of chemical waste."
- A.loc = pick(view(get_turf(src),1))
- visible_message("[src] leaks some kind of powder.")
- else
- grinding = 1
-
- if(grinding)
- visible_message("[src] makes a clanking, clattering noise!")
- else
- visible_message("[src] makes a whirring noise!")
-
-/obj/item/device/grinder/attackby(var/obj/item/O as obj, var/mob/user as mob)
- if(istype(O, /obj/item/weapon/reagent_containers/glass/))
- if(held_container)
- //todo: empty O into held_container
- user << "\red There is already a [held_container] on the [src]!"
- else
- user.drop_item()
- user << "\blue You place the [O] on the [src]."
- held_container = O
- O.loc = src
- icon_state = icon_full
- return 1
- else if(!held_container)
- user << "\red There is nothing to put [O] in to!"
- return 1
- else if (istype(O,/obj/item))
- var/obj/item/I = O
- if(I.w_class > 2)
- user << "\red That won't fit in the [held_container]!"
- else
- //add random things to the container. when the burner is activated, they will melt
- O.loc = held_container
- return 1
- else
- user << "\blue You add the [O] to the [src]."
- user.drop_item()
- O.loc = src
- return 1
-
- return ..()
-
-/obj/item/device/grinder/attack_hand(var/mob/user as mob)
- if(held_container)
- held_container.attack_hand(user)
- if(held_container.loc != src)
- held_container = null
- icon_state = icon_empty
- user << "\blue You remove the [held_container] from the [src]."
- return 1
- else
- ..()
-
-
-
-////////////////////////////////////////////////////////////////////////////////
-/// Food.
-////////////////////////////////////////////////////////////////////////////////
-/obj/item/weapon/reagent_containers/food
- possible_transfer_amounts = null
- volume = 50 //Sets the default container amount for all food items.
-
- New()
- ..()
- src.pixel_x = rand(-5.0, 5) //Randomizes postion slightly.
- src.pixel_y = rand(-5.0, 5)
-
-
- proc/foodloc(var/mob/M, var/obj/item/O)
- if(O.loc == M)
- return M.loc
- else
- return O.loc
-
-/obj/item/weapon/reagent_containers/food/snacks //Food items that are eaten normally and don't leave anything behind.
- name = "snack"
- desc = "yummy"
- icon = 'food.dmi'
- icon_state = null
- var/bitesize = 1
- var/bitecount = 0
- var/eatsound = 'eatfood.ogg'
- var/trash = null
-
- //Placeholder for effect that trigger on eating that aren't tied to reagents.
- proc/On_Consume()
- if (!trash) return
- if(!reagents.total_volume)
- var/mob/M = usr
- switch(trash)
- if ("raisins")
- var/obj/item/trash/raisins/T = new /obj/item/trash/raisins/( M )
- M.put_in_hand(T)
- if ("candy")
- var/obj/item/trash/candy/T = new /obj/item/trash/candy/( M )
- M.put_in_hand(T)
- if ("cheesie")
- var/obj/item/trash/cheesie/T = new /obj/item/trash/cheesie/( M )
- M.put_in_hand(T)
- if ("chips")
- var/obj/item/trash/chips/T = new /obj/item/trash/chips/( M )
- M.put_in_hand(T)
- if ("popcorn")
- var/obj/item/trash/popcorn/T = new /obj/item/trash/popcorn/( M )
- M.put_in_hand(T)
- if ("sosjerky")
- var/obj/item/trash/sosjerky/T = new /obj/item/trash/sosjerky/( M )
- M.put_in_hand(T)
- if ("syndi_cakes")
- var/obj/item/trash/syndi_cakes/T = new /obj/item/trash/syndi_cakes/( M )
- M.put_in_hand(T)
- if ("waffles")
- var/obj/item/trash/waffles/T = new /obj/item/trash/waffles/( M )
- M.put_in_hand(T)
- if ("plate")
- var/obj/item/trash/plate/T = new /obj/item/trash/plate/( M )
- M.put_in_hand(T)
- if ("snack_bowl")
- var/obj/item/trash/snack_bowl/T = new /obj/item/trash/snack_bowl/( M )
- M.put_in_hand(T)
- if ("pistachios")
- var/obj/item/trash/pistachios/T = new /obj/item/trash/pistachios/( M )
- M.put_in_hand(T)
- if ("semki")
- var/obj/item/trash/semki/T = new /obj/item/trash/semki/( M )
- M.put_in_hand(T)
- if ("tray")
- var/obj/item/trash/tray/T = new /obj/item/trash/tray/( M )
- M.put_in_hand(T)
- if ("liquidfood")
- var/obj/item/trash/liquidfood/T = new /obj/item/trash/liquidfood/( M )
- M.put_in_hand(T)
- return
-
- attackby(obj/item/weapon/W as obj, mob/user as mob)
-
- return
- attack_self(mob/user as mob)
- return
- attack(mob/M as mob, mob/user as mob, def_zone)
- if(!reagents.total_volume) //Shouldn't be needed but it checks to see if it has anything left in it.
- user << "\red None of [src] left, oh no!"
- del(src)
- return 0
- if(istype(M, /mob/living/carbon))
- if(M == user) //If you're eating it yourself.
- var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25)
- if (fullness <= 50)
- M << "\red You hungrily chew out a piece of [src] and gobble it!"
- if (fullness > 50 && fullness <= 150)
- M << "\blue You hungrily begin to eat [src]."
- if (fullness > 150 && fullness <= 350)
- M << "\blue You take a bite of [src]."
- if (fullness > 350 && fullness <= 550)
- M << "\blue You unwillingly chew a bit of [src]."
- if (fullness > (550 * (1 + M.overeatduration / 2000))) // The more you eat - the more you can eat
- M << "\red You cannot force any more of [src] to go down your throat."
- return 0
- else
- if(!istype(M, /mob/living/carbon/metroid)) //If you're feeding it to someone else.
- var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25)
- if (fullness <= (550 * (1 + M.overeatduration / 1000)))
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] attempts to feed [M] [src].", 1)
- else
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] cannot force anymore of [src] down [M]'s throat.", 1)
- return 0
-
- if(!do_mob(user, M)) return
-
- M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: \ref[reagents]")
- user.attack_log += text("\[[time_stamp()]\] Fed [M.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]")
-
- log_admin("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
- msg_admin_attack("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
-
- log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
-
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] feeds [M] [src].", 1)
-
- else
- user << "This creature does not seem to have a mouth!"
- return
-
- if(reagents) //Handle ingestion of the reagent.
- if(reagents.total_volume)
- reagents.reaction(M, INGEST)
- spawn(5)
- if(reagents.total_volume > bitesize)
- /*
- * I totally cannot understand what this code supposed to do.
- * Right now every snack consumes in 2 bites, my popcorn does not work right, so I simplify it. -- rastaf0
- var/temp_bitesize = max(reagents.total_volume /2, bitesize)
- reagents.trans_to(M, temp_bitesize)
- */
- reagents.trans_to(M, bitesize)
- else
- reagents.trans_to(M, reagents.total_volume)
- bitecount++
- On_Consume()
- if(!reagents.total_volume)
- if(M == user) user << "\red You finish eating [src]."
- else user << "\red [M] finishes eating [src]."
- del(src)
-
- playsound(M.loc, eatsound, rand(10,50), 1)
- return 1
- else if(istype(M, /mob/living/simple_animal/livestock))
- if(M == user) //If you're eating it yourself.
- var/fullness = (M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25)) / M:max_nutrition
- if (fullness <= 0.1)
- M << "\red You hungrily chew out a piece of [src] and gobble it!"
- if (fullness > 0.1 && fullness <= 0.27)
- M << "\blue You hungrily begin to eat [src]."
- if (fullness > 0.27 && fullness <= 0.64)
- M << "\blue You take a bite of [src]."
- if (fullness > 0.64 && fullness <= 1)
- M << "\blue You unwillingly chew a bit of [src]."
- if (fullness > 1)
- M << "\red You cannot force any more of [src] to go down your throat."
- return 0
- else
- var/fullness = (M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25)) / M:max_nutrition
- if (fullness <= 1)
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] attempts to feed [M] [src].", 1)
- else
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] cannot force anymore of [src] down [M]'s throat.", 1)
- return 0
-
- if(!do_mob(user, M)) return
-
- M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: \ref[reagents]")
- user.attack_log += text("\[[time_stamp()]\] Fed [M.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]")
- log_admin("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
- message_admins("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
-
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] feeds [M] [src].", 1)
-
- if(reagents) //Handle ingestion of the reagent.
- if(reagents.total_volume)
- reagents.reaction(M, INGEST)
- spawn(5)
- if(reagents.total_volume > bitesize)
- /*
- * I totally cannot understand what this code supposed to do.
- * Right now every snack consumes in 2 bites, my popcorn does not work right, so I simplify it. -- rastaf0
- var/temp_bitesize = max(reagents.total_volume /2, bitesize)
- reagents.trans_to(M, temp_bitesize)
- */
- reagents.trans_to(M, bitesize)
- else
- reagents.trans_to(M, reagents.total_volume)
- bitecount++
- On_Consume()
- if(!reagents.total_volume)
-
- if(M == user) user << "\red You finish eating [src]."
- else user << "\red [M] finishes eating [src]."
- del(src)
- playsound(M.loc,'eatfood.ogg', rand(10,50), 1)
- return 1
- return 0
-
- attackby(obj/item/I as obj, mob/user as mob)
-
- return
- afterattack(obj/target, mob/user , flag)
- return
-
- examine()
- set src in view()
- ..()
- if (!(usr in range(0)) && usr!=src.loc) return
- if (bitecount==0)
- return
- else if (bitecount==1)
- usr << "\blue \The [src] was bitten by someone!"
- else if (bitecount<=3)
- usr << "\blue \The [src] was bitten [bitecount] times!"
- else
- usr << "\blue \The [src] was bitten multiple times!"
-
-/obj/item/weapon/reagent_containers/food/snacks
- var/slice_path
- var/slices_num
-
- attackby(obj/item/weapon/W as obj, mob/user as mob)
-
- if((slices_num <= 0 || !slices_num) || !slice_path)
- return 1
- var/inaccurate = 0
- if( \
- istype(W, /obj/item/weapon/kitchenknife) || \
- istype(W, /obj/item/weapon/butch) || \
- istype(W, /obj/item/weapon/scalpel) || \
- istype(W, /obj/item/weapon/kitchen/utensil/knife) \
- )
- else if( \
- istype(W, /obj/item/weapon/circular_saw) || \
- istype(W, /obj/item/weapon/melee/energy/sword) && W:active || \
- istype(W, /obj/item/weapon/melee/energy/blade) || \
- istype(W, /obj/item/weapon/shovel) || \
- istype(W, /obj/item/weapon/hatchet) \
- )
- inaccurate = 1
- /*else if(W.w_class <= 2 && istype(src,/obj/item/weapon/reagent_containers/food/snacks/sliceable))
- user << "\red You slip [W] inside [src]."
- user.drop_item()
- W.loc = src
- add_fingerprint(user)
- return*/
- else
- return 1
- if ( \
- !isturf(src.loc) || \
- !(locate(/obj/structure/table) in src.loc) && \
- !(locate(/obj/machinery/optable) in src.loc) && \
- !(locate(/obj/item/weapon/tray) in src.loc) \
- )
- user << "\red You cannot slice [src] here! You need a table or at least a tray to do it."
- return 1
- var/slices_lost = 0
- if (!inaccurate)
- user.visible_message( \
- "\blue [user] slices \the [src]!", \
- "\blue You slice \the [src]!" \
- )
- else
- user.visible_message( \
- "\blue [user] inaccurately slices \the [src] with [W]!", \
- "\blue You inaccurately slice \the [src] with your [W]!" \
- )
- slices_lost = rand(1,min(1,round(slices_num/2)))
- var/reagents_per_slice = reagents.total_volume/slices_num
- for(var/i=1 to (slices_num-slices_lost))
- var/obj/slice = new slice_path (src.loc)
- reagents.trans_to(slice,reagents_per_slice)
- del(src)
- return
-
- Del()
- if(contents)
- for(var/atom/movable/something in contents)
- something.loc = get_turf(src)
- ..()
-
-
-////////////////////////////////////////////////////////////////////////////////
-/// FOOD END
-////////////////////////////////////////////////////////////////////////////////
-
-////////////////////////////////////////////////////////////////////////////////
-/// Drinks.
-////////////////////////////////////////////////////////////////////////////////
-/obj/item/weapon/reagent_containers/food/drinks
- name = "drink"
- desc = "yummy"
- icon = 'drinks.dmi'
- icon_state = null
- flags = FPRINT | TABLEPASS | OPENCONTAINER
- var/gulp_size = 5 //This is now officially broken ... need to think of a nice way to fix it.
- possible_transfer_amounts = list(5,10,25)
- volume = 50
-
- on_reagent_change()
- if (gulp_size < 5) gulp_size = 5
- else gulp_size = max(round(reagents.total_volume / 5), 5)
-
- attack_self(mob/user as mob)
- return
-
- attack(mob/M as mob, mob/user as mob, def_zone)
- var/datum/reagents/R = src.reagents
- var/fillevel = gulp_size
-
- if(!R.total_volume || !R)
- user << "\red None of [src] left, oh no!"
- return 0
-
- if(M == user)
- M << "\blue You swallow a gulp of [src]."
- if(reagents.total_volume)
- reagents.reaction(M, INGEST)
- spawn(5)
- reagents.trans_to(M, gulp_size)
-
- playsound(M.loc,'drink.ogg', rand(10,50), 1)
- return 1
- else if( istype(M, /mob/living/carbon/human) )
-
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] attempts to feed [M] [src].", 1)
- if(!do_mob(user, M)) return
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] feeds [M] [src].", 1)
-
- M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: \ref[reagents]")
- user.attack_log += text("\[[time_stamp()]\] Fed [M.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]")
-
- log_admin("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
- msg_admin_attack("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
-
- log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
-
-
- if(reagents.total_volume)
- reagents.reaction(M, INGEST)
- spawn(5)
- reagents.trans_to(M, gulp_size)
-
- if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell
- var/mob/living/silicon/robot/bro = user
- bro.cell.use(30)
- var/refill = R.get_master_reagent_id()
- spawn(600)
- R.add_reagent(refill, fillevel)
-
-
- playsound(M.loc,'drink.ogg', rand(10,50), 1)
- return 1
-
- return 0
-
-
- afterattack(obj/target, mob/user , flag)
-
- if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
-
- if(!target.reagents.total_volume)
- user << "\red [target] is empty."
- return
-
- if(reagents.total_volume >= reagents.maximum_volume)
- user << "\red [src] is full."
- return
-
- var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
- user << "\blue You fill [src] with [trans] units of the contents of [target]."
-
- else if(target.is_open_container()) //Something like a glass. Player probably wants to transfer TO it.
- if(!reagents.total_volume)
- user << "\red [src] is empty."
- return
-
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "\red [target] is full."
- return
-
- var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
- user << "\blue You transfer [trans] units of the solution to [target]."
-
- if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell
- var/mob/living/silicon/robot/bro = user
- bro.cell.use(30)
- var/refill = reagents.get_master_reagent_id()
- spawn(600)
- reagents.add_reagent(refill, trans)
-
- return
-
- examine()
- set src in view()
- ..()
- if (!(usr in range(0)) && usr!=src.loc) return
- if(!reagents || reagents.total_volume==0)
- usr << "\blue \The [src] is empty!"
- else if (reagents.total_volumeHas been fed [src.name] by [user.name] ([user.ckey]) Reagents: \ref[reagents]")
- user.attack_log += text("\[[time_stamp()]\] Fed [M.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]")
-
- log_admin("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
- msg_admin_attack("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
-
- log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
-
- if(reagents.total_volume)
- reagents.reaction(M, INGEST)
- spawn(5)
- reagents.trans_to(M, reagents.total_volume)
- del(src)
- else
- del(src)
-
- return 1
-
- return 0
-
- afterattack(obj/target, mob/user , flag)
-
- if(target.is_open_container() == 1 && target.reagents)
- if(!target.reagents.total_volume)
- user << "\red [target] is empty. Cant dissolve pill."
- return
- user << "\blue You dissolve the pill in [target]"
- reagents.trans_to(target, reagents.total_volume)
- for(var/mob/O in viewers(2, user))
- O.show_message("\red [user] puts something in [target].", 1)
- spawn(5)
- del(src)
-
- return
-
-////////////////////////////////////////////////////////////////////////////////
-/// Pills. END
-////////////////////////////////////////////////////////////////////////////////
-
-////////////////////////////////////////////////////////////////////////////////
-/// Subtypes.
-////////////////////////////////////////////////////////////////////////////////
-
-//Glasses
-/obj/item/weapon/reagent_containers/glass/bucket
- desc = "It's a bucket."
- name = "bucket"
- icon = 'janitor.dmi'
- icon_state = "bucket"
- item_state = "bucket"
- m_amt = 200
- g_amt = 0
- w_class = 3.0
- amount_per_transfer_from_this = 20
- possible_transfer_amounts = list(10,20,30,50,70)
- volume = 70
- flags = FPRINT | OPENCONTAINER
-
- attackby(var/obj/D, mob/user as mob)
- if(isprox(D))
- var/obj/item/weapon/bucket_sensor/B = new /obj/item/weapon/bucket_sensor(user.loc)
- B.layer = 20
- user << "You add the sensor to the bucket"
- del(D)
- del(src)
-
-/obj/item/weapon/reagent_containers/glass/bucket/wateringcan
- name = "watering can"
- desc = "A watering can, for all your watering needs."
- icon = 'hydroponics.dmi'
- icon_state = "watercan"
- item_state = "bucket"
-
- attackby(var/obj/D, mob/user as mob)
- if(isprox(D))
- return
-
-/obj/item/weapon/reagent_containers/glass/cantister
- desc = "It's a canister. Mainly used for transporting fuel."
- name = "canister"
- icon = 'tank.dmi'
- icon_state = "canister"
- item_state = "canister"
- m_amt = 300
- g_amt = 0
- w_class = 4.0
-
- amount_per_transfer_from_this = 20
- possible_transfer_amounts = list(10,20,30,60)
- volume = 120
- flags = FPRINT
-
-
-/obj/item/weapon/reagent_containers/glass/dispenser
- name = "reagent glass"
- desc = "A reagent glass."
- icon = 'chemical.dmi'
- icon_state = "beaker0"
- amount_per_transfer_from_this = 10
- flags = FPRINT | TABLEPASS | OPENCONTAINER
-
-/obj/item/weapon/reagent_containers/glass/dispenser/surfactant
- name = "reagent glass (surfactant)"
- icon_state = "liquid"
-
- New()
- ..()
- reagents.add_reagent("fluorosurfactant", 20)
-
-/obj/item/weapon/reagent_containers/glass/beaker
- name = "beaker"
- desc = "A beaker. Can hold up to 50 units."
- icon = 'chemical.dmi'
- icon_state = "beaker0"
- item_state = "beaker"
- m_amt = 0
- g_amt = 500
-
- pickup(mob/user)
- on_reagent_change(user)
-
- dropped(mob/user)
- on_reagent_change()
-
- on_reagent_change(var/mob/user)
- /*
- if(reagents.total_volume)
- icon_state = "beaker1"
- else
- icon_state = "beaker0"
- */
- overlays = null
-
- if(reagents.total_volume)
- var/obj/effect/overlay = new/obj
- overlay.icon = 'beaker1.dmi'
- var/percent = round((reagents.total_volume / volume) * 100)
- switch(percent)
- if(0 to 9) overlay.icon_state = "-10"
- if(10 to 24) overlay.icon_state = "10"
- if(25 to 49) overlay.icon_state = "25"
- if(50 to 74) overlay.icon_state = "50"
- if(75 to 79) overlay.icon_state = "75"
- if(80 to 90) overlay.icon_state = "80"
- if(91 to 100) overlay.icon_state = "100"
-
- var/list/rgbcolor = list(0,0,0)
- var/finalcolor
- for(var/datum/reagent/re in reagents.reagent_list) // natural color mixing bullshit/algorithm
- if(!finalcolor)
- rgbcolor = GetColors(re.color)
- finalcolor = re.color
- else
- var/newcolor[3]
- var/prergbcolor[3]
- prergbcolor = rgbcolor
- newcolor = GetColors(re.color)
-
- rgbcolor[1] = (prergbcolor[1]+newcolor[1])/2
- rgbcolor[2] = (prergbcolor[2]+newcolor[2])/2
- rgbcolor[3] = (prergbcolor[3]+newcolor[3])/2
-
- finalcolor = rgb(rgbcolor[1], rgbcolor[2], rgbcolor[3])
- // This isn't a perfect color mixing system, the more reagents that are inside,
- // the darker it gets until it becomes absolutely pitch black! I dunno, maybe
- // that's pretty realistic? I don't do a whole lot of color-mixing anyway.
- // If you add brighter colors to it it'll eventually get lighter, though.
-
- overlay.icon += finalcolor
- if(user || !istype(src.loc, /turf))
- overlay.layer = 30
- overlays += overlay
-
-
-/obj/item/weapon/reagent_containers/glass/blender_jug
- name = "Blender Jug"
- desc = "A blender jug, part of a blender."
- icon = 'kitchen.dmi'
- icon_state = "blender_jug_e"
- volume = 100
-
- on_reagent_change()
- switch(src.reagents.total_volume)
- if(0)
- icon_state = "blender_jug_e"
- if(1 to 75)
- icon_state = "blender_jug_h"
- if(76 to 100)
- icon_state = "blender_jug_f"
-
-/obj/item/weapon/reagent_containers/glass/large
- name = "large reagent glass"
- desc = "A large reagent glass. Can hold up to 100 units."
- icon = 'chemical.dmi'
- icon_state = "beakerlarge"
- item_state = "beaker"
- m_amt = 0
- g_amt = 5000
- volume = 100
- amount_per_transfer_from_this = 10
- possible_transfer_amounts = list(5,10,15,25,30,50,100)
- flags = FPRINT | TABLEPASS | OPENCONTAINER
-
-
- pickup(mob/user)
- on_reagent_change(user)
-
- dropped(mob/user)
- on_reagent_change()
-
- on_reagent_change(var/mob/user)
- overlays = null
-
- if(reagents.total_volume)
-
- var/obj/effect/overlay = new/obj
- overlay.icon = 'beaker2.dmi'
- var/percent = round((reagents.total_volume / volume) * 100)
- switch(percent)
- if(0 to 9) overlay.icon_state = "-10"
- if(10 to 24) overlay.icon_state = "10"
- if(25 to 49) overlay.icon_state = "25"
- if(50 to 74) overlay.icon_state = "50"
- if(75 to 79) overlay.icon_state = "75"
- if(80 to 90) overlay.icon_state = "80"
- if(91 to 100) overlay.icon_state = "100"
-
- var/list/rgbcolor = list(0,0,0)
- var/finalcolor
- for(var/datum/reagent/re in reagents.reagent_list) // natural color mixing bullshit/algorithm
- if(!finalcolor)
- rgbcolor = GetColors(re.color)
- finalcolor = re.color
- else
- var/newcolor[3]
- var/prergbcolor[3]
- prergbcolor = rgbcolor
- newcolor = GetColors(re.color)
-
- rgbcolor[1] = (prergbcolor[1]+newcolor[1])/2
- rgbcolor[2] = (prergbcolor[2]+newcolor[2])/2
- rgbcolor[3] = (prergbcolor[3]+newcolor[3])/2
-
- finalcolor = rgb(rgbcolor[1], rgbcolor[2], rgbcolor[3])
- // This isn't a perfect color mixing system, the more reagents that are inside,
- // the darker it gets until it becomes absolutely pitch black! I dunno, maybe
- // that's pretty realistic? I don't do a whole lot of color-mixing anyway.
- // If you add brighter colors to it it'll eventually get lighter, though.
-
- overlay.icon += finalcolor
- if(user || !istype(src.loc, /turf))
- overlay.layer = 30
- overlays += overlay
-
-/obj/item/weapon/reagent_containers/glass/bottle
- name = "bottle"
- desc = "A small bottle."
- icon = 'chemical.dmi'
- icon_state = null
- item_state = "atoxinbottle"
- amount_per_transfer_from_this = 10
- possible_transfer_amounts = list(5,10,15,25,30)
- flags = FPRINT | TABLEPASS | OPENCONTAINER
- volume = 50
-
- New()
- ..()
- if(!icon_state)
- icon_state = "bottle[rand(1,20)]"
-
-/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline
- name = "inaprovaline bottle"
- desc = "A small bottle. Contains inaprovaline - used to stabilize patients."
- icon = 'chemical.dmi'
- icon_state = "bottle16"
-
- New()
- ..()
- reagents.add_reagent("inaprovaline", 30)
-
-/obj/item/weapon/reagent_containers/glass/bottle/toxin
- name = "toxin bottle"
- desc = "A small bottle of toxins. Do not drink, it is poisonous."
- icon = 'chemical.dmi'
- icon_state = "bottle12"
-
- New()
- ..()
- reagents.add_reagent("toxin", 30)
-
-/*/obj/item/weapon/reagent_containers/glass/bottle/cyanide
- name = "cyanide bottle"
- desc = "A small bottle of cyanide. Bitter almonds?"
- icon = 'chemical.dmi'
- icon_state = "bottle12"
-
- New()
- ..()
- reagents.add_reagent("cyanide", 30) */
-
-/obj/item/weapon/reagent_containers/glass/bottle/stoxin
- name = "sleep-toxin bottle"
- desc = "A small bottle of sleep toxins. Just the fumes make you sleepy."
- icon = 'chemical.dmi'
- icon_state = "bottle20"
-
- New()
- ..()
- reagents.add_reagent("stoxin", 30)
-
-/obj/item/weapon/reagent_containers/glass/bottle/chloralhydrate
- name = "Chloral Hydrate Bottle"
- desc = "A small bottle of Choral Hydrate. Mickey's Favorite!"
- icon = 'chemical.dmi'
- icon_state = "bottle20"
-
- New()
- ..()
- reagents.add_reagent("chloralhydrate", 15) //Intentionally low since it is so strong. Still enough to knock someone out.
-
-/obj/item/weapon/reagent_containers/glass/bottle/antitoxin
- name = "anti-toxin bottle"
- desc = "A small bottle of Anti-toxins. Counters poisons, and repairs damage, a wonder drug."
- icon = 'chemical.dmi'
- icon_state = "bottle17"
-
- New()
- ..()
- reagents.add_reagent("anti_toxin", 30)
-
-/obj/item/weapon/reagent_containers/glass/bottle/ammonia
- name = "ammonia bottle"
- desc = "A small bottle."
- icon = 'chemical.dmi'
- icon_state = "bottle20"
-
- New()
- ..()
- reagents.add_reagent("ammonia", 30)
-
-/obj/item/weapon/reagent_containers/glass/bottle/diethylamine
- name = "diethylamine bottle"
- desc = "A small bottle."
- icon = 'chemical.dmi'
- icon_state = "bottle17"
-
- New()
- ..()
- reagents.add_reagent("diethylamine", 30)
-
-/obj/item/weapon/reagent_containers/glass/bottle/flu_virion
- name = "Flu virion culture bottle"
- desc = "A small bottle. Contains H13N1 flu virion culture in synthblood medium."
- icon = 'chemical.dmi'
- icon_state = "bottle3"
- New()
- ..()
- var/datum/disease/F = new /datum/disease/flu(0)
- var/list/data = list("viruses"= list(F))
- reagents.add_reagent("blood", 20, data)
-
-/obj/item/weapon/reagent_containers/glass/bottle/pierrot_throat
- name = "Pierrot's Throat culture bottle"
- desc = "A small bottle. Contains H0NI<42 virion culture in synthblood medium."
- icon = 'chemical.dmi'
- icon_state = "bottle3"
- New()
- ..()
- var/datum/disease/F = new /datum/disease/pierrot_throat(0)
- var/list/data = list("viruses"= list(F))
- reagents.add_reagent("blood", 20, data)
-
-/obj/item/weapon/reagent_containers/glass/bottle/cold
- name = "Rhinovirus culture bottle"
- desc = "A small bottle. Contains XY-rhinovirus culture in synthblood medium."
- icon = 'chemical.dmi'
- icon_state = "bottle3"
- New()
- ..()
- var/datum/disease/F = new /datum/disease/cold(0)
- var/list/data = list("viruses"= list(F))
- reagents.add_reagent("blood", 20, data)
-
-/obj/item/weapon/reagent_containers/glass/bottle/retrovirus
- name = "Retrovirus culture bottle"
- desc = "A small bottle. Contains a retrovirus culture in a synthblood medium."
- icon = 'chemical.dmi'
- icon_state = "bottle3"
- New()
- ..()
- var/datum/disease/F = new /datum/disease/dna_retrovirus(0)
- var/list/data = list("viruses"= list(F))
- reagents.add_reagent("blood", 20, data)
-
-
-/obj/item/weapon/reagent_containers/glass/bottle/gbs
- name = "GBS culture bottle"
- desc = "A small bottle. Contains Gravitokinetic Bipotential SADS+ culture in synthblood medium."//Or simply - General BullShit
- icon = 'chemical.dmi'
- icon_state = "bottle3"
- amount_per_transfer_from_this = 5
-
- New()
- var/datum/reagents/R = new/datum/reagents(20)
- reagents = R
- R.my_atom = src
- var/datum/disease/F = new /datum/disease/gbs
- var/list/data = list("virus"= F)
- R.add_reagent("blood", 20, data)
-
-/obj/item/weapon/reagent_containers/glass/bottle/fake_gbs
- name = "GBS culture bottle"
- desc = "A small bottle. Contains Gravitokinetic Bipotential SADS- culture in synthblood medium."//Or simply - General BullShit
- icon = 'chemical.dmi'
- icon_state = "bottle3"
- New()
- ..()
- var/datum/disease/F = new /datum/disease/fake_gbs(0)
- var/list/data = list("viruses"= list(F))
- reagents.add_reagent("blood", 20, data)
-/*
-/obj/item/weapon/reagent_containers/glass/bottle/rhumba_beat
- name = "Rhumba Beat culture bottle"
- desc = "A small bottle. Contains The Rhumba Beat culture in synthblood medium."//Or simply - General BullShit
- icon = 'chemical.dmi'
- icon_state = "bottle3"
- amount_per_transfer_from_this = 5
-
- New()
- var/datum/reagents/R = new/datum/reagents(20)
- reagents = R
- R.my_atom = src
- var/datum/disease/F = new /datum/disease/rhumba_beat
- var/list/data = list("virus"= F)
- R.add_reagent("blood", 20, data)
-*/
-
-/obj/item/weapon/reagent_containers/glass/bottle/brainrot
- name = "Brainrot culture bottle"
- desc = "A small bottle. Contains Cryptococcus Cosmosis culture in synthblood medium."
- icon = 'chemical.dmi'
- icon_state = "bottle3"
- New()
- ..()
- var/datum/disease/F = new /datum/disease/brainrot(0)
- var/list/data = list("viruses"= list(F))
- reagents.add_reagent("blood", 20, data)
-
-/obj/item/weapon/reagent_containers/glass/bottle/magnitis
- name = "Magnitis culture bottle"
- desc = "A small bottle. Contains a small dosage of Fukkos Miracos."
- icon = 'chemical.dmi'
- icon_state = "bottle3"
- New()
- ..()
- var/datum/disease/F = new /datum/disease/magnitis(0)
- var/list/data = list("viruses"= list(F))
- reagents.add_reagent("blood", 20, data)
-
-
-/obj/item/weapon/reagent_containers/glass/bottle/wizarditis
- name = "Wizarditis culture bottle"
- desc = "A small bottle. Contains a sample of Rincewindus Vulgaris."
- icon = 'chemical.dmi'
- icon_state = "bottle3"
- New()
- ..()
- var/datum/disease/F = new /datum/disease/wizarditis(0)
- var/list/data = list("viruses"= list(F))
- reagents.add_reagent("blood", 20, data)
-
-/obj/item/weapon/reagent_containers/glass/bottle/pacid
- name = "Polytrinic Acid Bottle"
- desc = "A small bottle. Contains a small amount of Polytrinic Acid"
- icon = 'chemical.dmi'
- icon_state = "bottle17"
- New()
- ..()
- reagents.add_reagent("pacid", 30)
-
-/obj/item/weapon/reagent_containers/glass/bottle/adminordrazine
- name = "Adminordrazine Bottle"
- desc = "A small bottle. Contains the liquid essence of the gods."
- icon = 'drinks.dmi'
- icon_state = "holyflask"
- New()
- ..()
- reagents.add_reagent("adminordrazine", 30)
-
-
-/obj/item/weapon/reagent_containers/glass/bottle/ert
- name = "emergency medicine bottle"
- desc = "A large bottle."
- icon = 'chemical.dmi'
- icon_state = "bottle3"
- item_state = "atoxinbottle"
- amount_per_transfer_from_this = 50
- possible_transfer_amounts = null
- flags = FPRINT | TABLEPASS | OPENCONTAINER
- volume = 50
-
- New()
- ..()
- if(!icon_state)
- icon_state = "bottle[rand(1,20)]"
-
-/obj/item/weapon/reagent_containers/glass/bottle/ert/quikheal
- name = "Quikheal bottle"
- desc = "Seems to be a strange mix of delicious goodness. Smells woozy."
-
- New()
- ..()
- reagents.add_reagent("bicaridine", 8)
- reagents.add_reagent("dexalinp", 5)
- reagents.add_reagent("dermaline", 8)
- reagents.add_reagent("arithrazine", 8)
- reagents.add_reagent("inaprovaline", 8)
- reagents.add_reagent("cryptobiolin", 13)
-
-/obj/item/weapon/reagent_containers/glass/bottle/ert/boost
- name = "Combat Boost bottle"
- desc = "Seems to be a strange mix of delicious goodness. It... Pulses slightly before your eyes."
-
- New()
- ..()
- reagents.add_reagent("hyperzine", 10)
- reagents.add_reagent("dermaline", 10)
- reagents.add_reagent("leporazine", 10)
- reagents.add_reagent("bicaridine", 10)
- reagents.add_reagent("mutagen", 10)
-
-/obj/item/weapon/reagent_containers/glass/bottle/ert/cryo
- name = "Cryo-in-a-bottle"
- desc = "Seems to be a strange mix of delicious goodness. It's freezing cold to the touch."
-
- New()
- ..()
- reagents.add_reagent("clonexadone", 25)
- reagents.add_reagent("liquidnitrogen", 15)
- reagents.add_reagent("chloralhydrate", 10)
-
-
-/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone
- name = "beaker"
- desc = "A beaker. Can hold up to 50 units."
- icon = 'chemical.dmi'
- icon_state = "beaker0"
- item_state = "beaker"
-
- New()
- ..()
- reagents.add_reagent("cryoxadone", 30)
-
-/obj/item/weapon/reagent_containers/glass/beaker/tricordrazine
- name = "beaker"
- desc = "A beaker. Can hold up to 50 units."
- icon = 'chemical.dmi'
- icon_state = "beaker0"
- item_state = "beaker"
-
- New()
- ..()
- reagents.add_reagent("tricordrazine", 30)
-
-/obj/item/weapon/reagent_containers/food/drinks/golden_cup
- desc = "A golden cup"
- name = "golden cup"
- icon_state = "golden_cup"
- item_state = "" //nope :(
- w_class = 4
- force = 14
- throwforce = 10
- amount_per_transfer_from_this = 20
- possible_transfer_amounts = null
- volume = 150
- flags = FPRINT | CONDUCT | TABLEPASS | OPENCONTAINER
-
-/obj/item/weapon/reagent_containers/food/drinks/golden_cup/tournament_26_06_2011
- desc = "A golden cup. It will be presented to a winner of tournament 26 june and name of the winner will be graved on it."
-
-//Syringes
-/obj/item/weapon/reagent_containers/syringe/robot/antitoxin
- name = "Syringe (anti-toxin)"
- desc = "Contains anti-toxins."
- New()
- ..()
- reagents.add_reagent("anti_toxin", 15)
- mode = SYRINGE_INJECT
- update_icon()
-
-/obj/item/weapon/reagent_containers/syringe/robot/inaprovaline
- name = "Syringe (inaprovaline)"
- desc = "Contains inaprovaline - used to stabilize patients."
- New()
- ..()
- reagents.add_reagent("inaprovaline", 15)
- mode = SYRINGE_INJECT
- update_icon()
-
-/obj/item/weapon/reagent_containers/syringe/robot/mixed
- name = "Syringe (mixed)"
- desc = "Contains inaprovaline & anti-toxins."
- New()
- ..()
- reagents.add_reagent("inaprovaline", 7)
- reagents.add_reagent("anti_toxin", 8)
- mode = SYRINGE_INJECT
- update_icon()
-
-/obj/item/weapon/reagent_containers/syringe/inaprovaline
- name = "Syringe (inaprovaline)"
- desc = "Contains inaprovaline - used to stabilize patients."
- New()
- ..()
- reagents.add_reagent("inaprovaline", 15)
- mode = SYRINGE_INJECT
- update_icon()
-
-/obj/item/weapon/reagent_containers/syringe/antitoxin
- name = "Syringe (anti-toxin)"
- desc = "Contains anti-toxins."
- New()
- ..()
- reagents.add_reagent("anti_toxin", 15)
- mode = SYRINGE_INJECT
- update_icon()
-
-/obj/item/weapon/reagent_containers/syringe/antiviral
- name = "Syringe (spaceacillin)"
- desc = "Contains antiviral agents."
- New()
- ..()
- reagents.add_reagent("spaceacillin", 15)
- mode = SYRINGE_INJECT
- update_icon()
-
-/obj/item/weapon/reagent_containers/ld50_syringe/choral
- New()
- ..()
- reagents.add_reagent("chloralhydrate", 50)
- mode = SYRINGE_INJECT
- update_icon()
-
-////////////////////////////////////////////////////////////////////////////////
-/// Concrete food moved to code/modules/food/food.dm
-/////////////////////////////////////////////////////////////////////////////
-
-
-///////////////////////////////////////////////Condiments
-//Notes by Darem: The condiments food-subtype is for stuff you don't actually eat but you use to modify existing food. They all
-// leave empty containers when used up and can be filled/re-filled with other items. Formatting for first section is identical
-// to mixed-drinks code. If you want an object that starts pre-loaded, you need to make it in addition to the other code.
-
-/obj/item/weapon/reagent_containers/food/condiment //Food items that aren't eaten normally and leave an empty container behind.
- name = "Condiment Container"
- desc = "Just your average condiment container."
- icon = 'food.dmi'
- icon_state = "emptycondiment"
- flags = FPRINT | TABLEPASS | OPENCONTAINER
- possible_transfer_amounts = list(1,5,10)
- volume = 50
-
- attackby(obj/item/weapon/W as obj, mob/user as mob)
-
- return
- attack_self(mob/user as mob)
- return
- attack(mob/M as mob, mob/user as mob, def_zone)
- var/datum/reagents/R = src.reagents
-
- if(!R || !R.total_volume)
- user << "\red None of [src] left, oh no!"
- return 0
-
- if(M == user)
- M << "\blue You swallow some of contents of the [src]."
- if(reagents.total_volume)
- reagents.reaction(M, INGEST)
- spawn(5)
- reagents.trans_to(M, 10)
-
- playsound(M.loc,'drink.ogg', rand(10,50), 1)
- return 1
- else if( istype(M, /mob/living/carbon/human) )
-
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] attempts to feed [M] [src].", 1)
- if(!do_mob(user, M)) return
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] feeds [M] [src].", 1)
-
- M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: \ref[reagents]")
- user.attack_log += text("\[[time_stamp()]\] Fed [src.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]")
-
- log_admin("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
- msg_admin_attack("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
-
- log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
-
- if(reagents.total_volume)
- reagents.reaction(M, INGEST)
- spawn(5)
- reagents.trans_to(M, 10)
-
- playsound(M.loc,'drink.ogg', rand(10,50), 1)
- return 1
- return 0
-
- attackby(obj/item/I as obj, mob/user as mob)
-
- return
-
- afterattack(obj/target, mob/user , flag)
- if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
-
- if(!target.reagents.total_volume)
- user << "\red [target] is empty."
- return
-
- if(reagents.total_volume >= reagents.maximum_volume)
- user << "\red [src] is full."
- return
-
- var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
- user << "\blue You fill [src] with [trans] units of the contents of [target]."
-
- //Something like a glass or a food item. Player probably wants to transfer TO it.
- else if(target.is_open_container() || istype(target, /obj/item/weapon/reagent_containers/food/snacks))
- if(!reagents.total_volume)
- user << "\red [src] is empty."
- return
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "\red you can't add anymore to [target]."
- return
- var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
- user << "\blue You transfer [trans] units of the condiment to [target]."
-
- on_reagent_change()
- if(icon_state == "saltshakersmall" || icon_state == "peppermillsmall")
- return
- if(reagents.reagent_list.len > 0)
- switch(reagents.get_master_reagent_id())
- if("ketchup")
- name = "Ketchup"
- desc = "You feel more American already."
- icon_state = "ketchup"
- if("capsaicin")
- name = "Hotsauce"
- desc = "You can almost TASTE the stomach ulcers now!"
- icon_state = "hotsauce"
- if("enzyme")
- name = "Universal Enzyme"
- desc = "Used in cooking various dishes."
- icon_state = "enzyme"
- if("soysauce")
- name = "Soy Sauce"
- desc = "A salty soy-based flavoring."
- icon_state = "soysauce"
- if("frostoil")
- name = "Coldsauce"
- desc = "Leaves the tongue numb in its passage."
- icon_state = "coldsauce"
- if("sodiumchloride")
- name = "Salt Shaker"
- desc = "Salt. From space oceans, presumably."
- icon_state = "saltshaker"
- if("blackpepper")
- name = "Pepper Mill"
- desc = "Often used to flavor food or make people sneeze."
- icon_state = "peppermillsmall"
- if("cornoil")
- name = "Corn Oil"
- desc = "A delicious oil used in cooking. Made from corn."
- icon_state = "oliveoil"
- if("sugar")
- name = "Sugar"
- desc = "Tastey space sugar!"
- else
- name = "Misc Condiment Bottle"
- if (reagents.reagent_list.len==1)
- desc = "Looks like it is [reagents.get_master_reagent_name()], but you are not sure."
- else
- desc = "A mixture of various condiments. [reagents.get_master_reagent_name()] is one of them."
- icon_state = "mixedcondiments"
- else
- icon_state = "emptycondiment"
- name = "Condiment Bottle"
- desc = "An empty condiment bottle."
- return
-
-/obj/item/weapon/reagent_containers/food/condiment/enzyme
- name = "Universal Enzyme"
- desc = "Used in cooking various dishes."
- icon_state = "enzyme"
- New()
- ..()
- reagents.add_reagent("enzyme", 50)
-
-/obj/item/weapon/reagent_containers/food/condiment/sugar
- New()
- ..()
- reagents.add_reagent("sugar", 50)
-
-/obj/item/weapon/reagent_containers/food/condiment/saltshaker //Seperate from above since it's a small shaker rather then
- name = "Salt Shaker" // a large one.
- desc = "Salt. From space oceans, presumably."
- icon_state = "saltshakersmall"
- possible_transfer_amounts = list(1,20) //for clown turning the lid off
- amount_per_transfer_from_this = 1
- volume = 20
- New()
- ..()
- reagents.add_reagent("sodiumchloride", 20)
-
-/obj/item/weapon/reagent_containers/food/condiment/peppermill
- name = "Pepper Mill"
- desc = "Often used to flavor food or make people sneeze."
- icon_state = "peppermillsmall"
- possible_transfer_amounts = list(1,20) //for clown turning the lid off
- amount_per_transfer_from_this = 1
- volume = 20
- New()
- ..()
- reagents.add_reagent("blackpepper", 20)
-
-
-///////////////////////////////////////////////Drinks
-//Notes by Darem: Drinks are simply containers that start preloaded. Unlike condiments, the contents can be ingested directly
-// rather then having to add it to something else first. They should only contain liquids. They have a default container size of 50.
-// Formatting is the same as food.
-
-/obj/item/weapon/reagent_containers/food/drinks/milk
- name = "Space Milk"
- desc = "It's milk. White and nutritious goodness!"
- icon_state = "milk"
- New()
- ..()
- reagents.add_reagent("milk", 50)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/soymilk
- name = "SoyMilk"
- desc = "It's soy milk. White and nutritious goodness!"
- icon_state = "soymilk"
- New()
- ..()
- reagents.add_reagent("soymilk", 50)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/coffee
- name = "Robust Coffee"
- desc = "Careful, the beverage you're about to enjoy is extremely hot."
- icon_state = "coffee"
- New()
- ..()
- reagents.add_reagent("coffee", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/tea
- name = "Duke Purple Tea"
- desc = "A refreshingly quaint drink, served piping hot."
- icon_state = "tea"
- New()
- ..()
- reagents.add_reagent("tea", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/ice
- name = "Ice Cup"
- desc = "Careful, cold ice, do not chew."
- icon_state = "coffee"
- New()
- ..()
- reagents.add_reagent("ice", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/h_chocolate
- name = "Dutch Hot Coco"
- desc = "Made in Space South America."
- icon_state = "hotchocolate"
- New()
- ..()
- reagents.add_reagent("hot_coco", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/dry_ramen
- name = "Cup Ramen"
- desc = "Just add 10ml water, self heats! A taste that reminds you of your school years."
- icon_state = "ramen"
- New()
- ..()
- reagents.add_reagent("dry_ramen", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/cola
- name = "Space Cola"
- desc = "Cola. in space."
- icon_state = "cola"
- New()
- ..()
- reagents.add_reagent("cola", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/beer
- name = "Space Beer"
- desc = "Beer. In space."
- icon_state = "beer"
- New()
- ..()
- reagents.add_reagent("beer", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/ale
- name = "Magm-Ale"
- desc = "A true dorf's drink of choice."
- icon_state = "alebottle"
- New()
- ..()
- reagents.add_reagent("ale", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/space_mountain_wind
- name = "Space Mountain Wind"
- desc = "Blows right through you like a space wind."
- icon_state = "space_mountain_wind"
- New()
- ..()
- reagents.add_reagent("spacemountainwind", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/thirteenloko
- name = "Thirteen Loko"
- desc = "The CMO has advised crew members that consumption of Thirteen Loko may result in seizures, blindness, drunkeness, or even death. Please Drink Responsably."
- icon_state = "thirteen_loko"
- New()
- ..()
- reagents.add_reagent("thirteenloko", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/dr_gibb
- name = "Dr. Gibb"
- desc = "A delicious mixture of 42 different flavors."
- icon_state = "dr_gibb"
- New()
- ..()
- reagents.add_reagent("dr_gibb", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/starkist
- name = "Star-kist"
- desc = "The taste of a star in liquid form. And, a bit of tuna...?"
- icon_state = "starkist"
- New()
- ..()
- reagents.add_reagent("cola", 15)
- reagents.add_reagent("orangejuice", 15)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/space_up
- name = "Space-Up"
- desc = "Tastes like a hull breach in your mouth."
- icon_state = "space-up"
- New()
- ..()
- reagents.add_reagent("space_up", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/lemon_lime
- name = "Lemon-Lime"
- desc = "You wanted ORANGE. It gave you Lemon Lime."
- icon_state = "lemon-lime"
- New()
- ..()
- reagents.add_reagent("lemon_lime", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/waterbottle
- name = "water bottle"
- desc = "Straight from the ice lakes of Mars!"
- icon_state = "waterbottle"
- New()
- ..()
- reagents.add_reagent("water", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/sillycup
- name = "Paper Cup"
- desc = "A paper water cup."
- icon_state = "water_cup_e"
- possible_transfer_amounts = null
- volume = 10
- New()
- ..()
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
- on_reagent_change()
- if(reagents.total_volume)
- icon_state = "water_cup"
- else
- icon_state = "water_cup_e"
-
-///////////////////////////////////////////////Alchohol bottles! -Agouri //////////////////////////
-//Notes by Darem: Functionally identical to regular drinks. The only difference is that the default bottle size is 100.
-/obj/item/weapon/reagent_containers/food/drinks/bottle
- amount_per_transfer_from_this = 10
- volume = 100
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/gin
- name = "Griffeater Gin"
- desc = "A bottle of high quality gin, produced in the New London Space Station."
- icon_state = "ginbottle"
- New()
- ..()
- reagents.add_reagent("gin", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey
- name = "Uncle Git's Special Reserve"
- desc = "A premium single-malt whiskey, gently matured inside the tunnels of a nuclear shelter. TUNNEL WHISKEY RULES."
- icon_state = "whiskeybottle"
- New()
- ..()
- reagents.add_reagent("whiskey", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka
- name = "Tunguska Triple Distilled"
- desc = "Aah, vodka. Prime choice of drink AND fuel by Russians worldwide."
- icon_state = "vodkabottle"
- New()
- ..()
- reagents.add_reagent("vodka", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla
- name = "Caccavo Guaranteed Quality Tequilla"
- desc = "Made from premium petroleum distillates, pure thalidomide and other fine quality ingredients!"
- icon_state = "tequillabottle"
- New()
- ..()
- reagents.add_reagent("tequilla", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing
- name = "Bottle of Nothing"
- desc = "A bottle filled with nothing"
- icon_state = "bottleofnothing"
- New()
- ..()
- reagents.add_reagent("nothing", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/patron
- name = "Wrapp Artiste Patron"
- desc = "Silver laced tequilla, served in space night clubs across the galaxy."
- icon_state = "patronbottle"
- New()
- ..()
- reagents.add_reagent("patron", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/rum
- name = "Captain Pete's Cuban Spiced Rum"
- desc = "This isn't just rum, oh no. It's practically GRIFF in a bottle."
- icon_state = "rumbottle"
- New()
- ..()
- reagents.add_reagent("rum", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/deadrum
- name = "Deadrum Bumbo"
- desc = "Tastes a lot sweeter than ordinary rum (that's to help disguise the kick)."
- icon_state = "deadrumbottle"
- New()
- ..()
- reagents.add_reagent("deadrum", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater
- name = "Flask of Holy Water"
- desc = "A flask of the chaplain's holy water."
- icon_state = "holyflask"
- New()
- ..()
- reagents.add_reagent("holywater", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth
- name = "Goldeneye Vermouth"
- desc = "Sweet, sweet dryness~"
- icon_state = "vermouthbottle"
- New()
- ..()
- reagents.add_reagent("vermouth", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua
- name = "Robert Robust's Coffee Liqueur"
- desc = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936, HONK"
- icon_state = "kahluabottle"
- New()
- ..()
- reagents.add_reagent("kahlua", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager
- name = "College Girl Goldschlager"
- desc = "Because they are the only ones who will drink 100 proof cinnamon schnapps."
- icon_state = "goldschlagerbottle"
- New()
- ..()
- reagents.add_reagent("goldschlager", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac
- name = "Chateau De Baton Premium Cognac"
- desc = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. You might as well not scream 'SHITCURITY' this time."
- icon_state = "cognacbottle"
- New()
- ..()
- reagents.add_reagent("cognac", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/wine
- name = "Doublebeard Bearded Special Wine"
- desc = "A faint aura of unease and asspainery surrounds the bottle."
- icon_state = "winebottle"
- New()
- ..()
- reagents.add_reagent("wine", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe
- name = "Jailbreaker Verte"
- desc = "Twenty-fourth century Green Fairy, one sip of this and you just know you're gonna have a good time."
- icon_state = "absinthebottle"
- New()
- ..()
- reagents.add_reagent("absinthe", 100)
-
-//////////////////////////JUICES AND STUFF ///////////////////////
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice
- name = "Orange Juice"
- desc = "Full of vitamins and deliciousness!"
- icon_state = "orangejuice"
- New()
- ..()
- reagents.add_reagent("orangejuice", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/cream
- name = "Milk Cream"
- desc = "It's cream. Made from milk. What else did you think you'd find in there?"
- icon_state = "cream"
- New()
- ..()
- reagents.add_reagent("cream", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice
- name = "Tomato Juice"
- desc = "Well, at least it LOOKS like tomato juice. You can't tell with all that redness."
- icon_state = "tomatojuice"
- New()
- ..()
- reagents.add_reagent("tomatojuice", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice
- name = "Lime Juice"
- desc = "Sweet-sour goodness."
- icon_state = "limejuice"
- New()
- ..()
- reagents.add_reagent("limejuice", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/tonic
- name = "T-Borg's Tonic Water"
- desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away."
- icon_state = "tonic"
- New()
- ..()
- reagents.add_reagent("tonic", 50)
-
-/obj/item/weapon/reagent_containers/food/drinks/sodawater
- name = "Soda Water"
- desc = "A can of soda water. Why not make a scotch and soda?"
- icon_state = "sodawater"
- New()
- ..()
- reagents.add_reagent("sodawater", 50)
-
-////////////////////////// PILLS ///////////////////////
-
-/obj/item/weapon/reagent_containers/pill/antitox
- name = "Anti-toxins pill"
- desc = "Neutralizes many common toxins."
- icon_state = "pill17"
- New()
- ..()
- reagents.add_reagent("anti_toxin", 50)
-
-/obj/item/weapon/reagent_containers/pill/antitox/tajaran
- name = "peacebody plant powder"
- desc = "A powder ingested to rid the body of poisons."
- icon = 'food.dmi'
- icon_state = "nettlesoup"
- New()
- ..()
- reagents.add_reagent("anti_toxin", 100)
-
-/obj/item/weapon/reagent_containers/pill/tox
- name = "Toxins pill"
- desc = "Highly toxic."
- icon_state = "pill5"
- New()
- ..()
- reagents.add_reagent("toxin", 50)
-
-/obj/item/weapon/reagent_containers/pill/cyanide
- name = "Suicide pill"
- desc = "Don't swallow this."
- icon_state = "pill5"
- New()
- ..()
- reagents.add_reagent("chloralhydrate", 100)
-
-/obj/item/weapon/reagent_containers/pill/adminordrazine
- name = "Adminordrazine pill"
- desc = "It's magic. We don't have to explain it."
- icon_state = "pill16"
- New()
- ..()
- reagents.add_reagent("adminordrazine", 50)
-
-/obj/item/weapon/reagent_containers/pill/stox
- name = "Sleeping pill"
- desc = "Commonly used to treat insomnia."
- icon_state = "pill8"
- New()
- ..()
- reagents.add_reagent("stoxin", 15)
-
-/obj/item/weapon/reagent_containers/pill/kelotane
- name = "Kelotane pill"
- desc = "Used to treat burns."
- icon_state = "pill11"
- New()
- ..()
- reagents.add_reagent("kelotane", 15)
-
-/obj/item/weapon/reagent_containers/pill/tramadol
- name = "Tramadol pill"
- desc = "A simple painkiller."
- icon_state = "pill8"
- New()
- ..()
- reagents.add_reagent("tramadol", 15)
-
-/obj/item/weapon/reagent_containers/pill/inaprovaline
- name = "Inaprovaline pill"
- desc = "Used to stabilize patients."
- icon_state = "pill20"
- New()
- ..()
- reagents.add_reagent("inaprovaline", 30)
-
-/obj/item/weapon/reagent_containers/pill/dexalin
- name = "Dexalin pill"
- desc = "Used to treat oxygen deprivation."
- icon_state = "pill16"
- New()
- ..()
- reagents.add_reagent("dexalin", 15)
-
-/obj/item/weapon/reagent_containers/pill/bicaridine
- name = "Bicaridine pill"
- desc = "Used to treat physical injuries."
- icon_state = "pill18"
- New()
- ..()
- reagents.add_reagent("bicaridine", 15)
-
-//Dispensers
-/obj/structure/reagent_dispensers/watertank
- name = "watertank"
- desc = "A watertank"
- icon = 'objects.dmi'
- icon_state = "watertank"
- amount_per_transfer_from_this = 10
- New()
- ..()
- reagents.add_reagent("water",1000)
-
-/obj/structure/reagent_dispensers/fueltank
- name = "fueltank"
- desc = "A fueltank"
- icon = 'objects.dmi'
- icon_state = "weldtank"
- amount_per_transfer_from_this = 10
- New()
- ..()
- reagents.add_reagent("fuel",1000)
-
-
- bullet_act(var/obj/item/projectile/Proj)
- if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet))
- explosion(get_turf(src),-1,0,2)
- if(src)
- del(src)
-
-
-
- blob_act()
- explosion(get_turf(src),0,1,5,7,10)
- if(src)
- del(src)
-
- ex_act()
- explosion(get_turf(src),-1,0,2)
- if(src)
- del(src)
-
-/obj/structure/reagent_dispensers/peppertank
- name = "Pepper Spray Refiller"
- desc = "Refill pepper spray canisters."
- icon = 'objects.dmi'
- icon_state = "peppertank"
- anchored = 1
- density = 0
- amount_per_transfer_from_this = 45
- New()
- ..()
- reagents.add_reagent("condensedcapsaicin",1000)
-
-
-/obj/structure/reagent_dispensers/water_cooler
- name = "Water-Cooler"
- desc = "A machine that dispenses water to drink"
- amount_per_transfer_from_this = 5
- icon = 'vending.dmi'
- icon_state = "water_cooler"
- possible_transfer_amounts = null
- anchored = 1
- New()
- ..()
- reagents.add_reagent("water",500)
-
-
-/obj/structure/reagent_dispensers/beerkeg
- name = "beer keg"
- desc = "A beer keg"
- icon = 'objects.dmi'
- icon_state = "beertankTEMP"
- amount_per_transfer_from_this = 10
- New()
- ..()
- reagents.add_reagent("beer",1000)
-
-/obj/structure/reagent_dispensers/beerkeg/blob_act()
- explosion(get_turf(src),0,3,5,7,10)
- del(src)
-
-
-//////////////////////////drinkingglass and shaker//
-//Note by Darem: This code handles the mixing of drinks. New drinks go in three places: In Chemistry-Reagents.dm (for the drink
-// itself), in Chemistry-Recipes.dm (for the reaction that changes the components into the drink), and here (for the drinking glass
-// icon states.
-
-/obj/item/weapon/reagent_containers/food/drinks/shaker
- name = "Shaker"
- desc = "A metal shaker to mix drinks in."
- icon_state = "shaker"
- amount_per_transfer_from_this = 10
- volume = 100
-
-/obj/item/weapon/reagent_containers/food/drinks/flask
- name = "captain\'s flask"
- desc = "A metal flask belonging to the captain"
- icon_state = "flask"
- volume = 60
-
-/obj/item/weapon/reagent_containers/food/drinks/dflask
- name = "detective\'s flask"
- desc = "A well used metal flask with the detective's name etched into it."
- icon_state = "dflask"
- volume = 60
-
-/obj/item/weapon/reagent_containers/food/drinks/britcup
- name = "cup"
- desc = "A cup with the british flag emblazoned on it."
- icon_state = "britcup"
- volume = 30
-
-/obj/item/weapon/reagent_containers/food/drinks/drinkingglass
- name = "glass"
- desc = "Your standard drinking glass."
- icon_state = "glass_empty"
- amount_per_transfer_from_this = 10
- volume = 50
-
- on_reagent_change()
- /*if(reagents.reagent_list.len > 1 )
- icon_state = "glass_brown"
- name = "Glass of Hooch"
- desc = "Two or more drinks, mixed together."*/
- /*else if(reagents.reagent_list.len == 1)
- for(var/datum/reagent/R in reagents.reagent_list)
- switch(R.id)*/
- if (reagents.reagent_list.len > 0)
- //mrid = R.get_master_reagent_id()
- switch(reagents.get_master_reagent_id())
- if("beer")
- icon_state = "beerglass"
- name = "Beer glass"
- desc = "A freezing pint of beer"
- if("beer2")
- icon_state = "beerglass"
- name = "Beer glass"
- desc = "A freezing pint of beer"
- if("ale")
- icon_state = "aleglass"
- name = "Ale glass"
- desc = "A freezing pint of delicious Ale"
- if("milk")
- icon_state = "glass_white"
- name = "Glass of milk"
- desc = "White and nutritious goodness!"
- if("cream")
- icon_state = "glass_white"
- name = "Glass of cream"
- desc = "Ewwww..."
- if("chocolate")
- icon_state = "chocolateglass"
- name = "Glass of chocolate"
- desc = "Tasty"
- if("lemon")
- icon_state = "lemonglass"
- name = "Glass of lemon"
- desc = "Sour..."
- if("cola")
- icon_state = "glass_brown"
- name = "Glass of Space Cola"
- desc = "A glass of refreshing Space Cola"
- if("nuka_cola")
- icon_state = "nuka_colaglass"
- name = "Nuka Cola"
- desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland"
- if("orangejuice")
- icon_state = "glass_orange"
- name = "Glass of Orange juice"
- desc = "Vitamins! Yay!"
- if("tomatojuice")
- icon_state = "glass_red"
- name = "Glass of Tomato juice"
- desc = "Are you sure this is tomato juice?"
- if("blood")
- icon_state = "glass_red"
- name = "Glass of Tomato juice"
- desc = "Are you sure this is tomato juice?"
- if("limejuice")
- icon_state = "glass_green"
- name = "Glass of Lime juice"
- desc = "A glass of sweet-sour lime juice."
- if("whiskey")
- icon_state = "whiskeyglass"
- name = "Glass of whiskey"
- desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy."
- if("gin")
- icon_state = "ginvodkaglass"
- name = "Glass of gin"
- desc = "A crystal clear glass of Griffeater gin."
- if("vodka")
- icon_state = "ginvodkaglass"
- name = "Glass of vodka"
- desc = "The glass contain wodka. Xynta."
- if("goldschlager")
- icon_state = "ginvodkaglass"
- name = "Glass of goldschlager"
- desc = "100 proof that teen girls will drink anything with gold in it."
- if("wine")
- icon_state = "wineglass"
- name = "Glass of wine"
- desc = "A very classy looking drink."
- if("cognac")
- icon_state = "cognacglass"
- name = "Glass of cognac"
- desc = "Damn, you feel like some kind of French aristocrat just by holding this."
- if ("kahlua")
- icon_state = "kahluaglass"
- name = "Glass of RR coffee Liquor"
- desc = "DAMN, THIS THING LOOKS ROBUST"
- if("vermouth")
- icon_state = "vermouthglass"
- name = "Glass of Vermouth"
- desc = "You wonder why you're even drinking this straight."
- if("tequilla")
- icon_state = "tequillaglass"
- name = "Glass of Tequilla"
- desc = "Now all that's missing is the weird colored shades!"
- if("patron")
- icon_state = "patronglass"
- name = "Glass of Patron"
- desc = "Drinking patron in the bar, with all the subpar ladies."
- if("rum")
- icon_state = "rumglass"
- name = "Glass of Rum"
- desc = "Now you want to Pray for a pirate suit, don't you?"
- if("gintonic")
- icon_state = "gintonicglass"
- name = "Gin and Tonic"
- desc = "A mild but still great cocktail. Drink up, like a true Englishman."
- if("whiskeycola")
- icon_state = "whiskeycolaglass"
- name = "Whiskey Cola"
- desc = "An innocent-looking mixture of cola and Whiskey. Delicious."
- if("whiterussian")
- icon_state = "whiterussianglass"
- name = "White Russian"
- desc = "A very nice looking drink. But that's just, like, your opinion, man."
- if("screwdrivercocktail")
- icon_state = "screwdriverglass"
- name = "Screwdriver"
- desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer."
- if("bloodymary")
- icon_state = "bloodymaryglass"
- name = "Bloody Mary"
- desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder."
- if("martini")
- icon_state = "martiniglass"
- name = "Classic Martini"
- desc = "Damn, the bartender even stirred it, not shook it."
- if("vodkamartini")
- icon_state = "martiniglass"
- name = "Vodka martini"
- desc ="A bastardisation of the classic martini. Still great."
- if("gargleblaster")
- icon_state = "gargleblasterglass"
- name = "Pan-Galactic Gargle Blaster"
- desc = "Does... does this mean that Arthur and Ford are on the station? Oh joy."
- if("bravebull")
- icon_state = "bravebullglass"
- name = "Brave Bull"
- desc = "Tequilla and Coffee liquor, brought together in a mouthwatering mixture. Drink up."
- if("tequillasunrise")
- icon_state = "tequillasunriseglass"
- name = "Tequilla Sunrise"
- desc = "Oh great, now you feel nostalgic about sunrises back on Terra..."
- if("toxinsspecial")
- icon_state = "toxinsspecialglass"
- name = "Toxins Special"
- desc = "Whoah, this thing is on FIRE"
- if("beepskysmash")
- icon_state = "beepskysmashglass"
- name = "Beepsky Smash"
- desc = "Heavy, hot and strong. Just like the Iron fist of the LAW."
- if("doctorsdelight")
- icon_state = "doctorsdelightglass"
- name = "Doctor's Delight"
- desc = "A healthy mixture of juices, guaranteed to keep you healthy until the next toolboxing takes place."
- if("manlydorf")
- icon_state = "manlydorfglass"
- name = "The Manly Dorf"
- desc = "A manly concotion made from Ale and Beer. Intended for true men only."
- if("irishcream")
- icon_state = "irishcreamglass"
- name = "Irish Cream"
- desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?"
- if("cubalibre")
- icon_state = "cubalibreglass"
- name = "Cuba Libre"
- desc = "A classic mix of rum and cola."
- if("b52")
- icon_state = "b52glass"
- name = "B-52"
- desc = "Kahlua, Irish Cream, and congac. You will get bombed."
- if("atomicbomb")
- icon_state = "atomicbombglass"
- name = "Atomic Bomb"
- desc = "NanoTrasen cannot take legal responsibility for your actions after imbibing."
- if("longislandicedtea")
- icon_state = "longislandicedteaglass"
- name = "Long Island Iced Tea"
- desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only."
- if("threemileisland")
- icon_state = "threemileislandglass"
- name = "Three Mile Island Ice Tea"
- desc = "A glass of this is sure to prevent a meltdown."
- if("margarita")
- icon_state = "margaritaglass"
- name = "Margarita"
- desc = "On the rocks with salt on the rim. Arriba~!"
- if("blackrussian")
- icon_state = "blackrussianglass"
- name = "Black Russian"
- desc = "For the lactose-intolerant. Still as classy as a White Russian."
- if("vodkatonic")
- icon_state = "vodkatonicglass"
- name = "Vodka and Tonic"
- desc = "For when a gin and tonic isn't russian enough."
- if("manhattan")
- icon_state = "manhattanglass"
- name = "Manhattan"
- desc = "The Detective's undercover drink of choice. He never could stomach gin..."
- if("manhattan_proj")
- icon_state = "proj_manhattanglass"
- name = "Manhattan Project"
- desc = "A scienitst drink of choice, for thinking how to blow up the station."
- if("ginfizz")
- icon_state = "ginfizzglass"
- name = "Gin Fizz"
- desc = "Refreshingly lemony, deliciously dry."
- if("irishcoffee")
- icon_state = "irishcoffeeglass"
- name = "Irish Coffee"
- desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning."
- if("hooch")
- icon_state = "glass_brown2"
- name = "Hooch"
- desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
- if("whiskeysoda")
- icon_state = "whiskeysodaglass2"
- name = "Whiskey Soda"
- desc = "Ultimate refreshment."
- if("tonic")
- icon_state = "glass_clear"
- name = "Glass of Tonic Water"
- desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away."
- if("sodawater")
- icon_state = "glass_clear"
- name = "Glass of Soda Water"
- desc = "Soda water. Why not make a scotch and soda?"
- if("water")
- icon_state = "glass_clear"
- name = "Glass of Water"
- desc = "The father of all refreshments."
- if("spacemountainwind")
- icon_state = "Space_mountain_wind_glass"
- name = "Glass of Space Mountain Wind"
- desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind."
- if("thirteenloko")
- icon_state = "thirteen_loko_glass"
- name = "Glass of Thirteen Loko"
- desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass"
- if("dr_gibb")
- icon_state = "dr_gibb_glass"
- name = "Glass of Dr. Gibb"
- desc = "Dr. Gibb. Not as dangerous as the name might imply."
- if("space_up")
- icon_state = "space-up_glass"
- name = "Glass of Space-up"
- desc = "Space-up. It helps keep your cool."
- if("moonshine")
- icon_state = "glass_clear"
- name = "Moonshine"
- desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
- if("soymilk")
- icon_state = "glass_white"
- name = "Glass of soy milk"
- desc = "White and nutritious soy goodness!"
- if("berryjuice")
- icon_state = "berryjuice"
- name = "Glass of berry juice"
- desc = "Berry juice. Or maybe its jam. Who cares?"
- if("poisonberryjuice")
- icon_state = "poisonberryjuice"
- name = "Glass of poison berry juice"
- desc = "A glass of deadly juice."
- if("carrotjuice")
- icon_state = "carrotjuice"
- name = "Glass of carrot juice"
- desc = "It is just like a carrot but without crunching."
- if("banana")
- icon_state = "banana"
- name = "Glass of banana juice"
- desc = "The raw essence of a banana. HONK"
- if("bahama_mama")
- icon_state = "bahama_mama"
- name = "Bahama Mama"
- desc = "Tropic cocktail"
- if("singulo")
- icon_state = "singulo"
- name = "Singulo"
- desc = "A blue-space beverage."
- if("alliescocktail")
- icon_state = "alliescocktail"
- name = "Allies cocktail"
- desc = "A drink made from your allies."
- if("antifreeze")
- icon_state = "antifreeze"
- name = "Anti-freeze"
- desc = "The ultimate refreshment."
- if("barefoot")
- icon_state = "b&p"
- name = "Barefoot"
- desc = "Barefoot and pregnant"
- if("demonsblood")
- icon_state = "demonsblood"
- name = "Demons Blood"
- desc = "Just looking at this thing makes the hair at the back of your neck stand up."
- if("booger")
- icon_state = "booger"
- name = "Booger"
- desc = "Ewww..."
- if("snowwhite")
- icon_state = "snowwhite"
- name = "Snow White"
- desc = "A cold refreshment."
- if("aloe")
- icon_state = "aloe"
- name = "Aloe"
- desc = "Very, very, very good."
- if("andalusia")
- icon_state = "andalusia"
- name = "Andalusia"
- desc = "A nice, strange named drink."
- if("sbiten")
- icon_state = "sbitenglass"
- name = "Sbiten"
- desc = "A spicy mix of Vodka and Spice. Very hot."
- if("red_mead")
- icon_state = "red_meadglass"
- name = "Red Mead"
- desc = "A True Vikings Beverage, though its color is strange."
- if("mead")
- icon_state = "meadglass"
- name = "Mead"
- desc = "A Vikings Beverage, though a cheap one."
- if("iced_beer")
- icon_state = "iced_beerglass"
- name = "Iced Beer"
- desc = "A beer so frosty, the air around it freezes."
- if("grog")
- icon_state = "grogglass"
- name = "Grog"
- desc = "A fine and cepa drink for Space."
- if("soy_latte")
- icon_state = "soy_latte"
- name = "Soy Latte"
- desc = "A nice and refrshing beverage while you are reading."
- if("cafe_latte")
- icon_state = "cafe_latte"
- name = "Cafe Latte"
- desc = "A nice, strong and refreshing beverage while you are reading."
- if("acidspit")
- icon_state = "acidspitglass"
- name = "Acid Spit"
- desc = "A drink from NanoTrasen. Made from live aliens."
- if("amasec")
- icon_state = "amasecglass"
- name = "Amasec"
- desc = "Always handy before COMBAT!!!"
- if("neurotoxin")
- icon_state = "neurotoxinglass"
- name = "Neurotoxin"
- desc = "A drink that is guaranteed to knock you silly."
- if("hippiesdelight")
- icon_state = "hippiesdelightglass"
- name = "Hippie's Delight"
- desc = "A drink enjoyed by people during the 1960's."
- if("bananahonk")
- icon_state = "bananahonkglass"
- name = "Banana Honk"
- desc = "A drink from Banana Heaven."
- if("silencer")
- icon_state = "silencerglass"
- name = "Silencer"
- desc = "A drink from silent Heaven."
- if("nothing")
- icon_state = "nothing"
- name = "Nothing"
- desc = "Absolutely nothing."
- if("devilskiss")
- icon_state = "devilskiss"
- name = "Devils Kiss"
- desc = "Creepy time!"
- if("changelingsting")
- icon_state = "changelingsting"
- name = "Changeling Sting"
- desc = "A stingy drink."
- if("irishcarbomb")
- icon_state = "irishcarbomb"
- name = "Irish Car Bomb"
- desc = "An irish car bomb."
- if("syndicatebomb")
- icon_state = "syndicatebomb"
- name = "Syndicate Bomb"
- desc = "A syndicate bomb."
- if("erikasurprise")
- icon_state = "erikasurprise"
- name = "Erika Surprise"
- desc = "The surprise is, it's green!"
- if("driestmartini")
- icon_state = "driestmartiniglass"
- name = "Driest Martini"
- desc = "Only for the experienced. You think you see sand floating in the glass."
- if("ice")
- icon_state = "iceglass"
- name = "Glass of ice"
- desc = "Generally, you're supposed to put something else in there too..."
- if("icecoffee")
- icon_state = "icedcoffeeglass"
- name = "Iced Coffee"
- desc = "A drink to perk you up and refresh you!"
- if("coffee")
- icon_state = "glass_brown"
- name = "Glass of coffee"
- desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere."
- if("bilk")
- icon_state = "glass_brown"
- name = "Glass of bilk"
- desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis."
- if("absinthe")
- icon_state = "glass_green"
- name = "Glass of absinthe"
- desc = "A glass of the Green Fairy."
- if("deadrum")
- icon_state = "glass_brown"
- name = "Glass of Dead Rum"
- desc = "Dangerously sweet rum. You won't be getting scurvy any time soon!"
- else
- icon_state ="glass_brown"
- name = "Glass of ..what?"
- desc = "You can't really tell what this is."
- else
- icon_state = "glass_empty"
- name = "drinking glass"
- desc = "Your standard drinking glass"
- return
-
-// for /obj/machinery/vending/sovietsoda
-/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/soda
- New()
- ..()
- reagents.add_reagent("sodawater", 50)
- on_reagent_change()
-
-/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/cola
- New()
- ..()
- reagents.add_reagent("cola", 50)
- on_reagent_change()
-
-///jar
-
-/obj/item/weapon/reagent_containers/food/drinks/jar
- name = "empty jar"
- desc = "A jar. You're not sure what it's supposed to hold."
- icon_state = "jar"
- item_state = "beaker"
- New()
- ..()
- reagents.add_reagent("metroid", 50)
-
- on_reagent_change()
- if (reagents.reagent_list.len > 0)
- switch(reagents.get_master_reagent_id())
- if("metroid")
- icon_state = "jar_metroid"
- name = "metroid jam"
- desc = "A jar of metroid jam. Delicious!"
- else
- icon_state ="jar_what"
- name = "jar of something"
- desc = "You can't really tell what this is."
- else
- icon_state = "jar"
- name = "empty jar"
- desc = "A jar. You're not sure what it's supposed to hold."
- return
-
-//////////////////
-//STYROFOAM CUPS//
-//////////////////
-/obj/item/weapon/reagent_containers/food/drinks/styrofoamcup
- name = "styrofoam cup"
- desc = "Cups for drinking."
- icon_state = "styrocup-empty"
- amount_per_transfer_from_this = 10
- volume = 50
-
- on_reagent_change()
- if (reagents.reagent_list.len > 0)
- switch(reagents.get_master_reagent_id())
- if("water")
- icon_state = "styrocup-clear"
- else
- icon_state ="styrocup-brown"
- else
- icon_state = "styrocup-empty"
- return
-
-/*/obj/item/weapon/reagent_containers/food/drinks/styrofoamcuppile
- name = "Styrofoam Cup Pile"
- //desc = "A pile of styrofoam cups."
- icon_state = "styrocup-stack6"
- item_state = "styrocup-stack6"
- w_class = 1
- throwforce = 1
- var/cupcount = 6
- flags = TABLEPASS
-
-/obj/item/weapon/reagent_containers/food/drinks/styrofoamcuppile/update_icon()
- src.icon_state = text("styrocup-stack[]", src.cupcount)
- src.desc = text("There are [] cups left!", src.cupcount)
- return
-
-/obj/item/weapon/reagent_containers/food/drinks/styrofoamcuppile/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if (istype(W, /obj/item/weapon/reagent_containers/food/drinks/styrofoamcup) && (cupcount < 6))
- user.drop_item()
- W.loc = src
- usr << "You place a cup back onto the pile."
- if (src.cupcount < 6)
- src.cupcount++
- src.update()
- return
-
-
-/obj/item/weapon/reagent_containers/food/drinks/styrofoamcuppile/proc/update()
- src.icon_state = text("styrocup-stack[]", src.cupcount)
- return
-
-/obj/item/weapon/reagent_containers/food/drinks/styrofoamcuppile/MouseDrop(mob/user as mob)
- if ((user == usr && (!( usr.restrained() ) && (!( usr.stat ) && (usr.contents.Find(src) || in_range(src, usr))))))
- if(ishuman(user))
- if (usr.hand)
- if (!( usr.l_hand ))
- spawn( 0 )
- src.attack_hand(usr, 1, 1)
- return
- else
- if (!( usr.r_hand ))
- spawn( 0 )
- src.attack_hand(usr, 0, 1)
- return
- return
-
-/obj/item/weapon/reagent_containers/food/drinks/styrofoamcuppile/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
-/obj/item/weapon/reagent_containers/food/drinks/styrofoamcuppile/attack_hand(mob/user as mob, unused, flag)
- if (flag)
- return ..()
- src.add_fingerprint(user)
- if (locate(/obj/item/weapon/reagent_containers/food/drinks/styrofoamcup, src))
- for(var/obj/item/weapon/reagent_containers/food/drinks/styrofoamcup/P in src)
- if (!usr.l_hand)
- P.loc = usr
- P.layer = 20
- usr.l_hand = P
- usr.update_clothing()
- usr << "You take a cup from the pile."
- break
- else if (!usr.r_hand)
- P.loc = usr
- P.layer = 20
- usr.r_hand = P
- usr.update_clothing()
- usr << "You take a cup from the pile."
- break
- else
- if (src.cupcount >= 1)
- src.cupcount--
- var/obj/item/weapon/reagent_containers/food/drinks/styrofoamcup/D = new /obj/item/weapon/reagent_containers/food/drinks/styrofoamcup
- D.loc = usr.loc
- if(ishuman(usr))
- if(!usr.get_active_hand())
- usr.put_in_hand(D)
- usr << "You take a cup from the pile."
- else
- D.loc = get_turf_loc(src)
- usr << "You take a cup from the pile."
-
- src.update()
- return
-
-/obj/item/weapon/reagent_containers/food/drinks/styrofoamcuppile/examine()
- set src in oview(1)
-
- src.cupcount = round(src.cupcount)
- var/n = src.cupcount
- for(var/obj/item/weapon/reagent_containers/food/drinks/styrofoamcup/P in src)
- n++
- if (n <= 0)
- n = 0
- usr << "There are no cups left on this pile."
- else
- if (n == 1)
- usr << "There is one cup left on this pile."
- else
- usr << text("There are [] cups on this pile.", n)
- return
-*/
\ No newline at end of file
diff --git a/code/modules/clothing/suits/bomb.dm b/code/modules/clothing/suits/bomb.dm
deleted file mode 100644
index 49e61740abf..00000000000
--- a/code/modules/clothing/suits/bomb.dm
+++ /dev/null
@@ -1,32 +0,0 @@
-/obj/item/clothing/head/bomb_hood
- name = "bomb hood"
- desc = "A hood that protects against explosions."
- icon_state = "bombsuit"
- flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
- armor = list(melee = 10, bullet = 10, laser = 10, energy = 10, bomb = 100, bio = 0, rad = 0)
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
-
-/obj/item/clothing/suit/bomb_suit
- name = "bomb suit"
- desc = "A suit that protects against explosions."
- icon_state = "bombsuit"
- item_state = "bombsuit"
- w_class = 4//bulky item
- gas_transfer_coefficient = 0.01
- permeability_coefficient = 0.01
- heat_transfer_coefficient = 0.30
- flags = FPRINT | TABLEPASS
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
- slowdown = 3.5 //To compensate for the extra armour.
- armor = list(melee = 10, bullet = 10, laser = 10, energy = 10, bomb = 100, bio = 0, rad = 0)
- flags_inv = HIDEJUMPSUIT
-
-
-/obj/item/clothing/head/bomb_hood/security
- icon_state = "bombsuitsec"
- item_state = "bombsuitsec"
-
-/obj/item/clothing/suit/bomb_suit/security
- icon_state = "bombsuitsec"
- item_state = "bombsuitsec"
- allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
diff --git a/code/modules/clothing/suits/detective.dm b/code/modules/clothing/suits/detective.dm
deleted file mode 100644
index 63e1da6a46b..00000000000
--- a/code/modules/clothing/suits/detective.dm
+++ /dev/null
@@ -1,58 +0,0 @@
-/obj/item/clothing/head/det_hat
- name = "detective's hat"
- desc = "Someone who wears this will look very smart."
- icon_state = "detective"
- allowed = list(/obj/item/weapon/reagent_containers/food/snacks/candy_corn, /obj/item/weapon/pen)
- armor = list(melee = 50, bullet = 5, laser = 25,energy = 10, bomb = 0, bio = 0, rad = 0)
-
-
-/obj/item/clothing/suit/storage/det_suit
- name = "detective's coat"
- desc = "An 18th-century multi-purpose trenchcoat. Someone who wears this means serious business."
- icon_state = "detective"
- item_state = "det_suit"
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
- allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/cigpacket,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder,/obj/item/taperoll/police)
- armor = list(melee = 50, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0)
-
-
-/obj/item/clothing/suit/storage/det_suit/armor
- name = "detective's armor"
- desc = "An armored vest with a detective's badge on it."
- icon_state = "detective-armor"
- item_state = "armor"
- flags = FPRINT | TABLEPASS
- body_parts_covered = UPPER_TORSO|LOWER_TORSO
- allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/taperoll/police)
- armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
-
-/obj/item/clothing/under/det/verb/holster()
- set name = "Holster"
- set category = "Object"
- set src in usr
-
- if(!gun)
- if(istype(usr.get_active_hand(),/obj/item/weapon/gun/projectile/detective) || istype(usr.get_active_hand(),/obj/item/weapon/gun/energy/stunrevolver))
- gun = usr.get_active_hand()
- usr.drop_item()
- gun.loc = src
- for(var/mob/M in viewers(usr, null))
- if(M.client)
- M.show_message(text("\blue [usr] holsters his gun."), 2)
- else
- usr << "\blue You need your gun equiped to holster it."
- else
- if(istype(usr.get_active_hand(),/obj) && istype(usr.get_inactive_hand(),/obj))
- usr << "\red If you want your gun from your holster, you need an empty hand!"
- else
- usr.put_in_hand(gun)
- icon_state = "detective"
- gun = null
- if(usr.a_intent == "hurt")
- for(var/mob/M in viewers(usr, null))
- if(M.client)
- M.show_message(text("\red [usr] draws his gun, and readies it for use!"), 2)
- else
- for(var/mob/M in viewers(usr, null))
- if(M.client)
- M.show_message(text("\blue [usr] draws his gun, but keeps it pointed safely at the ground."), 2)
diff --git a/code/modules/clothing/suits/fire.dm b/code/modules/clothing/suits/fire.dm
deleted file mode 100644
index e8ae3d644a9..00000000000
--- a/code/modules/clothing/suits/fire.dm
+++ /dev/null
@@ -1,66 +0,0 @@
-/obj/item/clothing/suit/fire
- name = "firesuit"
- desc = "A suit that protects against fire and heat."
- icon_state = "fire"
- item_state = "fire_suit"
- w_class = 4//bulky item
- gas_transfer_coefficient = 0.90
- permeability_coefficient = 0.50
- heat_transfer_coefficient = 0.01
- protective_temperature = 10000
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/extinguisher)
- slowdown = 1.0
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
-
-
-/obj/item/clothing/suit/fire/firefighter
- icon_state = "firesuit"
- item_state = "firefighter"
-
-
-/obj/item/clothing/suit/fire/heavy
- name = "firesuit"
- desc = "A suit that protects against extreme fire and heat."
- //icon_state = "thermal"
- item_state = "ro_suit"
- w_class = 4//bulky item
- protective_temperature = 10000
- slowdown = 1.5
-
-/obj/item/clothing/head/helmet/space/fire_helmet
- name = "fire helmet"
- desc = "A helmet designed to protect against extreme temperature and pressure."
- flags = FPRINT | TABLEPASS | HEADSPACE | HEADCOVERSEYES | BLOCKHAIR
- see_face = 0.0
- permeability_coefficient = 0.01
- heat_transfer_coefficient = 0.01
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
- icon_state = "hazmat_firered"
- item_state = "hazhat_firered"
-
-
-
-/obj/item/clothing/head/radiation
- name = "radiation hood"
- icon_state = "rad"
- desc = "A hood that protects against radiation. Label: Made with lead, do not eat insulation."
- flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 20)
-
-/obj/item/clothing/suit/radiation
- name = "radiation suit"
- desc = "A suit that protects against radiation. Label: Made with lead, do not eat insulation."
- icon_state = "rad"
- item_state = "rad_suit"
- w_class = 4//bulky item
- gas_transfer_coefficient = 0.90
- permeability_coefficient = 0.50
- heat_transfer_coefficient = 0.30
- protective_temperature = 1000
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen)
- slowdown = 1.5
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100)
- flags_inv = HIDEJUMPSUIT
diff --git a/code/modules/clothing/suits/heavy.dm b/code/modules/clothing/suits/heavy.dm
deleted file mode 100644
index 0435bd53215..00000000000
--- a/code/modules/clothing/suits/heavy.dm
+++ /dev/null
@@ -1,82 +0,0 @@
-//These hardly ever get spawned in and should likely be changed be children of heavy
-/obj/item/clothing/suit/armor/centcomm
- name = "Cent. Com. armor"
- desc = "A suit that protects against some damage."
- icon_state = "centcom"
- item_state = "centcom"
- w_class = 4//bulky item
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
- allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
-
-/obj/item/clothing/suit/armor/heavy
- name = "heavy armor"
- desc = "A heavily armored suit that protects against moderate damage."
- icon_state = "heavy"
- item_state = "swat_suit"
- w_class = 4//bulky item
- gas_transfer_coefficient = 0.90
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
- slowdown = 3
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
-
-/obj/item/clothing/suit/armor/tdome
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
-
-/obj/item/clothing/suit/armor/tdome/red
- name = "Thunderdome suit (red)"
- desc = "Reddish armor."
- icon_state = "tdred"
- item_state = "tdred"
-
-/obj/item/clothing/suit/armor/tdome/green
- name = "Thunderdome suit (green)"
- desc = "Pukish armor."
- icon_state = "tdgreen"
- item_state = "tdgreen"
-
-/obj/item/clothing/suit/armor/swat
- name = "SWAT armour"
- desc = "A heavily armored suit that protects against moderate damage. Used in special operations."
- icon_state = "deathsquad"
- item_state = "swat_suit"
- gas_transfer_coefficient = 0.01
- permeability_coefficient = 0.01
- heat_transfer_coefficient = 0.02
- protective_temperature = 1000
- flags = FPRINT | TABLEPASS | SUITSPACE
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
- allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
- slowdown = 1
- armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 0, rad = 0)
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
-
-/obj/item/clothing/suit/storage/officer
- name = "officer's jacket"
- desc = "An armored jacket used in special operations."
- icon_state = "detective"
- item_state = "det_suit"
- gas_transfer_coefficient = 0.01
- permeability_coefficient = 0.01
- heat_transfer_coefficient = 0.02
- protective_temperature = 1000
- flags = FPRINT | TABLEPASS | SUITSPACE
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
- allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
- slowdown = 1
- armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 0, rad = 0)
- flags_inv = 0
-
-/obj/item/clothing/suit/storage/armoredundersuit
- name = "armoured undersuit"
- desc = "An layer of armor that attaches to clothing, outfitted with pockets."
- icon_state = "invisible"
- item_state = "invisible"
- body_parts_covered = UPPER_TORSO|LOWER_TORSO
- flags = FPRINT | TABLEPASS
- allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/pepperspray,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/taperoll/police)
- armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
- flags_inv = 0
-
-
diff --git a/code/modules/clothing/suits/hos.dm b/code/modules/clothing/suits/hos.dm
deleted file mode 100644
index a4cc7762cb5..00000000000
--- a/code/modules/clothing/suits/hos.dm
+++ /dev/null
@@ -1,30 +0,0 @@
-/obj/item/clothing/head/helmet/HoS
- name = "head of security's hat"
- desc = "The hat of the Head of Security. For showing the officers who's in charge."
- icon_state = "hoscap"
- flags = FPRINT | TABLEPASS | SUITSPACE | HEADCOVERSEYES
- armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0)
- flags_inv = HIDEEARS
-
-/obj/item/clothing/head/helmet/HoS/dermal
- name = "dermal armour patch"
- desc = "You're not quite sure how you manage to take it on and off, but it implants nicely in your head."
- icon_state = "dermal"
- item_state = "dermal"
-
-/obj/item/clothing/suit/armor/hos
- name = "armored coat"
- desc = "A greatcoat enchanced with a special alloy for some protection and style."
- icon_state = "hos"
- item_state = "hos"
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
- armor = list(melee = 65, bullet = 30, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
- flags_inv = HIDEJUMPSUIT
-
-
-/obj/item/clothing/suit/armor/hos/jensen
- name = "armored trenchcoat"
- desc = "A trenchoat augmented with a special alloy for some protection and style."
- icon_state = "jensencoat"
- item_state = "jensencoat"
- flags_inv = 0
diff --git a/code/modules/clothing/uniforms/lawyer.dm b/code/modules/clothing/uniforms/lawyer.dm
deleted file mode 100644
index a2befb8b4a7..00000000000
--- a/code/modules/clothing/uniforms/lawyer.dm
+++ /dev/null
@@ -1,65 +0,0 @@
-/*Contains most of the "Law" uniforms*/
-
-
-/obj/item/clothing/under/lawyer
- desc = "Slick threads."
- name = "Lawyer suit"
- flags = FPRINT | TABLEPASS
- flags_inv = HIDEJUMPSUIT
-
-
-/obj/item/clothing/under/lawyer/black
- icon_state = "lawyer_black"
- item_state = "lawyer_black"
- color = "lawyer_black"
-
-
-/obj/item/clothing/under/lawyer/red
- icon_state = "lawyer_red"
- item_state = "lawyer_red"
- color = "lawyer_red"
-
-
-/obj/item/clothing/under/lawyer/blue
- icon_state = "lawyer_blue"
- item_state = "lawyer_blue"
- color = "lawyer_blue"
-
-
-/obj/item/clothing/under/lawyer/bluesuit
- name = "blue suit"
- desc = "A classy suit and tie."
- icon_state = "bluesuit"
- item_state = "bluesuit"
- color = "bluesuit"
-
-/obj/item/clothing/suit/storage/lawyer/bluejacket
- name = "blue suit jacket"
- desc = "A snappy dress jacket."
- icon_state = "suitjacket_blue_open"
- item_state = "suitjacket_blue_open"
- body_parts_covered = UPPER_TORSO|ARMS
-
-
-/obj/item/clothing/under/lawyer/purpsuit
- name = "purple suit"
- icon_state = "lawyer_purp"
- item_state = "lawyer_purp"
- color = "lawyer_purp"
-
-/obj/item/clothing/suit/storage/lawyer/purpjacket
- name = "purple suit jacket"
- desc = "A snappy dress jacket."
- icon_state = "suitjacket_purp"
- item_state = "suitjacket_purp"
- body_parts_covered = UPPER_TORSO|ARMS
-
-
-/obj/item/clothing/suit/judgerobe
- name = "judge's robe"
- desc = "This robe commands authority."
- icon_state = "judge"
- item_state = "judge"
- flags = FPRINT | TABLEPASS
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
- allowed = list(/obj/item/weapon/cigpacket,/obj/item/weapon/spacecash)
diff --git a/code/setup_3d.dm b/code/setup_3d.dm
deleted file mode 100644
index 607e350f153..00000000000
--- a/code/setup_3d.dm
+++ /dev/null
@@ -1,20 +0,0 @@
- ///////////////////////////////////////////////
- //Important ZAS Functionality. 3D simulation//
-///////////////////////////////////////////////
-
-//Uncomment if you want it enabled
-//#define ZAS_3D
-
-#ifdef ZAS_3D
-
-var/list/levels_3d = list(1,2) //To expediate calculations, just do "z in levels_3d"
-
-var/list/global_adjacent_z_levels = list("1" = list("up" = 2), "2" = list("down" = 1)) //Example. 2 is above 1
-
-//Commented out ones are incomplete.
-//#include "TriDimension\Pipes.dm" //Example
-#include "TriDimension\Structures.dm"
-#include "TriDimension\Turfs.dm"
-//#include "TriDimension\Movement.dm"
-
-#endif
\ No newline at end of file