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 += "
" - 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