diff --git a/baystation12.dme b/baystation12.dme index 821d43b85ec..0d083ef85af 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1101,6 +1101,7 @@ #include "code\WorkInProgress\Tastyfish\Eliza.dm" #include "code\WorkInProgress\Tastyfish\Eliza_Data.dm" #include "code\WorkInProgress\Tastyfish\livestock.dm" +#include "code\WorkInProgress\Tastyfish\mainspipe.dm" #include "code\WorkInProgress\Tastyfish\paiLiza.dm" #include "code\WorkInProgress\Tastyfish\Parser.dm" #include "code\WorkInProgress\Tastyfish\wallmount_frame.dm" diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index 3202630eb2e..da136715a58 100644 --- a/code/ATMOSPHERICS/pipes.dm +++ b/code/ATMOSPHERICS/pipes.dm @@ -1004,6 +1004,93 @@ obj/machinery/atmospherics/pipe level = 1 icon_state = "manifold4w-f" + cap + name = "pipe endcap" + desc = "An endcap for pipes" + icon = 'pipes.dmi' + icon_state = "cap" + level = 2 + + volume = 35 + + dir = SOUTH + initialize_directions = SOUTH + + var/obj/machinery/atmospherics/node + + hide(var/i) + if(level == 1 && istype(loc, /turf/simulated)) + invisibility = i ? 101 : 0 + update_icon() + + pipeline_expansion() + return list(node) + + process() + if(!parent) + ..() + else + machines.Remove(src) +/* + if(!node1) + parent.mingle_with_turf(loc, 70) + if(!nodealert) + //world << "Missing node from [src] at [src.x],[src.y],[src.z]" + nodealert = 1 + else if(!node2) + parent.mingle_with_turf(loc, 70) + if(!nodealert) + //world << "Missing node from [src] at [src.x],[src.y],[src.z]" + nodealert = 1 + else if(!node3) + parent.mingle_with_turf(loc, 70) + if(!nodealert) + //world << "Missing node from [src] at [src.x],[src.y],[src.z]" + nodealert = 1 + else if (nodealert) + nodealert = 0 +*/ + Del() + if(node) + node.disconnect(src) + + ..() + + disconnect(obj/machinery/atmospherics/reference) + if(reference == node) + if(istype(node, /obj/machinery/atmospherics/pipe)) + del(parent) + node = null + + update_icon() + + ..() + + update_icon() + overlays = new() + + icon_state = "cap[invisibility ? "-f" : ""]" + return + + initialize() + for(var/obj/machinery/atmospherics/target in get_step(src, dir)) + if(target.initialize_directions & get_dir(target,src)) + node = target + break + + var/turf/T = src.loc // hide if turf is not intact + hide(T.intact) + //update_icon() + update_icon() + + visible + level = 2 + icon_state = "cap" + + hidden + level = 1 + icon_state = "cap-f" + obj/machinery/atmospherics/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) if (istype(src, /obj/machinery/atmospherics/pipe/tank)) return ..() diff --git a/code/WorkInProgress/Tastyfish/mainspipe.dm b/code/WorkInProgress/Tastyfish/mainspipe.dm new file mode 100644 index 00000000000..4ef8edbe38a --- /dev/null +++ b/code/WorkInProgress/Tastyfish/mainspipe.dm @@ -0,0 +1,703 @@ +// internal pipe, don't actually place or use these +obj/machinery/atmospherics/pipe/mains_component + var/obj/machinery/atmospherics/mains_pipe/parent_pipe + var/list/obj/machinery/atmospherics/pipe/mains_component/nodes = new() + + New(loc) + ..(loc) + parent_pipe = loc + + check_pressure(pressure) + var/datum/gas_mixture/environment = loc.loc.return_air() + + var/pressure_difference = pressure - environment.return_pressure() + + if(pressure_difference > parent_pipe.maximum_pressure) + mains_burst() + + else if(pressure_difference > parent_pipe.fatigue_pressure) + //TODO: leak to turf, doing pfshhhhh + if(prob(5)) + mains_burst() + + else return 1 + + pipeline_expansion() + return nodes + + disconnect(obj/machinery/atmospherics/reference) + if(nodes.Find(reference)) + nodes.Remove(reference) + + proc/mains_burst() + parent_pipe.burst() + +obj/machinery/atmospherics/mains_pipe + icon = 'mainspipe.dmi' + layer = 2.4 //under wires with their 2.5 + + var/volume = 0 + var/force = 20 + + var/alert_pressure = 80*ONE_ATMOSPHERE + + var/initialize_mains_directions = 0 + + var/list/obj/machinery/atmospherics/mains_pipe/nodes = new() + var/obj/machinery/atmospherics/pipe/mains_component/supply + var/obj/machinery/atmospherics/pipe/mains_component/scrubbers + var/obj/machinery/atmospherics/pipe/mains_component/aux + + var/minimum_temperature_difference = 300 + var/thermal_conductivity = 0 //WALL_HEAT_TRANSFER_COEFFICIENT No + + var/maximum_pressure = 70*ONE_ATMOSPHERE + var/fatigue_pressure = 55*ONE_ATMOSPHERE + alert_pressure = 55*ONE_ATMOSPHERE + + New() + ..() + + supply = new(src) + supply.volume = volume + supply.nodes.len = nodes.len + scrubbers = new(src) + scrubbers.volume = volume + scrubbers.nodes.len = nodes.len + aux = new(src) + aux.volume = volume + aux.nodes.len = nodes.len + + hide(var/i) + if(level == 1 && istype(loc, /turf/simulated)) + invisibility = i ? 101 : 0 + update_icon() + + proc/burst() + ..() + for(var/obj/machinery/atmospherics/pipe/mains_component/pipe in contents) + burst() + + proc/check_pressure(pressure) + var/datum/gas_mixture/environment = loc.return_air() + + var/pressure_difference = pressure - environment.return_pressure() + + if(pressure_difference > maximum_pressure) + burst() + + else if(pressure_difference > fatigue_pressure) + //TODO: leak to turf, doing pfshhhhh + if(prob(5)) + burst() + + else return 1 + + disconnect() + ..() + for(var/obj/machinery/atmospherics/pipe/mains_component/node in nodes) + node.disconnect() + + Del() + disconnect() + ..() + + initialize() + for(var/i = 1 to nodes.len) + var/obj/machinery/atmospherics/mains_pipe/node = nodes[i] + if(node) + supply.nodes[i] = node.supply + scrubbers.nodes[i] = node.scrubbers + aux.nodes[i] = node.aux + +obj/machinery/atmospherics/mains_pipe/simple + name = "mains pipe" + desc = "A one meter section of 3-line mains pipe" + + dir = SOUTH + initialize_mains_directions = SOUTH|NORTH + + New() + nodes.len = 2 + ..() + switch(dir) + if(SOUTH || NORTH) + initialize_mains_directions = SOUTH|NORTH + if(EAST || WEST) + initialize_mains_directions = EAST|WEST + if(NORTHEAST) + initialize_mains_directions = NORTH|EAST + if(NORTHWEST) + initialize_mains_directions = NORTH|WEST + if(SOUTHEAST) + initialize_mains_directions = SOUTH|EAST + if(SOUTHWEST) + initialize_mains_directions = SOUTH|WEST + + proc/normalize_dir() + if(dir==3) + dir = 1 + else if(dir==12) + dir = 4 + + update_icon() + if(nodes[1] && nodes[2]) + icon_state = "intact[invisibility ? "-f" : "" ]" + + //var/node1_direction = get_dir(src, node1) + //var/node2_direction = get_dir(src, node2) + + //dir = node1_direction|node2_direction + + else + if(!nodes[1]&&!nodes[2]) + del(src) //TODO: silent deleting looks weird + var/have_node1 = nodes[1]?1:0 + var/have_node2 = nodes[2]?1:0 + icon_state = "exposed[have_node1][have_node2][invisibility ? "-f" : "" ]" + + initialize() + normalize_dir() + var/node1_dir + var/node2_dir + + for(var/direction in cardinal) + if(direction&initialize_mains_directions) + if (!node1_dir) + node1_dir = direction + else if (!node2_dir) + node2_dir = direction + + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,node1_dir)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[1] = target + break + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,node2_dir)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[2] = target + break + + ..() // initialize internal pipes + + var/turf/T = src.loc // hide if turf is not intact + hide(T.intact) + update_icon() + + hidden + level = 1 + icon_state = "intact-f" + + visible + level = 2 + icon_state = "intact" + +obj/machinery/atmospherics/mains_pipe/manifold + name = "manifold pipe" + desc = "A manifold composed of mains pipes" + + dir = SOUTH + initialize_mains_directions = EAST|NORTH|WEST + volume = 105 + + New() + nodes.len = 3 + ..() + initialize_mains_directions = (NORTH|SOUTH|EAST|WEST) & ~dir + + initialize() + var/connect_directions = initialize_mains_directions + + for(var/direction in cardinal) + if(direction&connect_directions) + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,direction)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[1] = target + connect_directions &= ~direction + break + if (nodes[1]) + break + + + for(var/direction in cardinal) + if(direction&connect_directions) + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,direction)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[2] = target + connect_directions &= ~direction + break + if (nodes[2]) + break + + + for(var/direction in cardinal) + if(direction&connect_directions) + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,direction)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[3] = target + connect_directions &= ~direction + break + if (nodes[3]) + break + + ..() // initialize internal pipes + + var/turf/T = src.loc // hide if turf is not intact + hide(T.intact) + update_icon() + + update_icon() + icon_state = "manifold[invisibility ? "-f" : "" ]" + + hidden + level = 1 + icon_state = "manifold-f" + + visible + level = 2 + icon_state = "manifold" + +obj/machinery/atmospherics/mains_pipe/manifold4w + name = "manifold pipe" + desc = "A manifold composed of mains pipes" + + dir = SOUTH + initialize_mains_directions = EAST|NORTH|WEST|SOUTH + volume = 105 + + New() + nodes.len = 4 + ..() + + initialize() + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,NORTH)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[1] = target + break + + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,SOUTH)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[2] = target + break + + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,EAST)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[3] = target + break + + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,WEST)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[3] = target + break + + ..() // initialize internal pipes + + var/turf/T = src.loc // hide if turf is not intact + hide(T.intact) + update_icon() + + update_icon() + icon_state = "manifold4w[invisibility ? "-f" : "" ]" + + hidden + level = 1 + icon_state = "manifold4w-f" + + visible + level = 2 + icon_state = "manifold4w" + +obj/machinery/atmospherics/mains_pipe/split + name = "mains splitter" + desc = "A splitter for connecting to a single pipe off a mains." + + var/obj/machinery/atmospherics/pipe/mains_component/split_node + var/obj/machinery/atmospherics/node3 + var/icon_type + + New() + nodes.len = 2 + ..() + initialize_mains_directions = turn(dir, 90) | turn(dir, -90) + initialize_directions = dir // actually have a normal connection too + + initialize() + var/node1_dir + var/node2_dir + var/node3_dir + + node1_dir = turn(dir, 90) + node2_dir = turn(dir, -90) + node3_dir = dir + + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,node1_dir)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[1] = target + break + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,node2_dir)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[2] = target + break + for(var/obj/machinery/atmospherics/target in get_step(src,node3_dir)) + if(target.initialize_directions & get_dir(target,src)) + node3 = target + break + + ..() // initialize internal pipes + + // bind them + spawn(5) + if(node3 && split_node) + var/datum/pipe_network/N1 = node3.return_network(src) + var/datum/pipe_network/N2 = split_node.return_network(split_node) + if(N1 && N2) + N1.merge(N2) + + var/turf/T = src.loc // hide if turf is not intact + hide(T.intact) + update_icon() + + update_icon() + icon_state = "split-[icon_type][invisibility ? "-f" : "" ]" + + return_network(A) + return split_node.return_network(A) + + supply + icon_type = "supply" + + New() + ..() + split_node = supply + + hidden + level = 1 + icon_state = "split-supply-f" + + visible + level = 2 + icon_state = "split-supply" + + scrubbers + icon_type = "scrubbers" + + New() + ..() + split_node = scrubbers + + hidden + level = 1 + icon_state = "split-scrubbers-f" + + visible + level = 2 + icon_state = "split-scrubbers" + + aux + icon_type = "aux" + + New() + ..() + split_node = aux + + hidden + level = 1 + icon_state = "split-aux-f" + + visible + level = 2 + icon_state = "split-aux" + +obj/machinery/atmospherics/mains_pipe/split3 + name = "triple mains splitter" + desc = "A splitter for connecting to the 3 pipes on a mainline." + + var/obj/machinery/atmospherics/supply_node + var/obj/machinery/atmospherics/scrubbers_node + var/obj/machinery/atmospherics/aux_node + + New() + nodes.len = 1 + ..() + initialize_mains_directions = dir + initialize_directions = cardinal & ~dir // actually have a normal connection too + + initialize() + var/node1_dir + var/supply_node_dir + var/scrubbers_node_dir + var/aux_node_dir + + node1_dir = dir + aux_node_dir = turn(dir, 180) + if(dir & (NORTH|SOUTH)) + supply_node_dir = EAST + scrubbers_node_dir = WEST + else + supply_node_dir = SOUTH + scrubbers_node_dir = NORTH + + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src, node1_dir)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[1] = target + break + for(var/obj/machinery/atmospherics/target in get_step(src,supply_node_dir)) + if(target.initialize_directions & get_dir(target,src)) + supply_node = target + break + for(var/obj/machinery/atmospherics/target in get_step(src,scrubbers_node_dir)) + if(target.initialize_directions & get_dir(target,src)) + scrubbers_node = target + break + for(var/obj/machinery/atmospherics/target in get_step(src,aux_node_dir)) + if(target.initialize_directions & get_dir(target,src)) + aux_node = target + break + + ..() // initialize internal pipes + + // bind them + spawn(5) + if(supply_node) + var/datum/pipe_network/N1 = supply_node.return_network(src) + var/datum/pipe_network/N2 = supply.return_network(supply) + if(N1 && N2) + N1.merge(N2) + if(scrubbers_node) + var/datum/pipe_network/N1 = scrubbers_node.return_network(src) + var/datum/pipe_network/N2 = scrubbers.return_network(scrubbers) + if(N1 && N2) + N1.merge(N2) + if(aux_node) + var/datum/pipe_network/N1 = aux_node.return_network(src) + var/datum/pipe_network/N2 = aux.return_network(aux) + if(N1 && N2) + N1.merge(N2) + + var/turf/T = src.loc // hide if turf is not intact + hide(T.intact) + update_icon() + + update_icon() + icon_state = "split-t[invisibility ? "-f" : "" ]" + + return_network(obj/machinery/atmospherics/reference) + var/obj/machinery/atmospherics/A + + A = supply_node.return_network(reference) + if(!A) + A = scrubbers_node.return_network(reference) + if(!A) + A = aux_node.return_network(reference) + + return A + + hidden + level = 1 + icon_state = "split-t-f" + + visible + level = 2 + icon_state = "split-t" + +obj/machinery/atmospherics/mains_pipe/cap + name = "pipe cap" + desc = "A cap for the end of a mains pipe" + + dir = SOUTH + initialize_directions = SOUTH + volume = 35 + + New() + nodes.len = 1 + ..() + initialize_mains_directions = dir + + update_icon() + icon_state = "cap[invisibility ? "-f" : ""]" + + initialize() + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,dir)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[1] = target + break + + ..() + + var/turf/T = src.loc // hide if turf is not intact + hide(T.intact) + update_icon() + + hidden + level = 1 + icon_state = "cap-f" + + visible + level = 2 + icon_state = "cap" + +obj/machinery/atmospherics/mains_pipe/valve + icon_state = "mvalve0" + + name = "mains shutoff valve" + desc = "A mains pipe valve" + + var/open = 1 + + dir = SOUTH + initialize_mains_directions = SOUTH|NORTH + + New() + nodes.len = 2 + ..() + initialize_mains_directions = dir | turn(dir, 180) + + update_icon(animation) + var/turf/simulated/floor = loc + var/hide = istype(floor) ? floor.intact : 0 + level = 1 + for(var/obj/machinery/atmospherics/mains_pipe/node in nodes) + if(node.level == 2) + hide = 0 + level = 2 + break + + if(animation) + flick("[hide?"h":""]mvalve[src.open][!src.open]",src) + else + icon_state = "[hide?"h":""]mvalve[open]" + + initialize() + normalize_dir() + var/node1_dir + var/node2_dir + + for(var/direction in cardinal) + if(direction&initialize_mains_directions) + if (!node1_dir) + node1_dir = direction + else if (!node2_dir) + node2_dir = direction + + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,node1_dir)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[1] = target + break + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,node2_dir)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[2] = target + break + + if(open) + ..() // initialize internal pipes + + update_icon() + + proc/normalize_dir() + if(dir==3) + dir = 1 + else if(dir==12) + dir = 4 + + proc/open() + if(open) return 0 + + open = 1 + update_icon() + + initialize() + + return 1 + + proc/close() + if(!open) return 0 + + open = 0 + update_icon() + + for(var/obj/machinery/atmospherics/pipe/mains_component/node in src) + for(var/obj/machinery/atmospherics/pipe/mains_component/o in node.nodes) + o.disconnect(node) + o.build_network() + + return 1 + + attack_ai(mob/user as mob) + return + + attack_paw(mob/user as mob) + return attack_hand(user) + + attack_hand(mob/user as mob) + src.add_fingerprint(usr) + update_icon(1) + sleep(10) + if (open) + close() + else + open() + + digital // can be controlled by AI + name = "digital mains valve" + desc = "A digitally controlled valve." + icon_state = "dvalve0" + + attack_ai(mob/user as mob) + return src.attack_hand(user) + + attack_hand(mob/user as mob) + if(!src.allowed(user)) + user << "\red Access denied." + return + ..() + + //Radio remote control + + proc + set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + if(frequency) + radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) + + var/frequency = 0 + var/id = null + var/datum/radio_frequency/radio_connection + + initialize() + ..() + if(frequency) + set_frequency(frequency) + + update_icon(animation) + var/turf/simulated/floor = loc + var/hide = istype(floor) ? floor.intact : 0 + level = 1 + for(var/obj/machinery/atmospherics/mains_pipe/node in nodes) + if(node.level == 2) + hide = 0 + level = 2 + break + + if(animation) + flick("[hide?"h":""]dvalve[src.open][!src.open]",src) + else + icon_state = "[hide?"h":""]dvalve[open]" + + receive_signal(datum/signal/signal) + if(!signal.data["tag"] || (signal.data["tag"] != id)) + return 0 + + switch(signal.data["command"]) + if("valve_open") + if(!open) + open() + + if("valve_close") + if(open) + close() + + if("valve_toggle") + if(open) + close() + else + open() \ No newline at end of file diff --git a/code/defines/obj/storage.dm b/code/defines/obj/storage.dm index 64f29f8f8c9..0b704541a82 100644 --- a/code/defines/obj/storage.dm +++ b/code/defines/obj/storage.dm @@ -327,14 +327,15 @@ var/selfdamage = 0 - afterattack(atom/target as mob|obj|turf|area, mob/user as mob) - if(contents.len && prob(10)) - // have a chance to swing open - user.visible_message("\red \The [src] swings wide open and its contents are scattered on the floor!") - for(var/obj/O in contents) - O.loc = user.loc - if(prob(50)) step_rand(O) - ..() +/obj/item/weapon/storage/toolbox/afterattack(atom/target as mob|obj|turf|area, mob/user as mob) + if(contents.len && istype(user.loc, /turf) && prob(10)) + // have a chance to swing open + user.visible_message("\red \The [src] swings wide open and its contents are scattered on the floor!") + for(var/obj/O in contents) + O.loc = user.loc + O.layer = OBJ_LAYER + if(prob(50)) step_rand(O) + ..() /obj/item/weapon/storage/toolbox/emergency name = "emergency toolbox" diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 80bf54dd913..e85363a5cbc 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -243,7 +243,7 @@ name = "energy blade" desc = "A concentrated beam of energy in the shape of a blade. Very stylish... and lethal." icon_state = "blade" - force = 70.0//Normal attacks deal very high damage. + force = 40.0//Normal attacks deal very high damage. throwforce = 1//Throwing or dropping the item deletes it. throw_speed = 1 throw_range = 1 diff --git a/code/game/objects/items/item.dm b/code/game/objects/items/item.dm index 6abd5f12319..621352351c4 100755 --- a/code/game/objects/items/item.dm +++ b/code/game/objects/items/item.dm @@ -269,6 +269,12 @@ mob/proc/flash_weak_pain() ///////////////////////// var/power = src.force + + // EXPERIMENTAL: scale power and time to the weight class + if(w_class >= 4.0) + power = power * 2 + user.next_move = max(user.next_move, world.time + 20) + if(!istype(M, /mob/living/carbon/human)) if(istype(M, /mob/living/carbon/metroid)) var/mob/living/carbon/metroid/Metroid = M diff --git a/code/modules/chemical/Chemistry-Reagents.dm b/code/modules/chemical/Chemistry-Reagents.dm index 71816dd4903..4e4d505766a 100644 --- a/code/modules/chemical/Chemistry-Reagents.dm +++ b/code/modules/chemical/Chemistry-Reagents.dm @@ -2657,23 +2657,30 @@ datum pass_out = 290 //amount absorbed after which mob starts passing out on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ + if(!src.data) data = 1 + src.data++ + + var/d = data + + // make all the beverages work together + for(var/datum/reagent/alcohol/A in holder.reagent_list) + if(A.data) d += A.data + M.dizziness +=dizzy_adj. - if(data >= slur_start && data < confused_start) + if(d >= slur_start && d < confused_start) if (!M:slurring) M:slurring = 1 M:slurring += slurr_adj - if(data >= confused_start && prob(33)) + if(d >= confused_start && prob(33)) if (!M:confused) M:confused = 1 M.confused = max(M:confused+confused_adj,0) - if(data >= blur_start) + if(d >= blur_start) M.eye_blurry = max(M.eye_blurry, 10) M:drowsyness = max(M:drowsyness, 0) - if(data >= pass_out) + if(d >= pass_out) M:paralysis = max(M:paralysis, 20) M:drowsyness = max(M:drowsyness, 30) - holder.remove_reagent(src.id, 0.2) + holder.remove_reagent(src.id, 0.4) ..() return @@ -2768,6 +2775,303 @@ datum id = "ale" description = "A dark alchoholic beverage made by malted barley and yeast." color = "#664300" // rgb: 102, 67, 0 + + +/////////////////////////////////////////////////////////////////cocktail entities////////////////////////////////////////////// + + bilk + name = "Bilk" + id = "bilk" + description = "This appears to be beer mixed with milk. Disgusting." + reagent_state = LIQUID + color = "#895C4C" // rgb: 137, 92, 76 + + atomicbomb + name = "Atomic Bomb" + id = "atomicbomb" + description = "Nuclear proliferation never tasted so good." + reagent_state = LIQUID + color = "#666300" // rgb: 102, 99, 0 + + threemileisland + name = "THree Mile Island Iced Tea" + id = "threemileisland" + description = "Made for a woman, strong enough for a man." + reagent_state = LIQUID + color = "#666340" // rgb: 102, 99, 64 + + goldschlager + name = "Goldschlager" + id = "goldschlager" + description = "100 proof cinnamon schnapps, made for alcoholic teen girls on spring break." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + patron + name = "Patron" + id = "patron" + description = "Tequila with silver in it, a favorite of alcoholic women in the club scene." + reagent_state = LIQUID + color = "#585840" // rgb: 88, 88, 64 + + gintonic + name = "Gin and Tonic" + id = "gintonic" + description = "An all time classic, mild cocktail." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + cuba_libre + name = "Cuba Libre" + id = "cubalibre" + description = "Rum, mixed with cola. Viva la revolution." + reagent_state = LIQUID + color = "#3E1B00" // rgb: 62, 27, 0 + + whiskey_cola + name = "Whiskey Cola" + id = "whiskeycola" + description = "Whiskey, mixed with cola. Surprisingly refreshing." + reagent_state = LIQUID + color = "#3E1B00" // rgb: 62, 27, 0 + + martini + name = "Classic Martini" + id = "martini" + description = "Vermouth with Gin. Not quite how 007 enjoyed it, but still delicious." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + vodkamartini + name = "Vodka Martini" + id = "vodkamartini" + description = "Vodka with Gin. Not quite how 007 enjoyed it, but still delicious." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + white_russian + name = "White Russian" + id = "whiterussian" + description = "That's just, like, your opinion, man..." + reagent_state = LIQUID + color = "#A68340" // rgb: 166, 131, 64 + + screwdrivercocktail + name = "Screwdriver" + id = "screwdrivercocktail" + description = "Vodka, mixed with plain ol' orange juice. The result is surprisingly delicious." + reagent_state = LIQUID + color = "#A68310" // rgb: 166, 131, 16 + + booger + name = "Booger" + id = "booger" + description = "Ewww..." + reagent_state = LIQUID + color = "#A68310" // rgb: 166, 131, 16 + + bloody_mary + name = "Bloody Mary" + id = "bloodymary" + description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + gargle_blaster + name = "Pan-Galactic Gargle Blaster" + id = "gargleblaster" + description = "Whoah, this stuff looks volatile!" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + brave_bull + name = "Brave Bull" + id = "bravebull" + description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + tequilla_sunrise + name = "Tequilla Sunrise" + id = "tequillasunrise" + description = "Tequilla and orange juice. Much like a Screwdriver, only Mexican~" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + toxins_special + name = "Toxins Special" + id = "toxinsspecial" + description = "This thing is FLAMING!. CALL THE DAMN SHUTTLE!" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + beepsky_smash + name = "Beepsky Smash" + id = "beepskysmash" + description = "Deny drinking this and prepare for THE LAW." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + doctor_delight + name = "The Doctor's Delight" + id = "doctorsdelight" + description = "A gulp a day keeps the MediBot away. That's probably for the best." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(M:getOxyLoss() && prob(50)) M:adjustOxyLoss(-2) + if(M:getBruteLoss() && prob(60)) M:heal_organ_damage(2,0) + if(M:getFireLoss() && prob(50)) M:heal_organ_damage(0,2) + if(M:getToxLoss() && prob(50)) M:adjustToxLoss(-2) + if(M.dizziness !=0) M.dizziness = max(0,M.dizziness-15) + if(M.confused !=0) M.confused = max(0,M.confused - 5) + ..() + return + + irish_cream + name = "Irish Cream" + id = "irishcream" + description = "Whiskey-imbued cream, what else would you expect from the Irish." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + manly_dorf + name = "The Manly Dorf" + id = "manlydorf" + description = "Beer and Ale, brought together in a delicious mix. Intended for true men only." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + longislandicedtea + name = "Long Island Iced Tea" + id = "longislandicedtea" + description = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + moonshine + name = "Moonshine" + id = "moonshine" + description = "You've really hit rock bottom now... your liver packed its bags and left last night." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + b52 + name = "B-52" + id = "b52" + description = "Coffee, Irish Cream, and congac. You will get bombed." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + irishcoffee + name = "Irish Coffee" + id = "irishcoffee" + description = "Coffee, and alcohol. More fun than a Mimosa to drink in the morning." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + margarita + name = "Margarita" + id = "margarita" + description = "On the rocks with salt on the rim. Arriba~!" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + black_russian + name = "Black Russian" + id = "blackrussian" + description = "For the lactose-intolerant. Still as classy as a White Russian." + reagent_state = LIQUID + color = "#360000" // rgb: 54, 0, 0 + + manhattan + name = "Manhattan" + id = "manhattan" + description = "The Detective's undercover drink of choice. He never could stomach gin..." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + manhattan_proj + name = "Manhattan Project" + id = "manhattan_proj" + description = "A scienitst drink of choice, for thinking how to blow up the station." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + whiskeysoda + name = "Whiskey Soda" + id = "whiskeysoda" + description = "Ultimate refreshment." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + antifreeze + name = "Anti-freeze" + id = "antifreeze" + description = "Ultimate refreshment." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + barefoot + name = "Barefoot" + id = "barefoot" + description = "Barefoot and pregnant" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + snowwhite + name = "Snow White" + id = "snowwhite" + description = "A cold refreshment" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + demonsblood + name = "Demons Blood" + id = "demonsblood" + description = "AHHHH!!!!" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + dizzy_adj = 10 + slurr_adj = 10 + + vodkatonic + name = "Vodka and Tonic" + id = "vodkatonic" + description = "For when a gin and tonic isn't russian enough." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + dizzy_adj = 4 + slurr_adj = 3 + + + ginfizz + name = "Gin Fizz" + id = "ginfizz" + description = "Refreshingly lemony, deliciously dry." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + dizzy_adj = 4 + slurr_adj = 3 + + bahama_mama + name = "Bahama mama" + id = "bahama_mama" + description = "Tropic cocktail." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + singulo + name = "Singulo" + id = "singulo" + description = "A blue-space beverage!" + reagent_state = LIQUID + color = "#2E6671" // rgb: 46, 102, 113 + dizzy_adj = 15 + slurr_adj = 15 + //ALCHOHOL end tonic @@ -2833,800 +3137,6 @@ datum ..() return -/////////////////////////////////////////////////////////////////cocktail entities////////////////////////////////////////////// - - bilk - name = "Bilk" - id = "bilk" - description = "This appears to be beer mixed with milk. Disgusting." - reagent_state = LIQUID - color = "#895C4C" // rgb: 137, 92, 76 - - on_mob_life(var/mob/living/M as mob) - if(M:getBruteLoss() && prob(10)) M:heal_organ_damage(1,0) - M:nutrition += 2 - if(!data) data = 1 - data++ - M.make_dizzy(3) - M:jitteriness = max(M:jitteriness-3,0) - if(data >= 25) - if (!M:slurring) M:slurring = 1 - M:slurring += 3 - if(data >= 40 && prob(33)) - if (!M:confused) M:confused = 1 - M:confused += 2 - holder.remove_reagent(src.id, 0.2) - ..() - return - - atomicbomb - name = "Atomic Bomb" - id = "atomicbomb" - description = "Nuclear proliferation never tasted so good." - reagent_state = LIQUID - color = "#666300" // rgb: 102, 99, 0 - - on_mob_life(var/mob/living/M as mob) - M.druggy = max(M.druggy, 50) - M.confused = max(M:confused+2,0) - M.make_dizzy(10) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - if(!data) data = 1 - data++ - switch(data) - if(51 to INFINITY) - M:sleeping += 1 - holder.remove_reagent(src.id, 0.2) - ..() - return - - threemileisland - name = "THree Mile Island Iced Tea" - id = "threemileisland" - description = "Made for a woman, strong enough for a man." - reagent_state = LIQUID - color = "#666340" // rgb: 102, 99, 64 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=3 - M.druggy = max(M.druggy, 50) - if(data >= 35 && data <90) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 90) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - goldschlager - name = "Goldschlager" - id = "goldschlager" - description = "100 proof cinnamon schnapps, made for alcoholic teen girls on spring break." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=3 - if(data >= 45 && data <125) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 125 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - patron - name = "Patron" - id = "patron" - description = "Tequila with silver in it, a favorite of alcoholic women in the club scene." - reagent_state = LIQUID - color = "#585840" // rgb: 88, 88, 64 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=3 - if(data >= 45 && data <125) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 125 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - gintonic - name = "Gin and Tonic" - id = "gintonic" - description = "An all time classic, mild cocktail." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=3 - if(data >= 45 && data <135) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 135 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - cuba_libre - name = "Cuba Libre" - id = "cubalibre" - description = "Rum, mixed with cola. Viva la revolution." - reagent_state = LIQUID - color = "#3E1B00" // rgb: 62, 27, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=3 - if(data >= 45 && data <135) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 135 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - whiskey_cola - name = "Whiskey Cola" - id = "whiskeycola" - description = "Whiskey, mixed with cola. Surprisingly refreshing." - reagent_state = LIQUID - color = "#3E1B00" // rgb: 62, 27, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=3 - if(data >= 55 && data <125) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 125 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - martini - name = "Classic Martini" - id = "martini" - description = "Vermouth with Gin. Not quite how 007 enjoyed it, but still delicious." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=3 - if(data >= 45 && data <165) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 135 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - vodkamartini - name = "Vodka Martini" - id = "vodkamartini" - description = "Vodka with Gin. Not quite how 007 enjoyed it, but still delicious." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=3 - if(data >= 45 && data <165) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 135 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - white_russian - name = "White Russian" - id = "whiterussian" - description = "That's just, like, your opinion, man..." - reagent_state = LIQUID - color = "#A68340" // rgb: 166, 131, 64 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=3 - if(data >= 55 && data <165) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 165 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - screwdrivercocktail - name = "Screwdriver" - id = "screwdrivercocktail" - description = "Vodka, mixed with plain ol' orange juice. The result is surprisingly delicious." - reagent_state = LIQUID - color = "#A68310" // rgb: 166, 131, 16 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=3 - if(data >= 55 && data <165) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 165 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - booger - name = "Booger" - id = "booger" - description = "Ewww..." - reagent_state = LIQUID - color = "#A68310" // rgb: 166, 131, 16 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=4 - if(data >= 55 && data <165) - if (!M.slurring) M.slurring = 1 - M.slurring += 4 - else if(data >= 165 && prob(33)) - M.confused = max(M:confused+4,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - bloody_mary - name = "Bloody Mary" - id = "bloodymary" - description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=3 - if(data >= 55 && data <165) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 165 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - gargle_blaster - name = "Pan-Galactic Gargle Blaster" - id = "gargleblaster" - description = "Whoah, this stuff looks volatile!" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=6 - if(data >= 15 && data <45) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 45 && prob(50) && data <55) - M.confused = max(M:confused+3,0) - else if(data >=55) - M.druggy = max(M.druggy, 55) - holder.remove_reagent(src.id, 0.2) - ..() - return - - brave_bull - name = "Brave Bull" - id = "bravebull" - description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=3 - if(data >= 45 && data <145) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 145 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - tequilla_sunrise - name = "Tequilla Sunrise" - id = "tequillasunrise" - description = "Tequilla and orange juice. Much like a Screwdriver, only Mexican~" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=3 - if(data >= 55 && data <165) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 165 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - toxins_special - name = "Toxins Special" - id = "toxinsspecial" - description = "This thing is FLAMING!. CALL THE DAMN SHUTTLE!" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if (M.bodytemperature < 330) - M.bodytemperature = min(330, M.bodytemperature+15) //310 is the normal bodytemp. 310.055 - if(!data) data = 1 - data++ - M.dizziness +=3 - if(data >= 55 && data <165) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 165 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - beepsky_smash - name = "Beepsky Smash" - id = "beepskysmash" - description = "Deny drinking this and prepare for THE LAW." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - M.Stun(2) - if(!data) data = 1 - data++ - M.dizziness +=3 - if(data >= 55 && data <165) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 165 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - doctor_delight - name = "The Doctor's Delight" - id = "doctorsdelight" - description = "A gulp a day keeps the MediBot away. That's probably for the best." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(M:getOxyLoss() && prob(50)) M:adjustOxyLoss(-2) - if(M:getBruteLoss() && prob(60)) M:heal_organ_damage(2,0) - if(M:getFireLoss() && prob(50)) M:heal_organ_damage(0,2) - if(M:getToxLoss() && prob(50)) M:adjustToxLoss(-2) - if(M.dizziness !=0) M.dizziness = max(0,M.dizziness-15) - if(M.confused !=0) M.confused = max(0,M.confused - 5) - ..() - return - - irish_cream - name = "Irish Cream" - id = "irishcream" - description = "Whiskey-imbued cream, what else would you expect from the Irish." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=3 - if(data >= 45 && data <145) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 145 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - manly_dorf - name = "The Manly Dorf" - id = "manlydorf" - description = "Beer and Ale, brought together in a delicious mix. Intended for true men only." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=5 - if(data >= 35 && data <115) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 115 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - longislandicedtea - name = "Long Island Iced Tea" - id = "longislandicedtea" - description = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=3 - if(data >= 55 && data <165) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 165 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - moonshine - name = "Moonshine" - id = "moonshine" - description = "You've really hit rock bottom now... your liver packed its bags and left last night." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=5 - if(data >= 30 && data <60) - if (!M.slurring) M:slurring = 1 - M.slurring += 4 - else if(data >= 60 && prob(40)) - M.confused = max(M:confused+5,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - b52 - name = "B-52" - id = "b52" - description = "Coffee, Irish Cream, and congac. You will get bombed." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=3 - if(data >= 25 && data <90) - if (!M.slurring) M.slurring = 1 - M.slurring += 4 - else if(data >= 90 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - irishcoffee - name = "Irish Coffee" - id = "irishcoffee" - description = "Coffee, and alcohol. More fun than a Mimosa to drink in the morning." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=3 - if(data >= 55 && data <150) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 150 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - margarita - name = "Margarita" - id = "margarita" - description = "On the rocks with salt on the rim. Arriba~!" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=4 - if(data >= 55 && data <150) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 150 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - black_russian - name = "Black Russian" - id = "blackrussian" - description = "For the lactose-intolerant. Still as classy as a White Russian." - reagent_state = LIQUID - color = "#360000" // rgb: 54, 0, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=4 - if(data >= 55 && data <115) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 115 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - manhattan - name = "Manhattan" - id = "manhattan" - description = "The Detective's undercover drink of choice. He never could stomach gin..." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=4 - if(data >= 55 && data <115) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 115 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - manhattan_proj - name = "Manhattan Project" - id = "manhattan_proj" - description = "A scienitst drink of choice, for thinking how to blow up the station." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=4 - M.druggy = max(M.druggy, 30) - if(data >= 55 && data <115) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 115 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - whiskeysoda - name = "Whiskey Soda" - id = "whiskeysoda" - description = "Ultimate refreshment." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=4 - if(data >= 55 && data <115) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 115 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - antifreeze - name = "Anti-freeze" - id = "antifreeze" - description = "Ultimate refreshment." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=5 - if(data >= 55 && data <115) - if (!M.slurring) M.slurring = 1 - M.slurring += 5 - else if(data >= 115 && prob(33)) - M.confused = max(M:confused+5,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - barefoot - name = "Barefoot" - id = "barefoot" - description = "Barefoot and pregnant" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=5 - if(data >= 55 && data <115) - if (!M.slurring) M.slurring = 1 - M.slurring += 5 - else if(data >= 115 && prob(33)) - M.confused = max(M:confused+5,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - snowwhite - name = "Snow White" - id = "snowwhite" - description = "A cold refreshment" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=4 - if(data >= 55 && data <115) - if (!M.slurring) M.slurring = 1 - M.slurring += 4 - else if(data >= 115 && prob(30)) - M.confused = max(M:confused+4,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - demonsblood - name = "Demons Blood" - id = "demonsblood" - description = "AHHHH!!!!" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=10 - if(data >= 55 && data <115) - if (!M.slurring) M.slurring = 1 - M.slurring += 10 - else if(data >= 115 && prob(90)) - M.confused = max(M:confused+10,10) - holder.remove_reagent(src.id, 0.2) - ..() - return - - vodkatonic - name = "Vodka and Tonic" - id = "vodkatonic" - description = "For when a gin and tonic isn't russian enough." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=4 - if(data >= 55 && data <115) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 115 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - ginfizz - name = "Gin Fizz" - id = "ginfizz" - description = "Refreshingly lemony, deliciously dry." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=4 - if(data >= 45 && data <125) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 125 && prob(33)) - M.confused = max(M:confused+2,0) - holder.remove_reagent(src.id, 0.2) - ..() - return - - bahama_mama - name = "Bahama mama" - id = "bahama_mama" - description = "Tropic cocktail." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=3 - if(data >= 55 && data <165) - if (!M.slurring) M.slurring = 1 - M.slurring += 3 - else if(data >= 165 && prob(33)) - M.confused = max(M:confused+2,0) - if (M.bodytemperature > 310) - M.bodytemperature = max(310, M.bodytemperature-5) - holder.remove_reagent(src.id, 0.2) - ..() - return - - singulo - name = "Singulo" - id = "singulo" - description = "A blue-space beverage!" - reagent_state = LIQUID - color = "#2E6671" // rgb: 46, 102, 113 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=15 - if(data >= 55 && data <115) - if (!M.slurring) M.slurring = 1 - M.slurring += 15 - else if(data >= 115 && prob(33)) - M.confused = max(M:confused+15,15) - holder.remove_reagent(src.id, 0.2) - ..() - return ////////////////////////// REMOVED COCKTAIL REAGENTS BELOW:: RE-ENABLE THEM IF THEY EVER GET SPRITES THAT DON'T LOOK FUCKING STUPID --Agouri /////////////////////////// diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 537ce19aff8..3f43ffc3548 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -99,50 +99,68 @@ emp_act var/armor = run_armor_check(affecting, "melee", "Your armor has protected you from a hit to the [hit_area].", "Your armor has softened hit to your [hit_area].") if(armor >= 2) return 0 if(!I.force) return 0 - apply_damage(I.force, I.damtype, affecting, armor, is_cut(I), I.name) + + // make heavy weapons do more damage + var/power = I.force + if(I.w_class >= 4) + power *= 2 + apply_damage(, I.damtype, affecting, armor, is_cut(I), I.name) var/bloody = 0 if((I.damtype == BRUTE) && prob(25 + (I.force * 2))) I.add_blood(src) - if(prob(33)) - bloody = 1 - var/turf/location = loc - if(istype(location, /turf/simulated)) - location.add_blood(src) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.wear_suit) H.wear_suit.add_blood(src) - else if(H.w_uniform) H.w_uniform.add_blood(src) - if(H.shoes) H.shoes.add_blood(src) - if (H.gloves) - H.gloves.add_blood(H) - H.gloves.transfer_blood = 2 - H.gloves.bloody_hands_mob = H - else - H.add_blood(H) - H.bloody_hands = 2 - H.bloody_hands_mob = H + bloody = 1 + var/turf/location = loc + if(istype(location, /turf/simulated)) + location.add_blood(src) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(H.wear_suit) H.wear_suit.add_blood(src) + else if(H.w_uniform) H.w_uniform.add_blood(src) + if(H.shoes) H.shoes.add_blood(src) + if (H.gloves) + H.gloves.add_blood(H) + H.gloves.transfer_blood = 2 + H.gloves.bloody_hands_mob = H + else + H.add_blood(H) + H.bloody_hands = 2 + H.bloody_hands_mob = H - switch(hit_area) - if("head")//Harder to score a stun but if you do it lasts a bit longer - if(prob(I.force)) - apply_effect(20, PARALYZE, armor) - visible_message("\red [src] has been knocked unconscious!") - if(src != user) - ticker.mode.remove_revolutionary(mind) + switch(hit_area) + if("head")//Harder to score a stun but if you do it lasts a bit longer + var/knockout_chance = 0 + if(power >= 4) + knockout_chance += 5 + if(power >= 10) + knockout_chance += 20 + knockout_chance += power + if(health <= 40) knockout_chance += 40 + if(prob(knockout_chance)) + apply_effect(20, PARALYZE, armor) + visible_message("\red [src] has been knocked unconscious!") + if(src != user) + ticker.mode.remove_revolutionary(mind) - if(bloody)//Apply blood - if(wear_mask) wear_mask.add_blood(src) - if(head) head.add_blood(src) - if(glasses && prob(33)) glasses.add_blood(src) + if(bloody)//Apply blood + if(wear_mask) wear_mask.add_blood(src) + if(head) head.add_blood(src) + if(glasses && prob(33)) glasses.add_blood(src) - if("chest")//Easier to score a stun but lasts less time - if(prob((I.force + 10))) - apply_effect(5, WEAKEN, armor) - visible_message("\red [src] has been knocked down!") + if("chest")//Easier to score a stun but lasts less time + var/knockdown_chance = 0 + if(power >= 10) + knockdown_chance += 10 + if(I.w_class >= 4) + knockdown_chance *= 4 + knockdown_chance = min(knockdown_chance, 50) + if(prob(knockdown_chance)) + apply_effect(5, WEAKEN, armor) + visible_message("\red [src] has been knocked down!") + + if(bloody) + if(src.wear_suit) src.wear_suit.add_blood(src) + if(src.w_uniform) src.w_uniform.add_blood(src) - if(bloody) - if(src.wear_suit) src.wear_suit.add_blood(src) - if(src.w_uniform) src.w_uniform.add_blood(src) UpdateDamageIcon() update_clothing() \ No newline at end of file diff --git a/icons/obj/atmospherics/mainspipe.dmi b/icons/obj/atmospherics/mainspipe.dmi new file mode 100644 index 00000000000..e6b2dae0d0e Binary files /dev/null and b/icons/obj/atmospherics/mainspipe.dmi differ diff --git a/icons/obj/pipes.dmi b/icons/obj/pipes.dmi index 59909fb6f54..eace98cda47 100644 Binary files a/icons/obj/pipes.dmi and b/icons/obj/pipes.dmi differ