From a577cd206c530dac8cc7f1a45f03eaed3ab417ca Mon Sep 17 00:00:00 2001 From: Markolie Date: Tue, 11 Oct 2016 22:49:51 +0200 Subject: [PATCH 01/30] TEG refactor --- .../components/binary_devices/circulator.dm | 96 +++--- code/datums/supplypacks.dm | 4 +- code/game/machinery/pipe/construction.dm | 23 +- code/game/machinery/pipe/pipe_dispenser.dm | 1 + code/modules/power/generator.dm | 301 ++++++++---------- code/modules/power/generator_type2.dm | 143 --------- icons/obj/atmospherics/circulator.dmi | Bin 0 -> 1637 bytes icons/obj/pipe-item.dmi | Bin 32639 -> 33814 bytes icons/obj/pipes.dmi | Bin 78083 -> 80333 bytes paradise.dme | 1 - 10 files changed, 209 insertions(+), 360 deletions(-) delete mode 100644 code/modules/power/generator_type2.dm create mode 100644 icons/obj/atmospherics/circulator.dmi diff --git a/code/ATMOSPHERICS/components/binary_devices/circulator.dm b/code/ATMOSPHERICS/components/binary_devices/circulator.dm index 8ce7b1ce0ba..04eb8955fa7 100644 --- a/code/ATMOSPHERICS/components/binary_devices/circulator.dm +++ b/code/ATMOSPHERICS/components/binary_devices/circulator.dm @@ -3,76 +3,68 @@ /obj/machinery/atmospherics/binary/circulator name = "circulator/heat exchanger" desc = "A gas circulator pump and heat exchanger." - icon = 'icons/obj/pipes.dmi' - icon_state = "circ-off" - anchored = 0 - density = 1 + icon = 'icons/obj/atmospherics/circulator.dmi' + icon_state = "circ1-off" + + var/side = CIRC_LEFT + + var/global/const/CIRC_LEFT = 1 + var/global/const/CIRC_RIGHT = 2 - var/recent_moles_transferred = 0 - var/last_heat_capacity = 0 - var/last_temperature = 0 var/last_pressure_delta = 0 - var/last_worldtime_transfer = 0 + anchored = 1 + density = 1 + + can_unwrench = 1 + /obj/machinery/atmospherics/binary/circulator/New() + initialize() ..() - desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]." /obj/machinery/atmospherics/binary/circulator/proc/return_transfer_air() - var/datum/gas_mixture/removed - if(anchored && !(stat & BROKEN)) - var/input_starting_pressure = air1.return_pressure() - var/output_starting_pressure = air2.return_pressure() - last_pressure_delta = max(input_starting_pressure - output_starting_pressure + 10, 0) + var/output_starting_pressure = air1.return_pressure() + var/input_starting_pressure = air2.return_pressure() - //only circulate air if there is a pressure difference (plus 10 kPa to represent friction in the machine) - if(air1.temperature > 0 && last_pressure_delta > 0) + if(output_starting_pressure >= input_starting_pressure-10) + //Need at least 10 KPa difference to overcome friction in the mechanism + last_pressure_delta = 0 + return null - //Calculate necessary moles to transfer using PV = nRT - recent_moles_transferred = last_pressure_delta*air2.volume/(air1.temperature * R_IDEAL_GAS_EQUATION) + //Calculate necessary moles to transfer using PV = nRT + if(air2.temperature>0) + var/pressure_delta = (input_starting_pressure - output_starting_pressure)/2 - //Actually transfer the gas - removed = air1.remove(recent_moles_transferred) - if(removed) - last_heat_capacity = removed.heat_capacity() - last_temperature = removed.temperature + var/transfer_moles = pressure_delta * air1.volume/(air2.temperature * R_IDEAL_GAS_EQUATION) - //Update the gas networks. - parent1.update = 1 + last_pressure_delta = pressure_delta - last_worldtime_transfer = world.time - else - recent_moles_transferred = 0 + //world << "pressure_delta = [pressure_delta]; transfer_moles = [transfer_moles];" + + //Actually transfer the gas + var/datum/gas_mixture/removed = air2.remove(transfer_moles) + + parent1.update = 1 + parent2.update = 1 - update_icon() return removed + else + last_pressure_delta = 0 + /obj/machinery/atmospherics/binary/circulator/process() - if(!..()) - return 0 - if(last_worldtime_transfer < world.time - 50) - recent_moles_transferred = 0 - update_icon() + ..() + update_icon() /obj/machinery/atmospherics/binary/circulator/update_icon() - if(stat & (BROKEN|NOPOWER) || !anchored) - icon_state = "circ-p" - else if(last_pressure_delta > 0 && recent_moles_transferred > 0) - if(last_pressure_delta > 5*ONE_ATMOSPHERE) - icon_state = "circ-run" + if(stat & (BROKEN|NOPOWER)) + icon_state = "circ[side]-p" + else if(last_pressure_delta > 0) + if(last_pressure_delta > ONE_ATMOSPHERE) + icon_state = "circ[side]-run" else - icon_state = "circ-slow" + icon_state = "circ[side]-slow" else - icon_state = "circ-off" + icon_state = "circ[side]-off" - return 1 - -/obj/machinery/atmospherics/binary/circulator/attackby(var/obj/item/W as obj, var/mob/user as mob, params) - if(istype(W, /obj/item/weapon/wrench)) - var/turf/T = get_turf(src) - if(!istype(T, /turf/simulated)) - return ..() - anchored = !anchored - to_chat(user, "You [(anchored) ? "fasten" : "loosen"] \the [src] to the floor") - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - else return ..() + return 1 \ No newline at end of file diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 9d9f171bda8..5ccb0bb932b 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -606,9 +606,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /datum/supply_packs/engineering/engine/teg name = "Thermo-Electric Generator Crate" contains = list( - /obj/machinery/power/generator, - /obj/machinery/atmospherics/binary/circulator, - /obj/machinery/atmospherics/binary/circulator + /obj/machinery/power/generator ) cost = 25 containertype = /obj/structure/closet/crate/secure diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index afe79ca48e3..b7a88ae8b83 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -37,6 +37,7 @@ #define PIPE_DP_VENT 36 #define PIPE_PASV_VENT 37 #define PIPE_DTVALVE 38 +#define PIPE_CIRCULATOR 39 /obj/item/pipe name = "pipe" @@ -150,10 +151,16 @@ src.pipe_type = PIPE_OMNI_MIXER else if(istype(make_from, /obj/machinery/atmospherics/omni/filter)) src.pipe_type = PIPE_OMNI_FILTER + else if(istype(make_from, /obj/machinery/atmospherics/binary/circulator)) + src.pipe_type = PIPE_CIRCULATOR var/obj/machinery/atmospherics/trinary/triP = make_from if(istype(triP) && triP.flipped) src.flipped = 1 + + var/obj/machinery/atmospherics/binary/circulator/circP = make_from + if(istype(circP) && circP.side == circP.CIRC_RIGHT) + src.flipped = 1 else src.pipe_type = pipe_type @@ -214,6 +221,7 @@ "dual-port vent", \ "passive vent", \ "digital t-valve", \ + "circulator/heat exchanger", \ ) name = nlist[pipe_type+1] + " fitting" var/list/islist = list( \ @@ -256,11 +264,15 @@ "dual-port vent", \ "passive vent", \ "dtvalve", \ + "circ", \ ) icon_state = islist[pipe_type + 1] var/obj/machinery/atmospherics/trinary/triP = make_from if(istype(triP) && triP.flipped) icon_state = "m_[icon_state]" + var/obj/machinery/atmospherics/binary/circulator/circP = make_from + if(istype(circP) && circP.side == circP.CIRC_RIGHT) + icon_state = "m_[icon_state]" // called by turf to know if should treat as bent or not on placement /obj/item/pipe/proc/is_bent_pipe() @@ -295,7 +307,7 @@ if(usr.stat || usr.restrained()) return - if(pipe_type in list(PIPE_GAS_FILTER, PIPE_GAS_MIXER, PIPE_TVALVE, PIPE_DTVALVE)) + if(pipe_type in list(PIPE_GAS_FILTER, PIPE_GAS_MIXER, PIPE_TVALVE, PIPE_DTVALVE, PIPE_CIRCULATOR)) if(flipped) icon_state = copytext(icon_state,3) else @@ -529,6 +541,14 @@ if(pipename) P.name = pipename P.construction(unflip(dir), pipe_dir, color) + + if(PIPE_CIRCULATOR) //circulator + var/obj/machinery/atmospherics/binary/circulator/C = new(src.loc) + if(flipped) + C.side = C.CIRC_RIGHT + if(pipename) + C.name = pipename + C.construction(C.dir, C.initialize_directions, color) if(PIPE_SCRUBBER) //scrubber var/obj/machinery/atmospherics/unary/vent_scrubber/S = new(src.loc) @@ -682,3 +702,4 @@ #undef PIPE_DP_VENT #undef PIPE_PASV_VENT #undef PIPE_DTVALVE +#undef PIPE_CIRCULATOR diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index 34f41e2a1b5..3801a71aaea 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -48,6 +48,7 @@ Air Injector
Dual-Port Vent Pump
Passive Vent
+Circulator/Heat Exchanger
Heat exchange:
Pipe
Bent Pipe
diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index f86b17eaab7..a8fdf206c72 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -1,211 +1,192 @@ - /obj/machinery/power/generator name = "thermoelectric generator" desc = "It's a high efficiency thermoelectric generator." icon_state = "teg" - density = 1 anchored = 0 + density = 1 + use_power = 0 - use_power = 1 - idle_power_usage = 100 //Watts, I hope. Just enough to do the computer and display things. - - var/obj/machinery/atmospherics/binary/circulator/circ1 - var/obj/machinery/atmospherics/binary/circulator/circ2 + var/obj/machinery/atmospherics/binary/circulator/cold_circ + var/obj/machinery/atmospherics/binary/circulator/hot_circ + var/cold_dir = WEST + var/hot_dir = EAST + var/lastgen = 0 var/lastgenlev = -1 + var/lastcirc = "00" - var/image/overlay_image +/obj/machinery/power/generator/initialize() + var/obj/machinery/atmospherics/binary/circulator/circpath = /obj/machinery/atmospherics/binary/circulator + cold_circ = locate(circpath) in get_step(src, cold_dir) + hot_circ = locate(circpath) in get_step(src, hot_dir) + connect_to_network() - var/power_multiplier = 1 // This is so admins can tweak how good it is to find a good balance for effort -> power - var/powercap = 500000 //Not a hard cap, but outputs above this have a 10% chance to cause the TeG to lose half it's power. + if(cold_circ) + switch(cold_dir) + if(EAST) + cold_circ.side = circpath.CIRC_RIGHT + if(WEST) + cold_circ.side = circpath.CIRC_LEFT + cold_circ.update_icon() -/obj/machinery/power/generator/New() - ..() + if(hot_circ) + switch(hot_dir) + if(EAST) + hot_circ.side = circpath.CIRC_RIGHT + if(WEST) + hot_circ.side = circpath.CIRC_LEFT + hot_circ.update_icon() - spawn(1) - reconnect() - -//generators connect in dir and reverse_dir(dir) directions -//mnemonic to determine circulator/generator directions: the cirulators orbit clockwise around the generator -//so a circulator to the NORTH of the generator connects first to the EAST, then to the WEST -//and a circulator to the WEST of the generator connects first to the NORTH, then to the SOUTH -//note that the circulator's outlet dir is it's always facing dir, and it's inlet is always the reverse -/obj/machinery/power/generator/proc/reconnect() - circ1 = null - circ2 = null - if(src.loc && anchored) - if(src.dir & (EAST|WEST)) - circ1 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,EAST) - circ2 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,WEST) - - if(circ1 && circ2) - if(circ1.dir != SOUTH || circ2.dir != NORTH) - circ1 = null - circ2 = null - - else if(src.dir & (NORTH|SOUTH)) - circ1 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,NORTH) - circ2 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,SOUTH) - - if(circ1 && circ2 && (circ1.dir != EAST || circ2.dir != WEST)) - circ1 = null - circ2 = null - -/obj/machinery/power/generator/proc/updateicon() - if(isnull(src.overlay_image)) - src.overlay_image = image('icons/obj/power.dmi') - - overlays.Cut() - if(!(stat & (NOPOWER|BROKEN))) + update_icon() + power_change() + +/obj/machinery/power/generator/update_icon() + if(stat & (NOPOWER|BROKEN)) + overlays.Cut() + else + overlays.Cut() if(lastgenlev != 0) - src.overlay_image.icon_state = "teg-op[lastgenlev]" - overlays += src.overlay_image + overlays += image('icons/obj/power.dmi', "teg-op[lastgenlev]") -/obj/machinery/power/generator/process() - if(!circ1 || !circ2 || !anchored || stat & (BROKEN|NOPOWER)) + overlays += image('icons/obj/power.dmi', "teg-oc[lastcirc]") + +/obj/machinery/power/generator/process() + if(!cold_circ || !hot_circ) return - updateDialog() - - var/datum/gas_mixture/air1 = circ1.return_transfer_air() - var/datum/gas_mixture/air2 = circ2.return_transfer_air() lastgen = 0 - if(air1 && air2) - var/air1_heat_capacity = air1.heat_capacity() - var/air2_heat_capacity = air2.heat_capacity() - var/delta_temperature = abs(air2.temperature - air1.temperature) + if(powernet) - if(delta_temperature > 0 && air1_heat_capacity > 0 && air2_heat_capacity > 0) - var/efficiency = 0.65 - var/energy_transfer = delta_temperature*air2_heat_capacity*air1_heat_capacity/(air2_heat_capacity+air1_heat_capacity) - var/heat = energy_transfer*(1-efficiency) - lastgen = energy_transfer*efficiency*0.05*power_multiplier + //world << "cold_circ and hot_circ pass" - if(air2.temperature > air1.temperature) - air2.temperature = air2.temperature - energy_transfer/air2_heat_capacity - air1.temperature = air1.temperature + heat/air1_heat_capacity - else - air2.temperature = air2.temperature + heat/air2_heat_capacity - air1.temperature = air1.temperature - energy_transfer/air1_heat_capacity + var/datum/gas_mixture/cold_air = cold_circ.return_transfer_air() + var/datum/gas_mixture/hot_air = hot_circ.return_transfer_air() - //Transfer the air - if(air1) - circ1.air2.merge(air1) - if(air2) - circ2.air2.merge(air2) + //world << "hot_air = [hot_air]; cold_air = [cold_air];" - //Update the gas networks - if(circ1.parent2) - circ1.parent2.update = 1 - if(circ2.parent2) - circ2.parent2.update = 1 + if(cold_air && hot_air) - // update icon overlays and power usage only if displayed level has changed - if(lastgen > powercap && prob(10)) - var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - lastgen *= 0.5 - var/genlev = max(0, min( round(11*lastgen / powercap), 11)) - if(lastgen > 100 && genlev == 0) - genlev = 1 - if(genlev != lastgenlev) + //world << "hot_air = [hot_air] temperature = [hot_air.temperature]; cold_air = [cold_air] temperature = [hot_air.temperature];" + + //world << "coldair and hotair pass" + var/cold_air_heat_capacity = cold_air.heat_capacity() + var/hot_air_heat_capacity = hot_air.heat_capacity() + + var/delta_temperature = hot_air.temperature - cold_air.temperature + + //world << "delta_temperature = [delta_temperature]; cold_air_heat_capacity = [cold_air_heat_capacity]; hot_air_heat_capacity = [hot_air_heat_capacity]" + + if(delta_temperature > 0 && cold_air_heat_capacity > 0 && hot_air_heat_capacity > 0) + var/efficiency = 0.65 + + var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity + cold_air_heat_capacity) + + var/heat = energy_transfer*(1-efficiency) + lastgen = energy_transfer*efficiency + + //world << "lastgen = [lastgen]; heat = [heat]; delta_temperature = [delta_temperature]; hot_air_heat_capacity = [hot_air_heat_capacity]; cold_air_heat_capacity = [cold_air_heat_capacity];" + + hot_air.temperature = hot_air.temperature - energy_transfer / hot_air_heat_capacity + cold_air.temperature = cold_air.temperature + heat / cold_air_heat_capacity + + //world << "POWER: [lastgen] W generated at [efficiency*100]% efficiency and sinks sizes [cold_air_heat_capacity], [hot_air_heat_capacity]" + + add_avail(lastgen) + // update icon overlays only if displayed level has changed + + if(hot_air) + var/datum/gas_mixture/hot_circ_air1 = hot_circ.return_transfer_air() + hot_circ_air1.merge(hot_air) + + if(cold_air) + var/datum/gas_mixture/cold_circ_air1 = cold_circ.return_transfer_air() + cold_circ_air1.merge(cold_air) + + var/genlev = max(0, min( round(11 * lastgen / 100000), 11)) + var/circ = "[cold_circ && cold_circ.last_pressure_delta > 0 ? "1" : "0"][hot_circ && hot_circ.last_pressure_delta > 0 ? "1" : "0"]" + if((genlev != lastgenlev) || (circ != lastcirc)) lastgenlev = genlev - updateicon() - add_avail(lastgen) + lastcirc = circ + update_icon() + + src.updateDialog() /obj/machinery/power/generator/attack_ai(mob/user) - if(stat & (BROKEN|NOPOWER)) return + return attack_hand(user) + +/obj/machinery/power/generator/attack_ghost(mob/user) + if(stat & (NOPOWER|BROKEN)) + return + interact(user) + +/obj/machinery/power/generator/attack_hand(mob/user) + if(..()) + user << browse(null, "window=teg") + return interact(user) /obj/machinery/power/generator/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/wrench)) anchored = !anchored - to_chat(user, "\blue You [anchored ? "secure" : "unsecure"] the bolts holding [src] to the floor.") - use_power = anchored - reconnect() + initialize() + playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + to_chat(user, "You [anchored ? "secure" : "unsecure"] the bolts holding [src] to the floor.") else - ..() + ..() + +/obj/machinery/power/generator/proc/get_menu(include_link = 1) + var/t = "" + if(!powernet) + t += "Unable to connect to the power network!" + else if(cold_circ && hot_circ) + var/datum/gas_mixture/cold_circ_air1 = cold_circ.air1 + var/datum/gas_mixture/cold_circ_air2 = cold_circ.air2 + var/datum/gas_mixture/hot_circ_air1 = hot_circ.air1 + var/datum/gas_mixture/hot_circ_air2 = hot_circ.air2 -/obj/machinery/power/generator/attack_hand(mob/user) - add_fingerprint(user) - if(stat & (BROKEN|NOPOWER) || !anchored) return - interact(user) + t += "
" + t += "Output: [round(lastgen)] W" + + t += "
" + + t += "Cold loop
" + t += "Temperature Inlet: [round(cold_circ_air2.temperature, 0.1)] K / Outlet: [round(cold_circ_air1.temperature, 0.1)] K
" + t += "Pressure Inlet: [round(cold_circ_air2.return_pressure(), 0.1)] kPa / Outlet: [round(cold_circ_air1.return_pressure(), 0.1)] kPa
" + + t += "Hot loop
" + t += "Temperature Inlet: [round(hot_circ_air2.temperature, 0.1)] K / Outlet: [round(hot_circ_air1.temperature, 0.1)] K
" + t += "Pressure Inlet: [round(hot_circ_air2.return_pressure(), 0.1)] kPa / Outlet: [round(hot_circ_air1.return_pressure(), 0.1)] kPa
" + + t += "
" + else + t += "Unable to locate all parts!" + if(include_link) + t += "
Close" + + return t /obj/machinery/power/generator/interact(mob/user) - if( (get_dist(src, user) > 1 ) && (!istype(user, /mob/living/silicon/ai))) - user.unset_machine() - user << browse(null, "window=teg") - return - user.set_machine(src) - var/t = "
Thermo-Electric Generator
" - - if(circ1 && circ2) - t += "Output : [round(lastgen)] W

" - - t += "Primary Circulator (top or right)
" - t += "Inlet Pressure: [round(circ1.air1.return_pressure(), 0.1)] kPa
" - t += "Inlet Temperature: [round(circ1.air1.temperature, 0.1)] K
" - t += "Outlet Pressure: [round(circ1.air2.return_pressure(), 0.1)] kPa
" - t += "Outlet Temperature: [round(circ1.air2.temperature, 0.1)] K
" - - t += "Secondary Circulator (bottom or left)
" - t += "Inlet Pressure: [round(circ2.air1.return_pressure(), 0.1)] kPa
" - t += "Inlet Temperature: [round(circ2.air1.temperature, 0.1)] K
" - t += "Outlet Pressure: [round(circ2.air2.return_pressure(), 0.1)] kPa
" - t += "Outlet Temperature: [round(circ2.air2.temperature, 0.1)] K
" - - else - t += "Unable to connect to circulators.
" - t += "Ensure both are in position and wrenched into place." - - t += "
" - t += "
" - t += "Refresh Close" - - user << browse(t, "window=teg;size=460x300") - onclose(user, "teg") + var/datum/browser/popup = new(user, "teg", "Thermo-Electric Generator", 460, 300) + popup.set_content(get_menu()) + popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) + popup.open() return 1 - /obj/machinery/power/generator/Topic(href, href_list) - ..() + if(..()) + return if( href_list["close"] ) usr << browse(null, "window=teg") usr.unset_machine() return 0 - - updateDialog() return 1 - /obj/machinery/power/generator/power_change() ..() - updateicon() - - -/obj/machinery/power/generator/verb/rotate_clock() - set category = "Object" - set name = "Rotate Generator (Clockwise)" - set src in view(1) - - if(usr.stat || usr.restrained() || anchored) - return - - src.dir = turn(src.dir, 90) - -/obj/machinery/power/generator/verb/rotate_anticlock() - set category = "Object" - set name = "Rotate Generator (Counterclockwise)" - set src in view(1) - - if(usr.stat || usr.restrained() || anchored) - return - - src.dir = turn(src.dir, -90) \ No newline at end of file + update_icon() \ No newline at end of file diff --git a/code/modules/power/generator_type2.dm b/code/modules/power/generator_type2.dm deleted file mode 100644 index d1ff1f1079c..00000000000 --- a/code/modules/power/generator_type2.dm +++ /dev/null @@ -1,143 +0,0 @@ -/obj/machinery/power/generator_type2 - name = "thermoelectric generator" - desc = "It's a high efficiency thermoelectric generator." - icon_state = "teg" - anchored = 1 - density = 1 - use_power = 0 - - var/obj/machinery/atmospherics/unary/generator_input/input1 - var/obj/machinery/atmospherics/unary/generator_input/input2 - - var/lastgen = 0 - var/lastgenlev = -1 - - var/image/overlay_image - -/obj/machinery/power/generator_type2/New() - ..() - spawn(5) - input1 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,turn(dir, 90)) - input2 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,turn(dir, -90)) - if(!input1 || !input2) - stat |= BROKEN - updateicon() - - -/obj/machinery/power/generator_type2/proc/updateicon() - - if(isnull(src.overlay_image)) - src.overlay_image = image('icons/obj/power.dmi') - - overlays.Cut() - if(!(stat & (NOPOWER|BROKEN))) - - if(lastgenlev != 0) - src.overlay_image.icon_state = "teg-op[lastgenlev]" - overlays += src.overlay_image - -#define GENRATE 800 // generator output coefficient from Q - - -/obj/machinery/power/generator_type2/process() - if(!input1 || !input2) - return - - var/datum/gas_mixture/air1 = input1.return_exchange_air() - var/datum/gas_mixture/air2 = input2.return_exchange_air() - - - lastgen = 0 - - if(air1 && air2) - var/datum/gas_mixture/hot_air = air1 - var/datum/gas_mixture/cold_air = air2 - if(hot_air.temperature < cold_air.temperature) - hot_air = air2 - cold_air = air1 - - var/hot_air_heat_capacity = hot_air.heat_capacity() - var/cold_air_heat_capacity = cold_air.heat_capacity() - - var/delta_temperature = hot_air.temperature - cold_air.temperature - - if(delta_temperature > 1 && cold_air_heat_capacity > 0.01 && hot_air_heat_capacity > 0.01) - var/efficiency = (1 - cold_air.temperature/hot_air.temperature)*0.65 //65% of Carnot efficiency - - var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity+cold_air_heat_capacity) - - var/heat = energy_transfer*(1-efficiency) - lastgen = energy_transfer*efficiency - - hot_air.temperature = hot_air.temperature - energy_transfer/hot_air_heat_capacity - cold_air.temperature = cold_air.temperature + heat/cold_air_heat_capacity - -// to_chat(world, "POWER: [lastgen] W generated at [efficiency*100]% efficiency and sinks sizes [cold_air_heat_capacity], [hot_air_heat_capacity]") - - input1.parent.update = 1 - input2.parent.update = 1 - - add_avail(lastgen) - // update icon overlays only if displayed level has changed - - var/genlev = max(0, min( round(11*lastgen / 100000), 11)) - if(genlev != lastgenlev) - lastgenlev = genlev - updateicon() - - src.updateDialog() - - -/obj/machinery/power/generator_type2/attack_ai(mob/user) - if(stat & (BROKEN|NOPOWER)) return - interact(user) - - -/obj/machinery/power/generator_type2/attack_hand(mob/user) - add_fingerprint(user) - if(stat & (BROKEN|NOPOWER)) return - interact(user) - - -/obj/machinery/power/generator_type2/interact(mob/user) - if( (get_dist(src, user) > 1 ) && (!istype(user, /mob/living/silicon/ai))) - user.unset_machine() - user << browse(null, "window=teg") - return - - user.set_machine(src) - - var/t = "
Thermo-Electric Generator
" - - t += "Output : [round(lastgen)] W

" - - t += "Cold loop
" - t += "Temperature: [round(input1.air_contents.temperature, 0.1)] K
" - t += "Pressure: [round(input1.air_contents.return_pressure(), 0.1)] kPa
" - - t += "Hot loop
" - t += "Temperature: [round(input2.air_contents.temperature, 0.1)] K
" - t += "Pressure: [round(input2.air_contents.return_pressure(), 0.1)] kPa
" - - t += "

Close" - - t += "
" - user << browse(t, "window=teg;size=460x300") - onclose(user, "teg") - return 1 - - -/obj/machinery/power/generator_type2/Topic(href, href_list) - ..() - - if( href_list["close"] ) - usr << browse(null, "window=teg") - usr.unset_machine() - return 0 - - return 1 - - -/obj/machinery/power/generator_type2/power_change() - ..() - updateicon() \ No newline at end of file diff --git a/icons/obj/atmospherics/circulator.dmi b/icons/obj/atmospherics/circulator.dmi new file mode 100644 index 0000000000000000000000000000000000000000..dc1f24c28edfd459dfa5f777a511c962717674b6 GIT binary patch literal 1637 zcmV-r2AcVaP)004jp0{{R3yStZng26p|NqPY05i=0nE?L) z0QL3tg@uJbKR+}70RR7H{{S;)005Z)0RR6pY-|9TW&j+I)t&$V00DGTPE!Ct=GbNc z005tQR9JLGWpiV4X>fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;Zh zDainGjE%TBGg33tGfE(w;*!LYR3K9+IkPC)P`9WwPl<~&C9|j)C}zmTnO2mTn+jr^ z07X-C5-UN%I$(&dwKylgoS?_XpBe;8f67n zKNoNm0s!1SeUsgQ9>f3u1rA9>K~#90?V5{rqaYB5QKG>ny_jB;H1GeK3k(P-7sbSJ zPvvZTw)w!BA90jF5@NNYq-9YQB-F4udIHG=p~w38uIL&_u-giFQB}2Udqyi(QMPa3 z@A`?iHSm31ACAEel0U!1d20L&z7xDYzB(P4Z1q!FmcU=$;yg7zpK}2^U%NxY8*79D zY)%T8P*{7+O*-W!2SF{k_rat|OBj^k|R_#l@F3QSdqfkMUE zY)+#*6kjB0xaeU|F(~95Fr^``afH*@@dxn_2WtikW;(E9sIUMk;!{6oCW8>CvExVL z^8}?p%Hxa1CG^(_OdzFNqMx%ER{kgpMsvsCe0t;SL4xs_#bnjG(q?|)cu z6{2!TP(SYQem;emTt5%G4~(`#WDbw~Uti+KyC+zLe}9Xg*rutkz^+5cd=1;mILF_Z zr#QZ~F^#X;Ji<<3OK|fCS6XJU3-Mk2!MXhB6zAu2kU!er1Ae;1`MC)3|JEM_^Jav9 z7vR_Hyz!UIM1PPa_*{Q6?GL(}p8NZMxtwJBf1Q6f(*K*v;S}qA@dEx|HYW@Df7zTY z>Hp<$vV{LPhm%G8zZsk?;s4FyWD);w2Jgzu0{&kX*M)ik|1XaRZgq~r`}lvEeDeqY zh(8$d=kCJ!<7?fvVgCDD*SFi|4{rY8YON2Kuh~4pPGC#$Z~BAoMeSVXyESmaYoRKO zO;;%4@2V4y%;|p;{4@#^T;cmoc!aB%M#?Qi)7)y<%6 z&_Oz3AIb^S3MX*ZaTefI@Gij=mkMO7^$hU2)n1}fIDs?8of&kvxO^sX_g>g{V?kjK zXVwh6+;*Ei+;N-L3|bv}el{qa$gTHfJ>2o@{hZlcD(Kb#b-xi%b!sBl*w4H9r@`ZQ z6W9#aAa%b}Y5Hqq6xRs`xH`o&a(t$~Giru2SlQo7)kB4&xXwR3egf|)7~agWd0zq3 zdjh#^hYA&|8Jx}820DJ`G<$Y zyz$rT+WbK_c09WOmx@2qAJnHX*Z;G}yZ&D)KDz&xijVI9rQ)Oef2sHx{vW-o|Cfr7 z?*FCYqx*lU_~`y$Dn7dZmx_<>|E1!i`+uqU=>Fg452E;kDgO>$7hHy;`+u81_-Ouk j>*DTw&E^qy0zUo^#?zSCsS|Rl00000NkvXXu0mjf09-Ox literal 0 HcmV?d00001 diff --git a/icons/obj/pipe-item.dmi b/icons/obj/pipe-item.dmi index 34fedaa560f84461ed7e005ea1e560472cc98208..73d62edfaa804c3721c3e755316cc942760faaa0 100644 GIT binary patch delta 10635 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 aw=m&n#s50)?`i_jOHD~ju}a=L^#1@E@nMVr delta 9451 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 z zoFWBTNgln+z6PB6n85gc;d%kZZBp7ok{e+ZAgpccCf=@2IuV~*|8 zQmjyoj=WEbW2BBOjUH;+5x)FM>}k$Gs2M4Y#3o}@jZ4MfV|RS(^WK+aaqj{#;vVkp zys83RviIA!U{E+Yo{#zYc`{Gp$Om0v6rmekkgV;ZwhKj(3QLj%d-5sBu{e(1K z!r1FEW$MGGlR55{8wXFW9wvR*g0}P1)2=3Fwr&`{Y)A{6tUF!aZcr%X;DBERU*mj_8BzO`lNHv7#$)R(e7{uU_Y zmp?qZ`S+D-@HZYOvnA~i(1mpbPreuY!icfidRFq^_p-cHRpmGjpp?_`?Qd?8dr}6p zDW5-m`qUVEt4mu?t@-m#`Q83ZBgNlG>1Qqy4KcJ*fBv31vh2u38D3Kv-sepvO%3qt zYc09Q&pE3yu+y>n+WoHc{1}KDN7<6fe_XQ_jZ28DS>2|yU**WYG2PR^-H*@=bw8^r zhxzH~+^udo2HZ`*VOU0sK$Kp67~kSBjxPSaWEej<{umv`zhb;ELkUBKW+LecQDr{j zZ56rMyiRuwvLo2<)n!8y5_|&Y1+JIdzH$VFZ4sLHOIq!;ZEX{+76(M7y7z4h)}R}( zIcM6&2uFj`4A{J~hiZa6Wz3jLRs->e#P50bv0wGIU%qo9YFQ!c+1}y!ws?VrJ-}Y) zeM?(*?A(_J4{p7kM>9vc2hd$B#6Cuem&kgti04Sc5xIHnXohY4;%Drmj*&0a#MR>t zs~YEl!Hi@Z`ITCC5p9Q3%qN7*sAhd`6V%Kf-cgu)tOK4tgQR6BuFxfXH!F=<+Ouk1 z-SlOAto}T%mMMg1SNR#-)cc$^jZW+rnN-)CWK*N2QB7)`t)fi1l)=F{l`W3O|6P1yA3arHz>W8KC(P9@61 zIRIzpzqOa6&(mgutUTZ4$4{cy z#s;U{Ug8h*nfSHxH`cA=NyTi&9KJVUs$+4Sg`Y2^^aQj`;qf%KIqO;ggJwp3u64d- ze4rcMZg3bs+VE}fM&14|7pBW#rvVJYvAh`=KodXCUka{ImwwOQB58Yn;_=YVl)kTv z+fz;7eT>txb{;u;fM=z≀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 literal 78083 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

G`+rS(V(z~Y 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

K+*py0e_I%zshwAiE^X`lqFLON-yfd-LKJ2Ula| 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 D4DSK$ diff --git a/paradise.dme b/paradise.dme index d3589defcf1..f2881559da2 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1738,7 +1738,6 @@ #include "code\modules\power\cell.dm" #include "code\modules\power\engine.dm" #include "code\modules\power\generator.dm" -#include "code\modules\power\generator_type2.dm" #include "code\modules\power\gravitygenerator.dm" #include "code\modules\power\lighting.dm" #include "code\modules\power\port_gen.dm" From 57587f477deb9c0f4e6a84865c7f04cf41b32510 Mon Sep 17 00:00:00 2001 From: Markolie Date: Tue, 11 Oct 2016 23:55:13 +0200 Subject: [PATCH 02/30] Remove initialize() from New() --- code/ATMOSPHERICS/components/binary_devices/circulator.dm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/code/ATMOSPHERICS/components/binary_devices/circulator.dm b/code/ATMOSPHERICS/components/binary_devices/circulator.dm index 04eb8955fa7..e7615d741b3 100644 --- a/code/ATMOSPHERICS/components/binary_devices/circulator.dm +++ b/code/ATMOSPHERICS/components/binary_devices/circulator.dm @@ -17,10 +17,6 @@ density = 1 can_unwrench = 1 - -/obj/machinery/atmospherics/binary/circulator/New() - initialize() - ..() /obj/machinery/atmospherics/binary/circulator/proc/return_transfer_air() var/output_starting_pressure = air1.return_pressure() From c4f77307648b3aee0b1bc4239c762ca75084a994 Mon Sep 17 00:00:00 2001 From: Markolie Date: Wed, 12 Oct 2016 14:00:02 +0200 Subject: [PATCH 03/30] Additional TEG changes --- .../components/binary_devices/circulator.dm | 17 ++++++++ code/datums/supplypacks.dm | 7 ++-- code/game/machinery/pipe/pipe_dispenser.dm | 1 - code/modules/power/generator.dm | 40 +++++++++++++++++-- 4 files changed, 58 insertions(+), 7 deletions(-) diff --git a/code/ATMOSPHERICS/components/binary_devices/circulator.dm b/code/ATMOSPHERICS/components/binary_devices/circulator.dm index e7615d741b3..bc126e5ce83 100644 --- a/code/ATMOSPHERICS/components/binary_devices/circulator.dm +++ b/code/ATMOSPHERICS/components/binary_devices/circulator.dm @@ -12,11 +12,28 @@ var/global/const/CIRC_RIGHT = 2 var/last_pressure_delta = 0 + + var/obj/machinery/power/generator/generator anchored = 1 density = 1 can_unwrench = 1 + +// Creating a custom circulator pipe subtype to be delivered through cargo +/obj/item/pipe/circulator + name = "circulator/heat exchanger fitting" + +/obj/item/pipe/circulator/New(loc) + var/obj/machinery/atmospherics/binary/circulator/C = new /obj/machinery/atmospherics/binary/circulator(null) + ..(loc, make_from = C) + +/obj/machinery/atmospherics/binary/circulator/Destroy() + if(generator && generator.cold_circ == src) + generator.cold_circ = null + else if(generator && generator.hot_circ == src) + generator.hot_circ = null + return ..() /obj/machinery/atmospherics/binary/circulator/proc/return_transfer_air() var/output_starting_pressure = air1.return_pressure() diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 5ccb0bb932b..3424a6b93d7 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -581,7 +581,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /obj/item/clothing/head/helmet/space, /obj/item/clothing/head/helmet/space, /obj/item/clothing/mask/breath, - /obj/item/clothing/mask/breath,) + /obj/item/clothing/mask/breath) cost = 30 containertype = /obj/structure/closet/crate/secure containername = "space suit crate" @@ -606,8 +606,9 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /datum/supply_packs/engineering/engine/teg name = "Thermo-Electric Generator Crate" contains = list( - /obj/machinery/power/generator - ) + /obj/machinery/power/generator, + /obj/item/pipe/circulator, + /obj/item/pipe/circulator) cost = 25 containertype = /obj/structure/closet/crate/secure containername = "thermo-electric generator crate" diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index 3801a71aaea..34f41e2a1b5 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -48,7 +48,6 @@ Air Injector
Dual-Port Vent Pump
Passive Vent
-Circulator/Heat Exchanger
Heat exchange:
Pipe
Bent Pipe
diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index a8fdf206c72..94499a9da7e 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -15,6 +15,20 @@ var/lastgen = 0 var/lastgenlev = -1 var/lastcirc = "00" + +/obj/machinery/power/generator/New() + ..() + update_desc() + +/obj/machinery/power/generator/proc/update_desc() + desc = initial(desc) + " Its cold circulator is located on the [dir2text(cold_dir)] side, and its heat circulator is located on the [dir2text(hot_dir)] side." + +/obj/machinery/power/generator/Destroy() + if(cold_circ) + cold_circ.generator = null + if(hot_circ) + hot_circ.generator = null + return ..() /obj/machinery/power/generator/initialize() var/obj/machinery/atmospherics/binary/circulator/circpath = /obj/machinery/atmospherics/binary/circulator @@ -28,6 +42,7 @@ cold_circ.side = circpath.CIRC_RIGHT if(WEST) cold_circ.side = circpath.CIRC_LEFT + cold_circ.generator = src cold_circ.update_icon() if(hot_circ) @@ -36,10 +51,17 @@ hot_circ.side = circpath.CIRC_RIGHT if(WEST) hot_circ.side = circpath.CIRC_LEFT + hot_circ.generator = src hot_circ.update_icon() + power_change() update_icon() - power_change() + +/obj/machinery/power/generator/power_change() + if(!anchored) + stat |= NOPOWER + else + ..() /obj/machinery/power/generator/update_icon() if(stat & (NOPOWER|BROKEN)) @@ -53,6 +75,9 @@ overlays += image('icons/obj/power.dmi', "teg-oc[lastcirc]") /obj/machinery/power/generator/process() + if(stat & (NOPOWER|BROKEN)) + return + if(!cold_circ || !hot_circ) return @@ -134,6 +159,15 @@ initialize() playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) to_chat(user, "You [anchored ? "secure" : "unsecure"] the bolts holding [src] to the floor.") + else if(istype(W, /obj/item/device/multitool)) + if(cold_dir == WEST) + cold_dir = EAST + hot_dir = WEST + else + cold_dir = WEST + hot_dir = EAST + to_chat(user, "You reverse the generator's circulator settings. The cold circulator is now on the [dir2text(cold_dir)] side, and the heat circulator is now on the [dir2text(hot_dir)] side.") + update_desc() else ..() @@ -165,7 +199,7 @@ else t += "Unable to locate all parts!" if(include_link) - t += "
Close" + t += "
Close" return t @@ -180,7 +214,7 @@ /obj/machinery/power/generator/Topic(href, href_list) if(..()) - return + return 1 if( href_list["close"] ) usr << browse(null, "window=teg") usr.unset_machine() From 61e1ae0f03be446d428da86c24146cdd673c9640 Mon Sep 17 00:00:00 2001 From: Markolie Date: Wed, 12 Oct 2016 14:49:58 +0200 Subject: [PATCH 04/30] Further TEG changes --- .../components/binary_devices/circulator.dm | 6 ++- code/modules/power/generator.dm | 45 +++++++++++------- icons/obj/atmospherics/circulator.dmi | Bin 1637 -> 1637 bytes 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/code/ATMOSPHERICS/components/binary_devices/circulator.dm b/code/ATMOSPHERICS/components/binary_devices/circulator.dm index bc126e5ce83..287988ff05d 100644 --- a/code/ATMOSPHERICS/components/binary_devices/circulator.dm +++ b/code/ATMOSPHERICS/components/binary_devices/circulator.dm @@ -8,13 +8,15 @@ var/side = CIRC_LEFT - var/global/const/CIRC_LEFT = 1 - var/global/const/CIRC_RIGHT = 2 + var/global/const/CIRC_LEFT = WEST + var/global/const/CIRC_RIGHT = EAST var/last_pressure_delta = 0 var/obj/machinery/power/generator/generator + layer = 2.45 // Just above wires + anchored = 1 density = 1 diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 94499a9da7e..55afcafe65e 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -24,38 +24,39 @@ desc = initial(desc) + " Its cold circulator is located on the [dir2text(cold_dir)] side, and its heat circulator is located on the [dir2text(hot_dir)] side." /obj/machinery/power/generator/Destroy() + disconnect() + return ..() + +/obj/machinery/power/generator/proc/disconnect() if(cold_circ) cold_circ.generator = null if(hot_circ) hot_circ.generator = null - return ..() + if(powernet) + disconnect_from_network() /obj/machinery/power/generator/initialize() + connect_to_network() + var/obj/machinery/atmospherics/binary/circulator/circpath = /obj/machinery/atmospherics/binary/circulator cold_circ = locate(circpath) in get_step(src, cold_dir) hot_circ = locate(circpath) in get_step(src, hot_dir) - connect_to_network() - if(cold_circ) - switch(cold_dir) - if(EAST) - cold_circ.side = circpath.CIRC_RIGHT - if(WEST) - cold_circ.side = circpath.CIRC_LEFT + if(cold_circ && cold_circ.side == cold_dir) cold_circ.generator = src cold_circ.update_icon() + else + cold_circ = null - if(hot_circ) - switch(hot_dir) - if(EAST) - hot_circ.side = circpath.CIRC_RIGHT - if(WEST) - hot_circ.side = circpath.CIRC_LEFT + if(hot_circ && hot_circ.side == hot_dir) hot_circ.generator = src hot_circ.update_icon() + else + hot_circ = null power_change() update_icon() + updateDialog() /obj/machinery/power/generator/power_change() if(!anchored) @@ -137,7 +138,7 @@ lastcirc = circ update_icon() - src.updateDialog() + updateDialog() /obj/machinery/power/generator/attack_ai(mob/user) return attack_hand(user) @@ -156,7 +157,11 @@ /obj/machinery/power/generator/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/wrench)) anchored = !anchored - initialize() + if(!anchored) + disconnect() + power_change() + else + initialize() playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) to_chat(user, "You [anchored ? "secure" : "unsecure"] the bolts holding [src] to the floor.") else if(istype(W, /obj/item/device/multitool)) @@ -166,6 +171,7 @@ else cold_dir = WEST hot_dir = EAST + initialize() to_chat(user, "You reverse the generator's circulator settings. The cold circulator is now on the [dir2text(cold_dir)] side, and the heat circulator is now on the [dir2text(hot_dir)] side.") update_desc() else @@ -175,6 +181,7 @@ var/t = "" if(!powernet) t += "Unable to connect to the power network!" + t += "
Retry" else if(cold_circ && hot_circ) var/datum/gas_mixture/cold_circ_air1 = cold_circ.air1 var/datum/gas_mixture/cold_circ_air2 = cold_circ.air2 @@ -198,6 +205,7 @@ t += "" else t += "Unable to locate all parts!" + t += "
Retry" if(include_link) t += "
Close" @@ -214,11 +222,14 @@ /obj/machinery/power/generator/Topic(href, href_list) if(..()) - return 1 + return 0 if( href_list["close"] ) usr << browse(null, "window=teg") usr.unset_machine() return 0 + if( href_list["check"] ) + if(!powernet || !cold_circ || !hot_circ) + initialize() return 1 /obj/machinery/power/generator/power_change() diff --git a/icons/obj/atmospherics/circulator.dmi b/icons/obj/atmospherics/circulator.dmi index dc1f24c28edfd459dfa5f777a511c962717674b6..45f7a626ef6eaa241c79c9843276f22f33f04147 100644 GIT binary patch delta 47 zcmaFL^OR@8Q%0wW&#dJXZ@CCB@>Q|U@bTc5N@WeV7cUTDVqiL1yS?D1=dR86jB2a^ DpS=(= delta 47 zcmaFL^OR@8Q^tUa&#dK?Zn-Eg@>Q|U=<(o|N@WeV7cUTDVz^^lJNa&d+>y=pjB2a^ Dt;P_p From 8b541bb1e966596bd00d2c2ba6be6dbafb309173 Mon Sep 17 00:00:00 2001 From: Markolie Date: Thu, 13 Oct 2016 19:40:16 +0200 Subject: [PATCH 05/30] Hopefully final TEG fixes --- .../components/binary_devices/circulator.dm | 10 +++--- code/game/machinery/pipe/construction.dm | 4 +++ code/modules/power/generator.dm | 34 +++++++++++-------- 3 files changed, 28 insertions(+), 20 deletions(-) diff --git a/code/ATMOSPHERICS/components/binary_devices/circulator.dm b/code/ATMOSPHERICS/components/binary_devices/circulator.dm index 287988ff05d..b6c5d55e5a9 100644 --- a/code/ATMOSPHERICS/components/binary_devices/circulator.dm +++ b/code/ATMOSPHERICS/components/binary_devices/circulator.dm @@ -2,7 +2,7 @@ //node2, air2, network2 correspond to output /obj/machinery/atmospherics/binary/circulator name = "circulator/heat exchanger" - desc = "A gas circulator pump and heat exchanger." + desc = "A gas circulator pump and heat exchanger. Its input port is on the south side, and its output port is on the north side." icon = 'icons/obj/atmospherics/circulator.dmi' icon_state = "circ1-off" @@ -41,20 +41,20 @@ var/output_starting_pressure = air1.return_pressure() var/input_starting_pressure = air2.return_pressure() - if(output_starting_pressure >= input_starting_pressure-10) + if(output_starting_pressure >= input_starting_pressure - 10) //Need at least 10 KPa difference to overcome friction in the mechanism last_pressure_delta = 0 return null //Calculate necessary moles to transfer using PV = nRT - if(air2.temperature>0) - var/pressure_delta = (input_starting_pressure - output_starting_pressure)/2 + if(air2.temperature > 0) + var/pressure_delta = (input_starting_pressure - output_starting_pressure) / 2 var/transfer_moles = pressure_delta * air1.volume/(air2.temperature * R_IDEAL_GAS_EQUATION) last_pressure_delta = pressure_delta - //world << "pressure_delta = [pressure_delta]; transfer_moles = [transfer_moles];" + //log_debug("pressure_delta = [pressure_delta]; transfer_moles = [transfer_moles];") //Actually transfer the gas var/datum/gas_mixture/removed = air2.remove(transfer_moles) diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index b7a88ae8b83..bf2eedeaf23 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -292,6 +292,10 @@ if( usr.stat || usr.restrained() ) return + + if(pipe_type == PIPE_CIRCULATOR) + flip() + return src.dir = turn(src.dir, -90) diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 55afcafe65e..0ff6289ea66 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -36,6 +36,10 @@ disconnect_from_network() /obj/machinery/power/generator/initialize() + ..() + connect() + +/obj/machinery/power/generator/proc/connect() connect_to_network() var/obj/machinery/atmospherics/binary/circulator/circpath = /obj/machinery/atmospherics/binary/circulator @@ -86,49 +90,49 @@ if(powernet) - //world << "cold_circ and hot_circ pass" + //log_debug("cold_circ and hot_circ pass") var/datum/gas_mixture/cold_air = cold_circ.return_transfer_air() var/datum/gas_mixture/hot_air = hot_circ.return_transfer_air() - //world << "hot_air = [hot_air]; cold_air = [cold_air];" + //log_debug("hot_air = [hot_air]; cold_air = [cold_air];") if(cold_air && hot_air) - //world << "hot_air = [hot_air] temperature = [hot_air.temperature]; cold_air = [cold_air] temperature = [hot_air.temperature];" + //log_debug("hot_air = [hot_air] temperature = [hot_air.temperature]; cold_air = [cold_air] temperature = [hot_air.temperature];") - //world << "coldair and hotair pass" + //log_debug("coldair and hotair pass") var/cold_air_heat_capacity = cold_air.heat_capacity() var/hot_air_heat_capacity = hot_air.heat_capacity() var/delta_temperature = hot_air.temperature - cold_air.temperature - //world << "delta_temperature = [delta_temperature]; cold_air_heat_capacity = [cold_air_heat_capacity]; hot_air_heat_capacity = [hot_air_heat_capacity]" + //log_debug("delta_temperature = [delta_temperature]; cold_air_heat_capacity = [cold_air_heat_capacity]; hot_air_heat_capacity = [hot_air_heat_capacity]") if(delta_temperature > 0 && cold_air_heat_capacity > 0 && hot_air_heat_capacity > 0) var/efficiency = 0.65 - var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity + cold_air_heat_capacity) + var/energy_transfer = delta_temperature * hot_air_heat_capacity * cold_air_heat_capacity / (hot_air_heat_capacity + cold_air_heat_capacity) - var/heat = energy_transfer*(1-efficiency) - lastgen = energy_transfer*efficiency + var/heat = energy_transfer * (1 - efficiency) + lastgen = energy_transfer * efficiency - //world << "lastgen = [lastgen]; heat = [heat]; delta_temperature = [delta_temperature]; hot_air_heat_capacity = [hot_air_heat_capacity]; cold_air_heat_capacity = [cold_air_heat_capacity];" + //log_debug("lastgen = [lastgen]; heat = [heat]; delta_temperature = [delta_temperature]; hot_air_heat_capacity = [hot_air_heat_capacity]; cold_air_heat_capacity = [cold_air_heat_capacity];") hot_air.temperature = hot_air.temperature - energy_transfer / hot_air_heat_capacity cold_air.temperature = cold_air.temperature + heat / cold_air_heat_capacity - //world << "POWER: [lastgen] W generated at [efficiency*100]% efficiency and sinks sizes [cold_air_heat_capacity], [hot_air_heat_capacity]" + //log_debug("POWER: [lastgen] W generated at [efficiency * 100]% efficiency and sinks sizes [cold_air_heat_capacity], [hot_air_heat_capacity]") add_avail(lastgen) // update icon overlays only if displayed level has changed if(hot_air) - var/datum/gas_mixture/hot_circ_air1 = hot_circ.return_transfer_air() + var/datum/gas_mixture/hot_circ_air1 = hot_circ.air1 hot_circ_air1.merge(hot_air) if(cold_air) - var/datum/gas_mixture/cold_circ_air1 = cold_circ.return_transfer_air() + var/datum/gas_mixture/cold_circ_air1 = cold_circ.air1 cold_circ_air1.merge(cold_air) var/genlev = max(0, min( round(11 * lastgen / 100000), 11)) @@ -161,7 +165,7 @@ disconnect() power_change() else - initialize() + connect() playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) to_chat(user, "You [anchored ? "secure" : "unsecure"] the bolts holding [src] to the floor.") else if(istype(W, /obj/item/device/multitool)) @@ -171,7 +175,7 @@ else cold_dir = WEST hot_dir = EAST - initialize() + connect() to_chat(user, "You reverse the generator's circulator settings. The cold circulator is now on the [dir2text(cold_dir)] side, and the heat circulator is now on the [dir2text(hot_dir)] side.") update_desc() else @@ -229,7 +233,7 @@ return 0 if( href_list["check"] ) if(!powernet || !cold_circ || !hot_circ) - initialize() + connect() return 1 /obj/machinery/power/generator/power_change() From 58aaede7ea36280212b396a9d0b534e830b5c821 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Wed, 19 Oct 2016 04:09:04 -0400 Subject: [PATCH 06/30] Food Refactor --- code/modules/food_and_drinks/food/candy.dm | 116 +++-- .../food_and_drinks/food/customizables.dm | 1 - code/modules/food_and_drinks/food/meat.dm | 11 +- code/modules/food_and_drinks/food/seafood.dm | 46 +- code/modules/food_and_drinks/food/snacks.dm | 441 +++++++++--------- 5 files changed, 314 insertions(+), 301 deletions(-) diff --git a/code/modules/food_and_drinks/food/candy.dm b/code/modules/food_and_drinks/food/candy.dm index d13eb7ec145..d41272ef78a 100644 --- a/code/modules/food_and_drinks/food/candy.dm +++ b/code/modules/food_and_drinks/food/candy.dm @@ -13,9 +13,6 @@ icon = 'icons/obj/food/candy.dmi' icon_state = "candy" -/obj/item/weapon/reagent_containers/food/snacks/candy/New() - ..() - // *********************************************************** // Candy Ingredients / Flavorings / Byproduct // *********************************************************** @@ -25,42 +22,43 @@ desc = "Such sweet, fattening food." icon_state = "chocolatebar" filling_color = "#7D5F46" + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/chocolatebar/New() ..() reagents.add_reagent("nutriment", 2) reagents.add_reagent("chocolate",4) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/candy/caramel name = "Caramel" desc = "Chewy and dense, yet it practically melts in your mouth!" icon_state = "caramel" filling_color = "#DB944D" + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/candy/caramel/New() ..() reagents.add_reagent("cream", 2) reagents.add_reagent("sugar", 2) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/candy/toffee name = "Toffee" desc = "A hard, brittle candy with a distinctive taste." icon_state = "toffee" filling_color = "#7D5F46" + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/candy/toffee/New() ..() reagents.add_reagent("nutriment", 3) reagents.add_reagent("sugar", 3) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/candy/nougat name = "Nougat" desc = "A soft, chewy candy commonly found in candybars." icon_state = "nougat" filling_color = "#7D5F46" + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/candy/nougat/New() ..() @@ -69,32 +67,31 @@ spawn(1) reagents.del_reagent("egg") reagents.update_total() - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/candy/taffy name = "Saltwater Taffy" desc = "Old fashioned saltwater taffy. Chewy!" icon_state = "candy1" filling_color = "#7D5F46" + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/candy/taffy/New() ..() icon_state = pick("candy1", "candy2", "candy3", "candy4", "candy5") reagents.add_reagent("nutriment", 3) reagents.add_reagent("sugar", 3) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/candy/fudge name = "Fudge" desc = "Chocolate fudge, a timeless classic treat." icon_state = "fudge" filling_color = "#7D5F46" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/fudge/New() ..() reagents.add_reagent("cream", 3) reagents.add_reagent("chocolate",6) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/fudge/peanut name = "Peanut Fudge" @@ -132,24 +129,24 @@ name = "Donor Candy" desc = "A little treat for blood donors." trash = /obj/item/trash/candy + bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/candy/donor/New() ..() reagents.add_reagent("nutriment", 10) reagents.add_reagent("sugar", 3) - bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/candy/candy_corn name = "candy corn" desc = "It's a handful of candy corn. Cannot be stored in a detective's hat, alas." icon_state = "candycorn" filling_color = "#FFFCB0" + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/candy/candy_corn/New() ..() reagents.add_reagent("nutriment", 4) reagents.add_reagent("sugar", 2) - bitesize = 2 // *********************************************************** // Candy Products (plain / unflavored) @@ -161,11 +158,11 @@ icon_state = "cottoncandy_plain" trash = /obj/item/weapon/c_tube filling_color = "#FFFFFF" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/New() ..() reagents.add_reagent("sugar", 15) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/candybar name = "candy" @@ -173,80 +170,80 @@ icon_state = "candy" trash = /obj/item/trash/candy filling_color = "#7D5F46" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/candybar/New() ..() reagents.add_reagent("nutriment", 2) reagents.add_reagent("chocolate",5) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/candycane name = "candy cane" desc = "A festive mint candy cane." icon_state = "candycane" filling_color = "#F2F2F2" + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/candy/candycane/New() ..() reagents.add_reagent("minttoxin", 1) reagents.add_reagent("sugar", 5) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear name = "gummy bear" desc = "A small edible bear. It's squishy and chewy!" icon_state = "gbear" filling_color = "#FFFFFF" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/New() ..() reagents.add_reagent("sugar", 10) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm name = "gummy worm" desc = "An edible worm, made from gelatin." icon_state = "gworm" filling_color = "#FFFFFF" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/New() ..() reagents.add_reagent("sugar", 10) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas." icon_state = "jbean" filling_color = "#FFFFFF" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/New() ..() reagents.add_reagent("sugar", 10) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jawbreaker name = "jawbreaker" desc = "An unbelievably hard candy. The name is fitting." icon_state = "jawbreaker" filling_color = "#ED0758" + bitesize = 0.1 //this is gonna take a while, you'll be working at this all shift. /obj/item/weapon/reagent_containers/food/snacks/candy/jawbreaker/New() ..() reagents.add_reagent("sugar", 10) - bitesize = 0.1 //this is gonna take a while, you'll be working at this all shift. /obj/item/weapon/reagent_containers/food/snacks/candy/cash name = "candy cash" desc = "Not legal tender. Tasty though." icon_state = "candy_cash" filling_color = "#302000" + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/candy/cash/New() ..() reagents.add_reagent("nutriment", 2) reagents.add_reagent("chocolate", 4) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/candy/coin name = "chocolate coin" @@ -266,11 +263,11 @@ icon_state = "bubblegum" trash = /obj/item/trash/gum filling_color = "#FF7495" + bitesize = 0.2 /obj/item/weapon/reagent_containers/food/snacks/candy/gum/New() ..() reagents.add_reagent("sugar", 5) - bitesize = 0.2 /obj/item/weapon/reagent_containers/food/snacks/candy/sucker name = "sucker" @@ -281,7 +278,6 @@ /obj/item/weapon/reagent_containers/food/snacks/candy/sucker/New() ..() reagents.add_reagent("sugar", 10) - bitesize = 1 // *********************************************************** // Gummy Bear Flavors @@ -292,28 +288,29 @@ desc = "A small edible bear. It's red!" icon_state = "gbear_red" filling_color = "#801E28" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/red/New() ..() reagents.add_reagent("cherryjelly", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/blue name = "gummy bear" desc = "A small edible bear. It's blue!" icon_state = "gbear_blue" filling_color = "#863333" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/blue/New() ..() reagents.add_reagent("berryjuice", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/poison name = "gummy bear" desc = "A small edible bear. It's blue!" icon_state = "gbear_blue" filling_color = "#863353" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/poison/New() ..() @@ -321,62 +318,61 @@ spawn(1) reagents.del_reagent("sugar") reagents.update_total() - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/green name = "gummy bear" desc = "A small edible bear. It's green!" icon_state = "gbear_green" filling_color = "#365E30" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/green/New() ..() reagents.add_reagent("limejuice", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/yellow name = "gummy bear" desc = "A small edible bear. It's yellow!" icon_state = "gbear_yellow" filling_color = "#863333" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/yellow/New() ..() reagents.add_reagent("lemonjuice", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/orange name = "gummy bear" desc = "A small edible bear. It's orange!" icon_state = "gbear_orange" filling_color = "#E78108" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/orange/New() ..() reagents.add_reagent("orangejuice", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/purple name = "gummy bear" desc = "A small edible bear. It's purple!" icon_state = "gbear_purple" filling_color = "#993399" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/purple/New() ..() reagents.add_reagent("grapejuice", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/wtf name = "gummy bear" desc = "A small bear. Wait... what?" icon_state = "gbear_wtf" filling_color = "#60A584" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/wtf/New() ..() reagents.add_reagent("space_drugs", 2) - bitesize = 3 // *********************************************************** // Gummy Worm Flavors @@ -387,28 +383,29 @@ desc = "An edible worm, made from gelatin. It's red!" icon_state = "gworm_red" filling_color = "#801E28" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/red/New() ..() reagents.add_reagent("cherryjelly", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/blue name = "gummy worm" desc = "An edible worm, made from gelatin. It's blue!" icon_state = "gworm_blue" filling_color = "#863333" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/blue/New() ..() reagents.add_reagent("berryjuice", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/poison name = "gummy worm" desc = "An edible worm, made from gelatin. It's blue!" icon_state = "gworm_blue" filling_color = "#863353" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/poison/New() ..() @@ -416,62 +413,61 @@ spawn(1) reagents.del_reagent("sugar") reagents.update_total() - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/green name = "gummy worm" desc = "An edible worm, made from gelatin. It's green!" icon_state = "gworm_green" filling_color = "#365E30" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/green/New() ..() reagents.add_reagent("limejuice", 10) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/yellow name = "gummy worm" desc = "An edible worm, made from gelatin. It's yellow!" icon_state = "gworm_yellow" filling_color = "#863333" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/yellow/New() ..() reagents.add_reagent("lemonjuice", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/orange name = "gummy worm" desc = "An edible worm, made from gelatin. It's orange!" icon_state = "gworm_orange" filling_color = "#E78108" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/orange/New() ..() reagents.add_reagent("orangejuice", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/purple name = "gummy worm" desc = "An edible worm, made from gelatin. It's purple!" icon_state = "gworm_purple" filling_color = "#993399" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/purple/New() ..() reagents.add_reagent("grapejuice", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/wtf name = "gummy worm" desc = "An edible worm. Did it just move?" icon_state = "gworm_wtf" filling_color = "#60A584" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/wtf/New() ..() reagents.add_reagent("space_drugs", 2) - bitesize = 3 // *********************************************************** // Jelly Bean Flavors @@ -482,28 +478,29 @@ desc = "A candy bean, guarenteed to not give you gas. It's red!" icon_state = "jbean_red" filling_color = "#801E28" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/red/New() ..() reagents.add_reagent("cherryjelly", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/blue name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. It's blue!" icon_state = "jbean_blue" filling_color = "#863333" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/blue/New() ..() reagents.add_reagent("berryjuice", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/poison name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. It's blue!" icon_state = "jbean_blue" filling_color = "#863353" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/poison/New() ..() @@ -511,117 +508,116 @@ spawn(1) reagents.del_reagent("sugar") reagents.update_total() - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/green name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. It's green!" icon_state = "jbean_green" filling_color = "#365E30" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/green/New() ..() reagents.add_reagent("limejuice", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/yellow name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. It's yellow!" icon_state = "jbean_yellow" filling_color = "#863333" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/yellow/New() ..() reagents.add_reagent("lemonjuice", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/orange name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. It's orange!" icon_state = "jbean_orange" filling_color = "#E78108" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/orange/New() ..() reagents.add_reagent("orangejuice", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/purple name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. It's purple!" icon_state = "jbean_purple" filling_color = "#993399" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/purple/New() ..() reagents.add_reagent("grapejuice", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/chocolate name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. It's chocolate!" icon_state = "jbean_choc" filling_color = "#302000" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/chocolate/New() ..() reagents.add_reagent("chocolate",2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/popcorn name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. It's popcorn flavored!" icon_state = "jbean_popcorn" filling_color = "#664330" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/popcorn/New() ..() reagents.add_reagent("nutriment", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/cola name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. It's Cola flavored!" icon_state = "jbean_cola" filling_color = "#102000" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/cola/New() ..() reagents.add_reagent("cola", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/drgibb name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. It's Dr. Gibb flavored!" icon_state = "jbean_cola" filling_color = "#102000" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/drgibb/New() ..() reagents.add_reagent("dr_gibb", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/coffee name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. It's Coffee flavored!" icon_state = "jbean_choc" filling_color = "#482000" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/coffee/New() ..() reagents.add_reagent("coffee", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/wtf name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. You aren't sure what color it is." icon_state = "jbean_wtf" filling_color = "#60A584" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/wtf/New() ..() reagents.add_reagent("space_drugs", 2) - bitesize = 3 // *********************************************************** // Cotton Candy Flavors @@ -633,11 +629,11 @@ icon_state = "cottoncandy_red" trash = /obj/item/weapon/c_tube filling_color = "#801E28" + bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/red/New() ..() reagents.add_reagent("cherryjelly", 5) - bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/blue name = "cotton candy" @@ -645,11 +641,11 @@ icon_state = "cottoncandy_blue" trash = /obj/item/weapon/c_tube filling_color = "#863333" + bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/blue/New() ..() reagents.add_reagent("berryjuice", 5) - bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/poison name = "cotton candy" @@ -657,6 +653,7 @@ icon_state = "cottoncandy_blue" trash = /obj/item/weapon/c_tube filling_color = "#863353" + bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/poison/New() ..() @@ -664,7 +661,6 @@ spawn(1) reagents.del_reagent("sugar") reagents.update_total() - bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/green name = "cotton candy" @@ -672,11 +668,11 @@ icon_state = "cottoncandy_green" trash = /obj/item/weapon/c_tube filling_color = "#365E30" + bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/green/New() ..() reagents.add_reagent("limejuice", 5) - bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/yellow name = "cotton candy" @@ -684,11 +680,11 @@ icon_state = "cottoncandy_yellow" trash = /obj/item/weapon/c_tube filling_color = "#863333" + bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/yellow/New() ..() reagents.add_reagent("lemonjuice", 5) - bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/orange name = "cotton candy" @@ -696,11 +692,11 @@ icon_state = "cottoncandy_orange" trash = /obj/item/weapon/c_tube filling_color = "#E78108" + bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/orange/New() ..() reagents.add_reagent("orangejuice", 5) - bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/purple name = "cotton candy" @@ -708,11 +704,11 @@ icon_state = "cottoncandy_purple" trash = /obj/item/weapon/c_tube filling_color = "#993399" + bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/purple/New() ..() reagents.add_reagent("grapejuice", 5) - bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/pink name = "cotton candy" @@ -720,11 +716,11 @@ icon_state = "cottoncandy_pink" trash = /obj/item/weapon/c_tube filling_color = "#863333" + bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/pink/New() ..() reagents.add_reagent("watermelonjuice", 5) - bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/rainbow name = "cotton candy" @@ -732,6 +728,7 @@ icon_state = "cottoncandy_rainbow" trash = /obj/item/weapon/c_tube filling_color = "#C8A5DC" + bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/rainbow/New() ..() @@ -739,7 +736,6 @@ spawn(1) reagents.del_reagent("sugar") reagents.update_total() - bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/bad_rainbow name = "cotton candy" @@ -747,6 +743,7 @@ icon_state = "cottoncandy_rainbow" trash = /obj/item/weapon/c_tube filling_color = "#32127A" + bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/bad_rainbow/New() ..() @@ -754,7 +751,6 @@ spawn(1) reagents.del_reagent("sugar") reagents.update_total() - bitesize = 4 // *********************************************************** // Candybar Flavors diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm index 78651f97b0c..b0706e89f55 100644 --- a/code/modules/food_and_drinks/food/customizables.dm +++ b/code/modules/food_and_drinks/food/customizables.dm @@ -82,7 +82,6 @@ New() ..() - reagents.add_reagent("nutriment", 8) diff --git a/code/modules/food_and_drinks/food/meat.dm b/code/modules/food_and_drinks/food/meat.dm index 76de76530ea..7cf513c2e91 100644 --- a/code/modules/food_and_drinks/food/meat.dm +++ b/code/modules/food_and_drinks/food/meat.dm @@ -4,16 +4,14 @@ icon_state = "meat" health = 180 filling_color = "#FF1C1C" + bitesize = 3 + New() ..() reagents.add_reagent("protein", 3) - src.bitesize = 3 -/obj/item/weapon/reagent_containers/food/snacks/meat/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if( \ - istype(W, /obj/item/weapon/kitchen/knife) || \ - istype(W, /obj/item/weapon/scalpel) \ - ) +/obj/item/weapon/reagent_containers/food/snacks/meat/attackby(obj/item/weapon/W, mob/user, params) + if(istype(W, /obj/item/weapon/kitchen/knife) || istype(W, /obj/item/weapon/scalpel)) new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src) new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src) new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src) @@ -49,6 +47,7 @@ /obj/item/weapon/reagent_containers/food/snacks/meat/ham name = "Ham" desc = "Taste like bacon." + New() ..() reagents.add_reagent("porktonium", 10) diff --git a/code/modules/food_and_drinks/food/seafood.dm b/code/modules/food_and_drinks/food/seafood.dm index 410c225247c..aa6960db3d3 100644 --- a/code/modules/food_and_drinks/food/seafood.dm +++ b/code/modules/food_and_drinks/food/seafood.dm @@ -5,12 +5,12 @@ icon = 'icons/obj/food/seafood.dmi' icon_state = "fishfillet" filling_color = "#FFDEFE" + bitesize = 6 New() ..() reagents.add_reagent("protein", 3) reagents.add_reagent("carpotoxin", 3) - src.bitesize = 6 /obj/item/weapon/reagent_containers/food/snacks/salmonmeat name = "raw salmon" @@ -18,11 +18,11 @@ icon = 'icons/obj/food/seafood.dmi' icon_state = "fishfillet" filling_color = "#FFDEFE" + bitesize = 3 New() ..() reagents.add_reagent("protein", 3) - src.bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/salmonsteak name = "Salmon steak" @@ -31,13 +31,13 @@ icon_state = "salmonsteak" trash = /obj/item/trash/plate filling_color = "#7A3D11" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 4) reagents.add_reagent("sodiumchloride", 1) reagents.add_reagent("blackpepper", 1) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/catfishmeat @@ -46,11 +46,11 @@ icon = 'icons/obj/food/seafood.dmi' icon_state = "fishfillet" filling_color = "#FFDEFE" + bitesize = 3 New() ..() reagents.add_reagent("protein", 3) - src.bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/fishfingers name = "Fish Fingers" @@ -58,6 +58,7 @@ icon = 'icons/obj/food/seafood.dmi' icon_state = "fishfingers" filling_color = "#FFDEFE" + bitesize = 3 New() ..() @@ -66,7 +67,6 @@ spawn(1) reagents.del_reagent("egg") reagents.update_total() - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/fishburger name = "Fillet -o- Carp Sandwich" @@ -74,12 +74,12 @@ icon = 'icons/obj/food/seafood.dmi' icon_state = "fishburger" filling_color = "#FFDEFE" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 6) reagents.add_reagent("carpotoxin", 3) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/cubancarp name = "Cuban Carp" @@ -88,13 +88,13 @@ icon_state = "cubancarp" trash = /obj/item/trash/plate filling_color = "#E9ADFF" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 6) reagents.add_reagent("carpotoxin", 3) reagents.add_reagent("capsaicin", 3) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/fishandchips name = "Fish and Chips" @@ -102,168 +102,168 @@ icon = 'icons/obj/food/seafood.dmi' icon_state = "fishandchips" filling_color = "#E3D796" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 6) reagents.add_reagent("carpotoxin", 3) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/sashimi name = "carp sashimi" desc = "Celebrate surviving attack from hostile alien lifeforms by hospitalising yourself." icon = 'icons/obj/food/seafood.dmi' icon_state = "sashimi" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 6) reagents.add_reagent("toxin", 5) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/fried_shrimp name = "fried shrimp" desc = "Just one of the many things you can do with shrimp!" icon = 'icons/obj/food/seafood.dmi' icon_state = "shrimp_fried" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 2) - src.bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/boiled_shrimp name = "boiled shrimp" desc = "Just one of the many things you can do with shrimp!" icon = 'icons/obj/food/seafood.dmi' icon_state = "shrimp_cooked" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 2) - src.bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/sushi_Ebi name = "Ebi Sushi" desc = "A simple sushi consisting of cooked shrimp and rice." icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Ebi" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/sushi_Ikura name = "Ikura Sushi" desc = "A simple sushi consisting of salmon roe." icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Ikura" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 2) reagents.add_reagent("protein", 1) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/sushi_Sake name = "Sake Sushi" desc = "A simple sushi consisting of raw salmon and rice." icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Sake" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/sushi_SmokedSalmon name = "Smoked Salmon Sushi" desc = "A simple sushi consisting of cooked salmon and rice." icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_SmokedSalmon" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/sushi_Tamago name = "Tamago Sushi" desc = "A simple sushi consisting of egg and rice." icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Tamago" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/sushi_Inari name = "Inari Sushi" desc = "A piece of fried tofu stuffed with rice." icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Inari" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/sushi_Masago name = "Masago Sushi" desc = "A simple sushi consisting of goldfish roe." icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Masago" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 2) reagents.add_reagent("protein", 1) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/sushi_Tobiko name = "Tobiko Sushi" desc = "A simple sushi consisting of shark roe." icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Masago" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 2) reagents.add_reagent("protein", 1) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/sushi_TobikoEgg name = "Tobiko and Egg Sushi" desc = "A sushi consisting of shark roe and an egg." icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_TobikoEgg" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 2) reagents.add_reagent("protein", 1) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/sushi_Tai name = "Tai Sushi" desc = "A simple sushi consisting of catfish and rice." icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Tai" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/sushi_Unagi name = "Unagi Sushi" desc = "A simple sushi consisting of eel and rice." icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Hokki" + bitesize = 3 New() ..() - reagents.add_reagent("nutriment", 2) - bitesize = 3 \ No newline at end of file + reagents.add_reagent("nutriment", 2) \ No newline at end of file diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index d403b4aae4b..cec68d92108 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -4,7 +4,6 @@ desc = "yummy" icon = 'icons/obj/food/food.dmi' icon_state = null - bitesize = 1 var/bitecount = 0 var/trash = null var/slice_path @@ -255,49 +254,12 @@ icon_state = "aesirsalad" trash = /obj/item/trash/snack_bowl filling_color = "#468C00" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 8) reagents.add_reagent("omnizine", 8) - bitesize = 3 - -/* -/obj/item/weapon/reagent_containers/food/snacks/candy - name = "candy" - desc = "Nougat, love it or hate it." - icon_state = "candy" - trash = /obj/item/trash/candy - filling_color = "#7D5F46" - - New() - ..() - reagents.add_reagent("nutriment", 1) - reagents.add_reagent("sugar", 3) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/candy/donor - name = "Donor Candy" - desc = "A little treat for blood donors." - trash = /obj/item/trash/candy - New() - ..() - reagents.add_reagent("nutriment", 10) - reagents.add_reagent("sugar", 3) - bitesize = 5 - -/obj/item/weapon/reagent_containers/food/snacks/candy_corn - name = "candy corn" - desc = "It's a handful of candy corn. Cannot be stored in a detective's hat, alas." - icon_state = "candy_corn" - filling_color = "#FFFCB0" - - New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("sugar", 2) - bitesize = 2 -*/ /obj/item/weapon/reagent_containers/food/snacks/chips name = "chips" @@ -310,7 +272,6 @@ ..() reagents.add_reagent("nutriment", 3) reagents.add_reagent("sodiumchloride", 1) - bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/cornchips name = "corn chips" @@ -322,7 +283,6 @@ New() ..() reagents.add_reagent("nutriment", 3) - bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/cookie name = "cookie" @@ -333,48 +293,48 @@ New() ..() reagents.add_reagent("nutriment", 5) - bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/chocolatebar name = "Chocolate Bar" desc = "Such sweet, fattening food." icon_state = "chocolatebar" filling_color = "#7D5F46" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 2) reagents.add_reagent("chocolate",4) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/choc_pile //for reagent chocolate being spilled on turfs name = "Pile of Chocolate" desc = "A pile of pure chocolate pieces." icon_state = "cocoa" filling_color = "#7D5F46" + bitesize = 2 New() ..() reagents.add_reagent("chocolate",5) //no longer can be used to generate the reagent infinitely - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/chocolateegg name = "Chocolate Egg" desc = "Such sweet, fattening food." icon_state = "chocolateegg" filling_color = "#7D5F46" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 3) reagents.add_reagent("chocolate",4) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/donut name = "donut" desc = "Goes great with Robust Coffee." icon_state = "donut1" filling_color = "#D9C386" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/donut/normal name = "donut" @@ -384,7 +344,6 @@ ..() reagents.add_reagent("nutriment", 3) reagents.add_reagent("sprinkles", 1) - src.bitesize = 3 if(prob(30)) src.icon_state = "donut2" src.name = "frosted donut" @@ -393,6 +352,7 @@ /obj/item/weapon/reagent_containers/food/snacks/donut/sprinkles name = "frosted donut" icon_state = "donut2" + New() ..() reagents.add_reagent("nutriment", 3) @@ -403,12 +363,12 @@ desc = "Like life, it never quite tastes the same." icon_state = "donut1" filling_color = "#ED11E6" + bitesize = 10 New() ..() reagents.add_reagent("nutriment", 2) reagents.add_reagent("sprinkles", 1) - bitesize = 10 var/chaosselect = pick(1,2,3,4,5,6,7,8,9,10) switch(chaosselect) if(1) @@ -442,13 +402,13 @@ desc = "You jelly?" icon_state = "jdonut1" filling_color = "#ED1169" + bitesize = 5 New() ..() reagents.add_reagent("nutriment", 3) reagents.add_reagent("sprinkles", 1) reagents.add_reagent("berryjuice", 5) - bitesize = 5 if(prob(30)) src.icon_state = "jdonut2" src.name = "Frosted Jelly Donut" @@ -459,13 +419,13 @@ desc = "You jelly?" icon_state = "jdonut1" filling_color = "#ED1169" + bitesize = 5 New() ..() reagents.add_reagent("nutriment", 3) reagents.add_reagent("sprinkles", 1) reagents.add_reagent("slimejelly", 5) - bitesize = 5 if(prob(30)) src.icon_state = "jdonut2" src.name = "Frosted Jelly Donut" @@ -476,13 +436,13 @@ desc = "You jelly?" icon_state = "jdonut1" filling_color = "#ED1169" + bitesize = 5 New() ..() reagents.add_reagent("nutriment", 3) reagents.add_reagent("sprinkles", 1) reagents.add_reagent("cherryjelly", 5) - bitesize = 5 if(prob(30)) src.icon_state = "jdonut2" src.name = "Frosted Jelly Donut" @@ -566,7 +526,6 @@ reagents.add_reagent("egg", 5) reagents.add_reagent("sodiumchloride", 1) reagents.add_reagent("blackpepper", 1) - bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/boiledegg name = "Boiled egg" @@ -586,11 +545,11 @@ icon = 'icons/obj/surgery.dmi' icon_state = "appendix" filling_color = "#E00D34" + bitesize = 3 New() ..() reagents.add_reagent("protein", 4) - src.bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/appendix //yes, this is the same as meat. I might do something different in future @@ -599,11 +558,11 @@ icon = 'icons/obj/surgery.dmi' icon_state = "appendix" filling_color = "#E00D34" + bitesize = 3 New() ..() reagents.add_reagent("protein", 3) - src.bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/appendix/inflamed name = "inflamed appendix" @@ -616,34 +575,34 @@ icon_state = "tofu" desc = "We all love tofu." filling_color = "#FFFEE0" + bitesize = 3 New() ..() reagents.add_reagent("plantmatter", 3) - src.bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/fried_tofu name = "Fried Tofu" icon_state = "tofu" desc = "Proof that even vegetarians crave unhealthy foods." filling_color = "#FFFEE0" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 3) - src.bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/tofurkey name = "Tofurkey" desc = "A fake turkey made from tofu." icon_state = "tofurkey" filling_color = "#FFFEE0" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 12) reagents.add_reagent("ether", 3) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/stuffing name = "Stuffing" @@ -654,107 +613,109 @@ New() ..() reagents.add_reagent("nutriment", 3) - bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice name = "huge mushroom slice" desc = "A slice from a huge mushroom." icon_state = "hugemushroomslice" filling_color = "#E0D7C5" + bitesize = 6 New() ..() reagents.add_reagent("plantmatter", 3) reagents.add_reagent("psilocybin", 3) - src.bitesize = 6 /obj/item/weapon/reagent_containers/food/snacks/tomatomeat name = "tomato slice" desc = "A slice from a huge tomato" icon_state = "tomatomeat" filling_color = "#DB0000" + bitesize = 6 New() ..() reagents.add_reagent("protein", 3) - src.bitesize = 6 /obj/item/weapon/reagent_containers/food/snacks/bearmeat name = "bear meat" desc = "A very manly slab of meat." icon_state = "bearmeat" filling_color = "#DB0000" + bitesize = 3 New() ..() reagents.add_reagent("protein", 12) reagents.add_reagent("methamphetamine", 5) - src.bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/xenomeat name = "meat" desc = "A slab of meat" icon_state = "xenomeat" filling_color = "#43DE18" + bitesize = 6 New() ..() reagents.add_reagent("protein", 3) - src.bitesize = 6 /obj/item/weapon/reagent_containers/food/snacks/spidermeat name = "spider meat" desc = "A slab of spider meat." icon_state = "spidermeat" + bitesize = 3 + New() ..() reagents.add_reagent("protein", 3) reagents.add_reagent("toxin", 3) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/lizardmeat name = "mutant lizard meat" desc = "Seems to be a slab of meat from some mutant lizard thing?" icon_state = "xenomeat" filling_color = "#43DE18" + bitesize = 3 New() ..() reagents.add_reagent("protein", 3) reagents.add_reagent("toxin", 3) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/spiderleg name = "spider leg" desc = "A still twitching leg of a giant spider... you don't really want to eat this, do you?" icon_state = "spiderleg" + bitesize = 2 + New() ..() reagents.add_reagent("protein", 2) reagents.add_reagent("toxin", 2) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/meatball name = "Meatball" desc = "A great meal all round." icon_state = "meatball" filling_color = "#DB0000" + bitesize = 2 + New() ..() reagents.add_reagent("protein", 3) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sausage name = "Sausage" desc = "A piece of mixed, long meat." icon_state = "sausage" filling_color = "#DB0000" + bitesize = 2 New() ..() reagents.add_reagent("protein", 6) reagents.add_reagent("porktonium", 10) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/donkpocket name = "Donk-pocket" @@ -814,23 +775,23 @@ desc = "A strange looking burger. It looks almost sentient." icon_state = "brainburger" filling_color = "#F2B6EA" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 6) reagents.add_reagent("prions", 10) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/ghostburger name = "Ghost Burger" desc = "Spooky! It doesn't look very filling." icon_state = "ghostburger" filling_color = "#FFF2FF" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 2) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/human @@ -842,15 +803,17 @@ name = "-burger" desc = "A bloody burger." icon_state = "hburger" + bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 6) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/cheeseburger name = "cheeseburger" desc = "The cheese adds a good flavor." icon_state = "cheeseburger" + New() ..() reagents.add_reagent("nutriment", 2) @@ -860,34 +823,34 @@ desc = "The cornerstone of every nutritious breakfast." icon_state = "hburger" filling_color = "#D63C3C" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 6) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/tofuburger name = "Tofu Burger" desc = "What.. is that meat?" icon_state = "tofuburger" filling_color = "#FFFEE0" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 6) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/roburger name = "roburger" desc = "The lettuce is the only organic component. Beep." icon_state = "roburger" filling_color = "#CCCCCC" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 2) reagents.add_reagent("nanomachines", 10) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/roburgerbig name = "roburger" @@ -895,28 +858,29 @@ icon_state = "roburger" filling_color = "#CCCCCC" volume = 100 + bitesize = 0.1 New() ..() reagents.add_reagent("nanomachines", 100) - bitesize = 0.1 /obj/item/weapon/reagent_containers/food/snacks/xenoburger name = "xenoburger" desc = "Smells caustic. Tastes like heresy." icon_state = "xburger" filling_color = "#43DE18" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 8) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/clownburger name = "Clown Burger" desc = "This tastes funny..." icon_state = "clownburger" filling_color = "#FF00FF" + bitesize = 2 New() ..() @@ -926,18 +890,17 @@ reagents.add_reagent("blood", 4, data) */ reagents.add_reagent("nutriment", 6) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/mimeburger name = "Mime Burger" desc = "Its taste defies language." icon_state = "mimeburger" filling_color = "#FFFFFF" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 6) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/omelette name = "Omelette Du Fromage" @@ -946,22 +909,20 @@ trash = /obj/item/trash/plate filling_color = "#FFF9A8" - //var/herp = 0 New() ..() reagents.add_reagent("nutriment", 8) - bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/muffin name = "Muffin" desc = "A delicious and spongy little cake" icon_state = "muffin" filling_color = "#E0CF9B" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 6) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/pie name = "Banana Cream Pie" @@ -969,12 +930,12 @@ icon_state = "pie" trash = /obj/item/trash/plate filling_color = "#FBFFB8" + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/pie/New() ..() reagents.add_reagent("nutriment", 4) reagents.add_reagent("banana",5) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/pie/throw_impact(atom/hit_atom) ..() @@ -987,11 +948,12 @@ desc = "No black birds, this is a good sign." icon_state = "berryclafoutis" trash = /obj/item/trash/plate + bitesize = 3 + New() ..() reagents.add_reagent("nutriment", 4) reagents.add_reagent("berryjuice", 5) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/waffles name = "waffles" @@ -999,11 +961,11 @@ icon_state = "waffles" trash = /obj/item/trash/waffles filling_color = "#E6DEB5" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 8) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/eggplantparm name = "Eggplant Parmigiana" @@ -1011,11 +973,11 @@ icon_state = "eggplantparm" trash = /obj/item/trash/plate filling_color = "#4D2F5E" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 6) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/soylentgreen name = "Soylent Green" @@ -1023,11 +985,11 @@ icon_state = "soylent_green" trash = /obj/item/trash/waffles filling_color = "#B8E6B5" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 10) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/soylenviridians name = "Soylen Virdians" @@ -1035,11 +997,11 @@ icon_state = "soylent_yellow" trash = /obj/item/trash/waffles filling_color = "#E6FA61" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 10) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/meatpie @@ -1048,11 +1010,11 @@ desc = "An old barber recipe, very delicious!" trash = /obj/item/trash/plate filling_color = "#948051" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 10) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/tofupie name = "Tofu-pie" @@ -1060,30 +1022,31 @@ desc = "A delicious tofu pie." trash = /obj/item/trash/plate filling_color = "#FFFEE0" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 10) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/amanita_pie name = "amanita pie" desc = "Sweet and tasty poison pie." icon_state = "amanita_pie" filling_color = "#FFCCCC" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 5) reagents.add_reagent("amanitin", 3) reagents.add_reagent("psilocybin", 1) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/plump_pie name = "plump pie" desc = "I bet you love stuff made out of plump helmets!" icon_state = "plump_pie" filling_color = "#B8279B" + bitesize = 2 New() ..() @@ -1092,10 +1055,8 @@ desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump pie!" reagents.add_reagent("nutriment", 8) reagents.add_reagent("omnizine", 5) - bitesize = 2 else reagents.add_reagent("nutriment", 8) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/xemeatpie name = "Xeno-pie" @@ -1103,11 +1064,11 @@ desc = "A delicious meatpie. Probably heretical." trash = /obj/item/trash/plate filling_color = "#43DE18" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 10) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/wingfangchu name = "Wing Fang Chu" @@ -1115,11 +1076,11 @@ icon_state = "wingfangchu" trash = /obj/item/trash/snack_bowl filling_color = "#43DE18" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 6) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/human/kabob @@ -1128,11 +1089,11 @@ desc = "A human meat, on a stick." trash = /obj/item/stack/rods filling_color = "#A85340" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 8) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/monkeykabob name = "Meat-kabob" @@ -1140,11 +1101,11 @@ desc = "Delicious meat, on a stick." trash = /obj/item/stack/rods filling_color = "#A85340" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 8) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/tofukabob name = "Tofu-kabob" @@ -1152,11 +1113,11 @@ desc = "Vegan meat, on a stick." trash = /obj/item/stack/rods filling_color = "#FFFEE0" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 8) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/popcorn name = "Popcorn" @@ -1165,12 +1126,13 @@ trash = /obj/item/trash/popcorn var/unpopped = 0 filling_color = "#FFFAD4" + bitesize = 0.1 //this snack is supposed to be eating during looooong time. And this it not dinner food! --rastaf0 New() ..() unpopped = rand(1,10) reagents.add_reagent("nutriment", 2) - bitesize = 0.1 //this snack is supposed to be eating during looooong time. And this it not dinner food! --rastaf0 + On_Consume(mob/M, mob/user) if(prob(unpopped)) //lol ...what's the point? to_chat(user, "\red You bite down on an un-popped kernel!") @@ -1184,11 +1146,11 @@ desc = "Beef jerky made from the finest space cows." trash = /obj/item/trash/sosjerky filling_color = "#631212" + bitesize = 2 New() ..() reagents.add_reagent("protein", 4) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/pistachios name = "Pistachios" @@ -1218,11 +1180,11 @@ icon_state = "space_twinkie" desc = "Guaranteed to survive longer then you will." filling_color = "#FFE591" + bitesize = 2 New() ..() reagents.add_reagent("sugar", 4) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers name = "Cheesie Honkers" @@ -1230,79 +1192,83 @@ desc = "Bite sized cheesie snacks that will honk all over your mouth" trash = /obj/item/trash/cheesie filling_color = "#FFA305" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 4) reagents.add_reagent("fake_cheese", 2) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/chinese/chowmein name = "chow mein" desc = "What is in this anyways?" icon_state = "chinese1" + bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 6) reagents.add_reagent("beans", 3) reagents.add_reagent("msg",4) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/chinese/tao name = "Admiral Yamamoto carp" desc = "Tastes like chicken." icon_state = "chinese2" + bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 4) reagents.add_reagent("protein", 2) reagents.add_reagent("msg",4) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/chinese/newdles name = "chinese newdles" desc = "Made fresh, weekly!" icon_state = "chinese3" + bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 6) reagents.add_reagent("msg",4) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/chinese/rice name = "fried rice" desc = "A timeless classic." icon_state = "chinese4" + bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 3) reagents.add_reagent("rice", 3) reagents.add_reagent("msg",4) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/syndicake name = "Syndi-Cakes" icon_state = "syndi_cakes" desc = "An extremely moist snack cake that tastes just as good after being nuked." filling_color = "#FF5D05" - trash = /obj/item/trash/syndi_cakes + bitesize = 3 + New() ..() reagents.add_reagent("nutriment", 4) reagents.add_reagent("salglu_solution", 5) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato name = "Loaded Baked Potato" desc = "Totally baked." icon_state = "loadedbakedpotato" filling_color = "#9C7A68" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 6) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/fries name = "Space Fries" @@ -1310,11 +1276,11 @@ icon_state = "fries" trash = /obj/item/trash/plate filling_color = "#EDDD00" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 4) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/soydope name = "Soy Dope" @@ -1322,11 +1288,11 @@ icon_state = "soydope" trash = /obj/item/trash/plate filling_color = "#C4BF76" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 2) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/spagetti name = "Spagetti" @@ -1337,7 +1303,6 @@ New() ..() reagents.add_reagent("nutriment", 1) - bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/cheesyfries name = "Cheesy Fries" @@ -1345,35 +1310,34 @@ icon_state = "cheesyfries" trash = /obj/item/trash/plate filling_color = "#EDDD00" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 6) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/fortunecookie name = "Fortune cookie" desc = "A true prophecy in each cookie!" icon_state = "fortune_cookie" filling_color = "#E8E79E" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 3) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/badrecipe name = "Burned mess" desc = "Someone should be demoted from chef for this." icon_state = "badrecipe" filling_color = "#211F02" + bitesize = 2 New() ..() reagents.add_reagent("????", 5) reagents.add_reagent("carbon", 3) - bitesize = 2 - // it's burned! it should start off being classed as any cooktype that burns cooktype["grilled"] = 1 cooktype["deep fried"] = 1 @@ -1384,13 +1348,13 @@ icon_state = "meatstake" trash = /obj/item/trash/plate filling_color = "#7A3D11" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 4) reagents.add_reagent("sodiumchloride", 1) reagents.add_reagent("blackpepper", 1) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff name = "Spacy Liberty Duff" @@ -1398,12 +1362,12 @@ icon_state = "spacylibertyduff" trash = /obj/item/trash/snack_bowl filling_color = "#42B873" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 6) reagents.add_reagent("psilocybin", 6) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/amanitajelly name = "Amanita Jelly" @@ -1411,13 +1375,13 @@ icon_state = "amanitajelly" trash = /obj/item/trash/snack_bowl filling_color = "#ED0758" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 6) reagents.add_reagent("amanitin", 6) reagents.add_reagent("psilocybin", 3) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/poppypretzel name = "Poppy pretzel" @@ -1429,7 +1393,6 @@ New() ..() reagents.add_reagent("nutriment", 5) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/meatballsoup @@ -1438,50 +1401,50 @@ icon_state = "meatballsoup" trash = /obj/item/trash/snack_bowl filling_color = "#785210" + bitesize = 5 New() ..() reagents.add_reagent("nutriment", 8) reagents.add_reagent("water", 5) - bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/slimesoup name = "slime soup" desc = "If no water is available, you may substitute tears." icon_state = "slimesoup" filling_color = "#C4DBA0" + bitesize = 5 New() ..() reagents.add_reagent("slimejelly", 5) reagents.add_reagent("water", 10) - bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/bloodsoup name = "Tomato soup" desc = "Smells like copper" icon_state = "tomatosoup" filling_color = "#FF0000" + bitesize = 5 New() ..() reagents.add_reagent("nutriment", 2) reagents.add_reagent("blood", 10) reagents.add_reagent("water", 5) - bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/clownstears name = "Clown's Tears" desc = "Not very funny." icon_state = "clownstears" filling_color = "#C4FBFF" + bitesize = 5 New() ..() reagents.add_reagent("nutriment", 4) reagents.add_reagent("banana", 5) reagents.add_reagent("water", 10) - bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/vegetablesoup name = "Vegetable soup" @@ -1489,12 +1452,12 @@ icon_state = "vegetablesoup" trash = /obj/item/trash/snack_bowl filling_color = "#AFC4B5" + bitesize = 5 New() ..() reagents.add_reagent("nutriment", 8) reagents.add_reagent("water", 5) - bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/nettlesoup name = "Nettle soup" @@ -1502,13 +1465,13 @@ icon_state = "nettlesoup" trash = /obj/item/trash/snack_bowl filling_color = "#AFC4B5" + bitesize = 5 New() ..() reagents.add_reagent("nutriment", 8) reagents.add_reagent("water", 5) reagents.add_reagent("omnizine", 5) - bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/mysterysoup name = "Mystery soup" @@ -1516,6 +1479,7 @@ icon_state = "mysterysoup" trash = /obj/item/trash/snack_bowl filling_color = "#F082FF" + bitesize = 5 New() ..() @@ -1555,7 +1519,6 @@ reagents.add_reagent("nutriment", 6) reagents.add_reagent("tomatojuice", 5) reagents.add_reagent("oculine", 5) - bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/wishsoup name = "Wish Soup" @@ -1563,11 +1526,11 @@ icon_state = "wishsoup" trash = /obj/item/trash/snack_bowl filling_color = "#D1F4FF" + bitesize = 5 New() ..() reagents.add_reagent("water", 10) - bitesize = 5 if(prob(25)) src.desc = "A wish come true!" reagents.add_reagent("nutriment", 8) @@ -1578,34 +1541,34 @@ icon_state = "hotchili" trash = /obj/item/trash/snack_bowl filling_color = "#FF3C00" + bitesize = 5 New() ..() reagents.add_reagent("nutriment", 6) reagents.add_reagent("capsaicin", 3) reagents.add_reagent("tomatojuice", 2) - bitesize = 5 - /obj/item/weapon/reagent_containers/food/snacks/coldchili name = "Cold Chili" desc = "This slush is barely a liquid!" icon_state = "coldchili" filling_color = "#2B00FF" - trash = /obj/item/trash/snack_bowl + bitesize = 5 + New() ..() reagents.add_reagent("nutriment", 6) reagents.add_reagent("frostoil", 3) reagents.add_reagent("tomatojuice", 2) - bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/raw_bacon name = "raw bacon" desc = "It's fleshy and pink!" icon_state = "raw_bacon" bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 1) @@ -1616,6 +1579,7 @@ desc = "It looks juicy and tastes amazing!" icon_state = "bacon2" bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 4) @@ -1629,11 +1593,13 @@ icon_state = "bacon" var/obj/item/device/radio/beacon/bacon/baconbeacon bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 4) reagents.add_reagent("porktonium", 10) baconbeacon = new /obj/item/device/radio/beacon/bacon(src) + On_Consume(mob/M, mob/user) if(!reagents.total_volume) baconbeacon.loc = user @@ -1737,22 +1703,22 @@ desc = "This is absolutely Ei Nath." icon_state = "spellburger" filling_color = "#D505FF" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 6) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/bigbiteburger name = "Big Bite Burger" desc = "Forget the Big Mac. THIS is the future!" icon_state = "bigbiteburger" filling_color = "#E3D681" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 14) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/enchiladas name = "Enchiladas" @@ -1760,12 +1726,12 @@ icon_state = "enchiladas" trash = /obj/item/trash/tray filling_color = "#A36A1F" + bitesize = 4 New() ..() reagents.add_reagent("nutriment",8) reagents.add_reagent("capsaicin", 6) - bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/burrito name = "Burrito" @@ -1796,6 +1762,7 @@ icon_state = "monkeysdelight" trash = /obj/item/trash/tray filling_color = "#5C3C11" + bitesize = 6 New() ..() @@ -1803,20 +1770,19 @@ reagents.add_reagent("banana", 5) reagents.add_reagent("blackpepper", 1) reagents.add_reagent("sodiumchloride", 1) - bitesize = 6 /obj/item/weapon/reagent_containers/food/snacks/baguette name = "Baguette" desc = "Bon appetit!" icon_state = "baguette" filling_color = "#E3D796" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 6) reagents.add_reagent("blackpepper", 1) reagents.add_reagent("sodiumchloride", 1) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/sandwich name = "Sandwich" @@ -1824,11 +1790,11 @@ icon_state = "sandwich" trash = /obj/item/trash/plate filling_color = "#D9BE29" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 6) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/toastedsandwich name = "Toasted Sandwich" @@ -1836,12 +1802,12 @@ icon_state = "toastedsandwich" trash = /obj/item/trash/plate filling_color = "#D9BE29" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 6) reagents.add_reagent("carbon", 2) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/grilledcheese name = "Grilled Cheese Sandwich" @@ -1849,11 +1815,11 @@ icon_state = "toastedsandwich" trash = /obj/item/trash/plate filling_color = "#D9BE29" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 7) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/tomatosoup name = "Tomato Soup" @@ -1861,12 +1827,12 @@ icon_state = "tomatosoup" trash = /obj/item/trash/snack_bowl filling_color = "#D92929" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 5) reagents.add_reagent("tomatojuice", 10) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/rofflewaffles name = "Roffle Waffles" @@ -1874,18 +1840,19 @@ icon_state = "rofflewaffles" trash = /obj/item/trash/waffles filling_color = "#FF00F7" + bitesize = 4 New() ..() reagents.add_reagent("nutriment", 8) reagents.add_reagent("psilocybin", 8) - bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/stew name = "Stew" desc = "A nice and warm stew. Healthy and strong." icon_state = "stew" filling_color = "#9E673A" + bitesize = 10 New() ..() @@ -1893,7 +1860,6 @@ reagents.add_reagent("tomatojuice", 5) reagents.add_reagent("oculine", 5) reagents.add_reagent("water", 5) - bitesize = 10 /obj/item/weapon/reagent_containers/food/snacks/jelliedtoast name = "Jellied Toast" @@ -1901,11 +1867,11 @@ icon_state = "jellytoast" trash = /obj/item/trash/plate filling_color = "#B572AB" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 1) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/cherry New() @@ -1922,11 +1888,11 @@ desc = "Culinary delight..?" icon_state = "jellyburger" filling_color = "#B572AB" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 5) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/jellyburger/slime New() @@ -1943,21 +1909,23 @@ desc = "The universes best soup! Yum!!!" icon_state = "milosoup" trash = /obj/item/trash/snack_bowl + bitesize = 4 + New() ..() reagents.add_reagent("nutriment", 8) reagents.add_reagent("water", 5) - bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat name = "Stewed Soy Meat" desc = "Even non-vegetarians will LOVE this!" icon_state = "stewedsoymeat" trash = /obj/item/trash/plate + bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 8) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/boiledspagetti name = "Boiled Spagetti" @@ -1965,11 +1933,11 @@ icon_state = "spagettiboiled" trash = /obj/item/trash/plate filling_color = "#FCEE81" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 2) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/boiledrice name = "Boiled Rice" @@ -1977,11 +1945,11 @@ icon_state = "boiledrice" trash = /obj/item/trash/snack_bowl filling_color = "#FFFBDB" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 2) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/ricepudding name = "Rice Pudding" @@ -1989,11 +1957,11 @@ icon_state = "rpudding" trash = /obj/item/trash/snack_bowl filling_color = "#FFFBDB" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 4) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/pastatomato name = "Spagetti" @@ -2001,12 +1969,12 @@ icon_state = "pastatomato" trash = /obj/item/trash/plate filling_color = "#DE4545" + bitesize = 4 New() ..() reagents.add_reagent("nutriment", 6) reagents.add_reagent("tomatojuice", 10) - bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/meatballspagetti name = "Spagetti & Meatballs" @@ -2014,35 +1982,35 @@ icon_state = "meatballspagetti" trash = /obj/item/trash/plate filling_color = "#DE4545" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 8) reagents.add_reagent("synaptizine", 5) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/spesslaw name = "Spesslaw" desc = "A lawyers favourite" icon_state = "spesslaw" filling_color = "#DE4545" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 8) reagents.add_reagent("synaptizine", 10) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/poppypretzel name = "Poppy Pretzel" desc = "A large soft pretzel full of POP!" icon_state = "poppypretzel" filling_color = "#AB7D2E" + bitesize = 2 New() ..() reagents.add_reagent("nutriment", 5) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/carrotfries name = "Carrot Fries" @@ -2050,68 +2018,67 @@ icon_state = "carrotfries" trash = /obj/item/trash/plate filling_color = "#FAA005" + bitesize = 2 New() ..() reagents.add_reagent("plantmatter", 3) reagents.add_reagent("oculine", 3) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/superbiteburger name = "Super Bite Burger" desc = "This is a mountain of a burger. FOOD!" icon_state = "superbiteburger" filling_color = "#CCA26A" + bitesize = 10 New() ..() reagents.add_reagent("nutriment", 50) - bitesize = 10 /obj/item/weapon/reagent_containers/food/snacks/candiedapple name = "Candied Apple" desc = "An apple coated in sugary sweetness." icon_state = "candiedapple" filling_color = "#F21873" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 3) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/applepie name = "Apple Pie" desc = "A pie containing sweet sweet love... or apple." icon_state = "applepie" filling_color = "#E0EDC5" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 4) - bitesize = 3 - /obj/item/weapon/reagent_containers/food/snacks/cherrypie name = "Cherry Pie" desc = "Taste so good, make a grown man cry." icon_state = "cherrypie" filling_color = "#FF525A" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 4) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/twobread name = "Two Bread" desc = "It is very bitter and winy." icon_state = "twobread" filling_color = "#DBCC9A" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/jellysandwich name = "Jelly Sandwich" @@ -2119,11 +2086,11 @@ icon_state = "jellysandwich" trash = /obj/item/trash/plate filling_color = "#9E3A78" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/slime New() @@ -2139,10 +2106,11 @@ name = "Boiled Slime Core" desc = "A boiled red thing." icon_state = "boiledrorocore" + bitesize = 3 + New() ..() reagents.add_reagent("slimejelly", 5) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/mint name = "mint" @@ -2153,7 +2121,6 @@ New() ..() reagents.add_reagent("minttoxin", 1) - bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/mushroomsoup name = "chantrelle soup" @@ -2161,17 +2128,18 @@ icon_state = "mushroomsoup" trash = /obj/item/trash/snack_bowl filling_color = "#E386BF" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 8) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit name = "plump helmet biscuit" desc = "This is a finely-prepared plump helmet biscuit. The ingredients are exceptionally minced plump helmet, and well-minced dwarven wheat flour." icon_state = "phelmbiscuit" filling_color = "#CFB4C4" + bitesize = 2 New() ..() @@ -2180,10 +2148,8 @@ desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!" reagents.add_reagent("nutriment", 8) reagents.add_reagent("omnizine", 5) - bitesize = 2 else reagents.add_reagent("nutriment", 5) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/chawanmushi name = "chawanmushi" @@ -2195,7 +2161,6 @@ New() ..() reagents.add_reagent("nutriment", 5) - bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/beetsoup name = "beet soup" @@ -2203,6 +2168,7 @@ icon_state = "beetsoup" trash = /obj/item/trash/snack_bowl filling_color = "#FAC9FF" + bitesize = 2 New() ..() @@ -2220,7 +2186,6 @@ if(6) name = "borscht" reagents.add_reagent("nutriment", 8) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/herbsalad name = "herb salad" @@ -2228,11 +2193,11 @@ icon_state = "herbsalad" trash = /obj/item/trash/snack_bowl filling_color = "#76B87F" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 8) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/validsalad name = "valid salad" @@ -2240,12 +2205,12 @@ icon_state = "validsalad" trash = /obj/item/trash/snack_bowl filling_color = "#76B87F" + bitesize = 3 New() ..() reagents.add_reagent("nutriment", 8) reagents.add_reagent("omnizine", 5) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/appletart name = "golden apple streusel tart" @@ -2253,6 +2218,7 @@ icon_state = "gappletart" trash = /obj/item/trash/plate filling_color = "#FFFF00" + bitesize = 3 New() ..() @@ -2261,17 +2227,17 @@ spawn(1) reagents.del_reagent("egg") reagents.update_total() - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/dough_ball name = "ball of raw dough" desc = "A ball of raw dough, ready to be molded into new recipes." icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "dough" + New() ..() reagents.add_reagent("nutriment", 3) - bitesize = 1 + attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W,/obj/item/weapon/kitchen/rollingpin)) user.visible_message( \ @@ -2293,10 +2259,10 @@ icon_state = "flatdough" slice_path = /obj/item/weapon/reagent_containers/food/snacks/doughslice slices_num = 3 + New() ..() reagents.add_reagent("nutriment", 3) - bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/doughslice name = "slice of dough" @@ -2312,11 +2278,12 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice slices_num = 5 filling_color = "#FF7575" + bitesize = 2 + New() ..() reagents.add_reagent("protein", 20) reagents.add_reagent("nutriment", 10) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice name = "meatbread slice" @@ -2333,11 +2300,12 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice slices_num = 5 filling_color = "#8AFF75" + bitesize = 2 + New() ..() reagents.add_reagent("protein", 20) reagents.add_reagent("nutriment", 10) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice name = "xenomeatbread slice" @@ -2353,12 +2321,13 @@ icon_state = "spidermeatbread" slice_path = /obj/item/weapon/reagent_containers/food/snacks/spidermeatbreadslice slices_num = 5 + bitesize = 2 + New() ..() reagents.add_reagent("protein", 20) reagents.add_reagent("nutriment", 10) reagents.add_reagent("toxin", 15) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/spidermeatbreadslice name = "spider meat bread slice" @@ -2366,6 +2335,7 @@ icon_state = "xenobreadslice" trash = /obj/item/trash/plate bitesize = 2 + New() ..() reagents.add_reagent("toxin", 2) @@ -2377,11 +2347,12 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/bananabreadslice slices_num = 5 filling_color = "#EDE5AD" + bitesize = 2 + New() ..() reagents.add_reagent("banana", 20) reagents.add_reagent("nutriment", 20) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/bananabreadslice name = "Banana-nut bread slice" @@ -2398,10 +2369,11 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice slices_num = 5 filling_color = "#F7FFE0" + bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 30) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice name = "Tofubread slice" @@ -2419,11 +2391,12 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice slices_num = 5 filling_color = "#FFD675" + bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 25) reagents.add_reagent("oculine", 10) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice name = "Carrot Cake slice" @@ -2440,12 +2413,13 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/braincakeslice slices_num = 5 filling_color = "#E6AEDB" + bitesize = 2 + New() ..() reagents.add_reagent("protein", 15) reagents.add_reagent("nutriment", 10) reagents.add_reagent("mannitol", 10) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/braincakeslice name = "Brain Cake slice" @@ -2462,10 +2436,11 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice slices_num = 5 filling_color = "#FAF7AF" + bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 25) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice name = "Cheese Cake slice" @@ -2482,6 +2457,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/plaincakeslice slices_num = 5 filling_color = "#F7EDD5" + New() ..() reagents.add_reagent("nutriment", 20) @@ -2501,6 +2477,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/orangecakeslice slices_num = 5 filling_color = "#FADA8E" + New() ..() reagents.add_reagent("nutriment", 20) @@ -2520,6 +2497,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/limecakeslice slices_num = 5 filling_color = "#CBFA8E" + New() ..() reagents.add_reagent("nutriment", 20) @@ -2539,6 +2517,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice slices_num = 5 filling_color = "#FAFA8E" + New() ..() reagents.add_reagent("nutriment", 20) @@ -2558,6 +2537,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice slices_num = 5 filling_color = "#805930" + New() ..() reagents.add_reagent("nutriment", 20) @@ -2578,11 +2558,12 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/cheesewedge slices_num = 5 filling_color = "#FFF700" + bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 20) reagents.add_reagent("cheese", 20) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/cheesewedge name = "Cheese wedge" @@ -2597,6 +2578,7 @@ icon_state = "weirdcheesewedge" filling_color = "#00FF33" bitesize = 2 + New() ..() reagents.add_reagent("mercury", 5) @@ -2611,11 +2593,12 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice slices_num = 5 filling_color = "#FFD6D6" + bitesize = 3 + New() ..() reagents.add_reagent("nutriment", 20) reagents.add_reagent("sprinkles", 10) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice name = "Birthday Cake slice" @@ -2632,6 +2615,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/breadslice slices_num = 6 filling_color = "#FFE396" + bitesize = 2 New() ..() @@ -2639,7 +2623,6 @@ spawn(1) reagents.del_reagent("egg") reagents.update_total() - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/breadslice name = "Bread slice" @@ -2660,10 +2643,11 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice slices_num = 5 filling_color = "#FFF896" + bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 20) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice name = "Cream Cheese Bread slice" @@ -2689,6 +2673,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/applecakeslice slices_num = 5 filling_color = "#EBF5B8" + New() ..() reagents.add_reagent("nutriment", 15) @@ -2737,9 +2722,11 @@ icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "rawcutlet" bitesize = 1 + New() ..() reagents.add_reagent("protein", 1) + attackby(obj/item/weapon/W, mob/user, params) if(istype(W,/obj/item/weapon/kitchen/knife)) user.visible_message( \ @@ -2762,11 +2749,12 @@ icon_state = "pizzamargherita" slice_path = /obj/item/weapon/reagent_containers/food/snacks/margheritaslice slices_num = 6 + bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 40) reagents.add_reagent("tomatojuice", 6) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/margheritaslice name = "Margherita slice" @@ -2781,12 +2769,13 @@ icon_state = "meatpizza" slice_path = /obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice slices_num = 6 + bitesize = 2 + New() ..() reagents.add_reagent("protein", 30) reagents.add_reagent("nutriment", 20) reagents.add_reagent("tomatojuice", 6) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice name = "Meatpizza slice" @@ -2801,11 +2790,12 @@ icon_state = "mushroompizza" slice_path = /obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice slices_num = 6 + bitesize = 2 + New() ..() reagents.add_reagent("plantmatter", 25) reagents.add_reagent("nutriment", 10) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice name = "Mushroompizza slice" @@ -2820,13 +2810,14 @@ icon_state = "vegetablepizza" slice_path = /obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice slices_num = 6 + bitesize = 2 + New() ..() reagents.add_reagent("plantmatter", 20) reagents.add_reagent("nutriment", 10) reagents.add_reagent("tomatojuice", 6) reagents.add_reagent("oculine", 12) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice name = "Vegetable pizza slice" @@ -3017,73 +3008,82 @@ name = "egg wrap" desc = "The precursor to Pigs in a Blanket." icon_state = "wrap" + bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 5) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/beans name = "tin of beans" desc = "Musical fruit in a slightly less musical container." icon_state = "beans" + bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 10) reagents.add_reagent("beans",10) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/benedict name = "eggs benedict" desc = "There is only one egg on this, how rude." icon_state = "benedict" + bitesize = 3 + New() ..() reagents.add_reagent("nutriment", 3) reagents.add_reagent("egg", 3) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/hotdog name = "hotdog" desc = "Fresh footlong ready to go down on." icon_state = "hotdog" + bitesize = 3 + New() ..() reagents.add_reagent("nutriment", 3) reagents.add_reagent("ketchup", 3) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/meatbun name = "meat bun" desc = "Has the potential to not be Dog." icon_state = "meatbun" + bitesize = 6 + New() ..() reagents.add_reagent("nutriment", 6) - bitesize = 6 /obj/item/weapon/reagent_containers/food/snacks/icecreamsandwich name = "icecream sandwich" desc = "Portable Ice-cream in it's own packaging." icon_state = "icecreamsandwich" + bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 2) reagents.add_reagent("ice", 2) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/notasandwich name = "not-a-sandwich" desc = "Something seems to be wrong with this, you can't quite figure what. Maybe it's his moustache." icon_state = "notasandwich" + bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 6) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sugarcookie name = "sugar cookie" desc = "Just like your little sister used to make." icon_state = "sugarcookie" + bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 2) @@ -3091,12 +3091,12 @@ spawn(1) reagents.del_reagent("egg") reagents.update_total() - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/friedbanana name = "Fried Banana" desc = "Goreng Pisang, also known as fried bananas." icon_state = "friedbanana" + New() ..() reagents.add_reagent("sugar", 5) @@ -3107,20 +3107,21 @@ name = "Tofurkey" desc = "A fake turkey made from tofu." icon_state = "tofurkey" + bitesize = 3 + New() ..() reagents.add_reagent("nutriment", 12) reagents.add_reagent("ether", 3) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/stuffing name = "Stuffing" desc = "Moist, peppery breadcrumbs for filling the body cavities of dead birds. Dig in!" icon_state = "stuffing" + New() ..() reagents.add_reagent("nutriment", 3) - bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/dionaroast name = "roast diona" @@ -3128,46 +3129,49 @@ icon_state = "dionaroast" trash = /obj/item/trash/plate filling_color = "#75754B" + bitesize = 2 New() ..() reagents.add_reagent("plantmatter", 4) reagents.add_reagent("nutriment", 2) reagents.add_reagent("radium", 2) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/boiledspiderleg name = "boiled spider leg" desc = "A giant spider's leg that's still twitching after being cooked. Gross!" icon_state = "spiderlegcooked" trash = /obj/item/trash/plate + bitesize = 3 + New() ..() reagents.add_reagent("nutriment", 3) reagents.add_reagent("toxin", 2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/spidereggs name = "spider eggs" desc = "A cluster of juicy spider eggs. A great side dish for when you care not for your health." icon_state = "spidereggs" + bitesize = 2 + New() ..() reagents.add_reagent("protein", 2) reagents.add_reagent("toxin", 3) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/spidereggsham name = "green eggs and ham" desc = "Would you eat them on a train? Would you eat them on a plane? Would you eat them on a state of the art corporate deathtrap floating through space?" icon_state = "spidereggsham" trash = /obj/item/trash/plate + bitesize = 4 + New() ..() reagents.add_reagent("nutriment", 6) reagents.add_reagent("sodiumchloride", 1) reagents.add_reagent("toxin", 3) - bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/sliceable/turkey name = "Turkey" @@ -3175,11 +3179,12 @@ icon_state = "turkey" slice_path = /obj/item/weapon/reagent_containers/food/snacks/turkeyslice slices_num = 6 + bitesize = 2 + New() ..() reagents.add_reagent("protein", 24) reagents.add_reagent("nutriment", 18) - bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/turkeyslice name = "turkey serving" @@ -3202,7 +3207,6 @@ reagents.add_reagent("nutriment", 5) reagents.add_reagent("gravy", 5) reagents.add_reagent("mashedpotatoes", 10) - bitesize = 2 ////////////////////////////////ICE CREAM/////////////////////////////////// /obj/item/weapon/reagent_containers/food/snacks/icecream @@ -3210,11 +3214,11 @@ desc = "Delicious ice cream." icon = 'icons/obj/kitchen.dmi' icon_state = "icecream_cone" + New() ..() reagents.add_reagent("nutriment", 1) reagents.add_reagent("sugar",1) - bitesize = 1 update_icon() update_icon() @@ -3228,24 +3232,26 @@ desc = "Delicious ice cream." icon_state = "icecream_cone" volume = 50 + bitesize = 3 + New() ..() reagents.add_reagent("nutriment", 2) reagents.add_reagent("sugar",6) reagents.add_reagent("ice",2) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/icecream/icecreamcup name = "chocolate ice cream cone" desc = "Delicious ice cream." icon_state = "icecream_cup" volume = 50 + bitesize = 6 + New() ..() reagents.add_reagent("nutriment", 4) reagents.add_reagent("chocolate",8) reagents.add_reagent("ice",2) - bitesize = 6 /obj/item/weapon/reagent_containers/food/snacks/cereal name = "box of cereal" @@ -3253,15 +3259,18 @@ icon = 'icons/obj/food/food.dmi' icon_state = "cereal_box" bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 3) + /obj/item/weapon/reagent_containers/food/snacks/deepfryholder name = "Deep Fried Foods Holder Obj" desc = "If you can see this description the code for the deep fryer fucked up." icon = 'icons/obj/food/food.dmi' icon_state = "deepfried_holder_icon" bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 3) @@ -3272,6 +3281,7 @@ icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "dough" bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 3) @@ -3296,6 +3306,7 @@ icon_state = "flat dough" slice_path = /obj/item/weapon/reagent_containers/food/snacks/doughslice slices_num = 3 + New() ..() reagents.add_reagent("nutriment", 3) @@ -3306,6 +3317,7 @@ icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "doughslice" bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 1) @@ -3315,17 +3327,18 @@ desc = "The base for any self-respecting burger." icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "bun" - bitesize = 2 + bitesize = 3 + New() ..() reagents.add_reagent("nutriment", 4) - bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/taco name = "taco" desc = "Take a bite!" icon_state = "taco" bitesize = 3 + New() ..() reagents.add_reagent("nutriment", 7) @@ -3336,6 +3349,7 @@ icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "cutlet" bitesize = 2 + New() ..() reagents.add_reagent("protein", 2) @@ -3346,6 +3360,7 @@ icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "rawmeatball" bitesize = 2 + New() ..() reagents.add_reagent("protein", 2) @@ -3355,6 +3370,7 @@ desc = "Unrelated to dogs, maybe." icon_state = "hotdog" bitesize = 2 + New() ..() reagents.add_reagent("protein", 6) @@ -3365,6 +3381,7 @@ icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "flatbread" bitesize = 2 + New() ..() reagents.add_reagent("nutriment", 3) @@ -3375,6 +3392,7 @@ icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "rawsticks" bitesize = 2 + New() ..() reagents.add_reagent("plantmatter", 3) @@ -3384,6 +3402,7 @@ desc = "A luminescent blob of what scientists refer to as 'ghost goo'." icon = 'icons/obj/wizard.dmi' icon_state = "ectoplasm" + New() ..() reagents.add_reagent("ectoplasm", 10) @@ -3394,12 +3413,12 @@ icon_state = "liquidfood" trash = /obj/item/trash/liquidfood filling_color = "#A8A8A8" + bitesize = 4 New() ..() reagents.add_reagent("nutriment", 20) reagents.add_reagent("iron", 3) - bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/tastybread @@ -3408,8 +3427,8 @@ icon_state = "tastybread" trash = /obj/item/trash/tastybread filling_color = "#A66829" + bitesize = 2 New() ..() - reagents.add_reagent("nutriment", 6) - bitesize = 2 + reagents.add_reagent("nutriment", 6) \ No newline at end of file From 6a7f7394a807cd8a028d5bb2a1608927c8e4474f Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Thu, 1 Sep 2016 14:58:45 -0700 Subject: [PATCH 07/30] Ports over the status effect unification --- code/__HELPERS/maths.dm | 15 + code/_onclick/click.dm | 2 +- code/_onclick/cyborg.dm | 2 +- .../diseases/advance/symptoms/confusion.dm | 2 +- .../diseases/advance/symptoms/deafness.dm | 8 +- .../diseases/advance/symptoms/hallucigen.dm | 2 +- code/datums/diseases/anxiety.dm | 8 +- code/datums/diseases/transformation.dm | 4 +- code/datums/diseases/tuberculosis.dm | 3 +- code/datums/diseases/vampire.dm | 6 +- code/datums/spells/cluwne.dm | 6 +- code/datums/spells/inflict_handler.dm | 6 +- code/defines/procs/announce.dm | 8 +- code/game/dna/dna_modifier.dm | 6 +- code/game/dna/genes/disabilities.dm | 6 +- .../gamemodes/changeling/powers/headcrab.dm | 6 +- .../gamemodes/changeling/powers/revive.dm | 10 +- .../gamemodes/changeling/powers/shriek.dm | 6 +- .../gamemodes/changeling/powers/tiny_prick.dm | 12 +- code/game/gamemodes/cult/runes.dm | 18 +- .../miniantags/abduction/abduction_gear.dm | 2 +- .../gamemodes/miniantags/abduction/gland.dm | 2 +- .../miniantags/revenant/revenant_abilities.dm | 4 +- code/game/gamemodes/revolution/revolution.dm | 2 +- .../shadowling/shadowling_abilities.dm | 10 +- code/game/gamemodes/vampire/vampire_powers.dm | 4 +- code/game/gamemodes/wizard/artefact.dm | 2 +- code/game/gamemodes/wizard/spellbook.dm | 2 +- code/game/machinery/Sleeper.dm | 4 +- code/game/machinery/computer/arcade.dm | 2 +- .../machinery/computer/camera_advanced.dm | 4 +- code/game/machinery/cryo.dm | 10 +- code/game/machinery/cryopod.dm | 2 +- code/game/machinery/poolcontroller.dm | 6 +- code/game/mecha/equipment/weapons/weapons.dm | 6 +- code/game/objects/effects/effect_system.dm | 4 +- code/game/objects/explosion.dm | 9 +- code/game/objects/items.dm | 6 +- code/game/objects/items/crayons.dm | 8 +- code/game/objects/items/devices/camera_bug.dm | 2 +- code/game/objects/items/devices/flash.dm | 4 +- code/game/objects/items/weapons/garrote.dm | 6 +- .../items/weapons/grenades/flashbang.dm | 7 +- code/game/objects/items/weapons/scissors.dm | 2 +- .../items/weapons/storage/artistic_toolbox.dm | 6 +- .../objects/items/weapons/storage/bags.dm | 2 +- code/game/objects/structures/watercloset.dm | 4 +- code/game/sound.dm | 2 +- code/modules/admin/verbs/freeze.dm | 4 +- code/modules/clothing/glasses/glasses.dm | 11 +- code/modules/customitems/item_defines.dm | 2 +- code/modules/events/mass_hallucination.dm | 4 +- code/modules/flufftext/Hallucination.dm | 10 +- code/modules/hydroponics/grown_inedible.dm | 2 +- code/modules/martial_arts/krav_maga.dm | 6 +- code/modules/martial_arts/sleeping_carp.dm | 2 +- code/modules/mob/hear_say.dm | 8 +- code/modules/mob/language.dm | 2 +- .../mob/living/carbon/alien/alien_defenses.dm | 2 +- .../living/carbon/alien/humanoid/humanoid.dm | 8 +- .../mob/living/carbon/alien/humanoid/life.dm | 25 +- .../mob/living/carbon/alien/larva/larva.dm | 6 +- .../mob/living/carbon/alien/larva/life.dm | 26 +- code/modules/mob/living/carbon/brain/brain.dm | 6 +- .../mob/living/carbon/brain/brain_item.dm | 3 +- code/modules/mob/living/carbon/brain/life.dm | 6 +- code/modules/mob/living/carbon/brain/login.dm | 2 +- .../mob/living/carbon/brain/posibrain.dm | 2 +- code/modules/mob/living/carbon/carbon.dm | 12 +- code/modules/mob/living/carbon/death.dm | 4 +- code/modules/mob/living/carbon/human/death.dm | 4 +- code/modules/mob/living/carbon/human/emote.dm | 6 +- code/modules/mob/living/carbon/human/human.dm | 13 +- .../mob/living/carbon/human/human_defense.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 85 ++- .../living/carbon/human/species/plasmaman.dm | 2 +- .../living/carbon/human/species/species.dm | 4 +- code/modules/mob/living/carbon/life.dm | 31 +- code/modules/mob/living/carbon/slime/life.dm | 12 +- code/modules/mob/living/damage_procs.dm | 11 +- code/modules/mob/living/life.dm | 19 +- code/modules/mob/living/living.dm | 51 +- code/modules/mob/living/living_defines.dm | 3 - code/modules/mob/living/logout.dm | 6 +- code/modules/mob/living/silicon/ai/say.dm | 2 +- code/modules/mob/living/silicon/login.dm | 4 +- code/modules/mob/living/silicon/robot/life.dm | 6 +- code/modules/mob/living/silicon/silicon.dm | 8 +- .../living/simple_animal/hostile/statue.dm | 6 +- .../mob/living/simple_animal/simple_animal.dm | 6 +- code/modules/mob/living/status_procs.dm | 522 ++++++++++++++++++ code/modules/mob/living/update_status.dm | 97 ++++ code/modules/mob/mob.dm | 123 +---- code/modules/mob/mob_defines.dm | 20 - code/modules/mob/mob_grab.dm | 6 +- code/modules/mob/mob_helpers.dm | 6 - code/modules/mob/mob_movement.dm | 2 +- code/modules/mob/new_player/new_player.dm | 4 + code/modules/mob/say.dm | 2 +- code/modules/mob/status_procs.dm | 202 +++++++ code/modules/mob/update_status.dm | 65 +++ code/modules/nano/interaction/base.dm | 4 +- code/modules/power/supermatter/supermatter.dm | 4 +- code/modules/power/treadmill.dm | 2 +- .../modules/projectiles/projectile/bullets.dm | 22 +- .../modules/projectiles/projectile/special.dm | 2 +- .../modules/reagents/newchem/Blob-Reagents.dm | 2 +- code/modules/reagents/newchem/disease.dm | 6 +- code/modules/reagents/newchem/drinks.dm | 2 +- code/modules/reagents/newchem/drugs.dm | 44 +- code/modules/reagents/newchem/medicine.dm | 81 ++- code/modules/reagents/newchem/pyro.dm | 14 +- code/modules/reagents/newchem/toxins.dm | 80 +-- .../reagents/drink/reagents_alcohol.dm | 31 +- .../oldchem/reagents/drink/reagents_drink.dm | 6 +- .../reagents/drink/reagents_drink_base.dm | 6 +- .../reagents/drink/reagents_drink_cold.dm | 8 +- .../oldchem/reagents/reagents_admin.dm | 31 +- .../oldchem/reagents/reagents_drugs.dm | 26 +- .../oldchem/reagents/reagents_flammable.dm | 4 +- .../oldchem/reagents/reagents_food.dm | 5 +- .../reagents/oldchem/reagents/reagents_med.dm | 4 +- .../oldchem/reagents/reagents_toxin.dm | 18 +- .../oldchem/reagents/reagents_water.dm | 18 +- .../effects/unknown_effect_badfeeling.dm | 8 +- .../effects/unknown_effect_goodfeeling.dm | 8 +- .../artifact/effects/unknown_effect_sleepy.dm | 12 +- .../xenoarchaeology/finds/finds_special.dm | 2 +- code/modules/surgery/face.dm | 4 +- code/modules/surgery/organs/blood.dm | 2 +- code/modules/surgery/organs/organ_internal.dm | 19 +- code/modules/surgery/organs/pain.dm | 6 +- code/modules/surgery/organs/subtypes/diona.dm | 8 +- .../surgery/organs/subtypes/machine.dm | 8 +- paradise.dme | 4 + 135 files changed, 1501 insertions(+), 743 deletions(-) create mode 100644 code/modules/mob/living/status_procs.dm create mode 100644 code/modules/mob/living/update_status.dm create mode 100644 code/modules/mob/status_procs.dm create mode 100644 code/modules/mob/update_status.dm diff --git a/code/__HELPERS/maths.dm b/code/__HELPERS/maths.dm index 114588009ed..986cbac0bd3 100644 --- a/code/__HELPERS/maths.dm +++ b/code/__HELPERS/maths.dm @@ -85,3 +85,18 @@ var/gaussian_next gaussian_next = R2 * working return (mean + stddev * R1) #undef ACCURACY + + + +// oof, what a mouthful +// Used in status_procs' "adjust" to let them modify a status effect by a given +// amount, without inadverdently increasing it in the wrong direction +/proc/directional_bounded_sum(orig_val, modifier, bound_lower, bound_upper) + var/new_val = orig_val + modifier + if(modifier > 0) + if(new_val > bound_upper) + new_val = max(orig_val, bound_upper) + else if(modifier < 0) + if(new_val < bound_lower) + new_val = min(orig_val, bound_lower) + return new_val diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index a476fbc78d5..66377ec3fcd 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -62,7 +62,7 @@ CtrlClickOn(A) return - if(stat || paralysis || stunned || weakened) + if(incapacitated(ignore_restraints = 1, ignore_grab = 1, ignore_lying = 1)) return face_atom(A) diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index 1f60c26f885..a15176af87c 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -39,7 +39,7 @@ CtrlClickOn(A) return - if(stat || lockcharge || weakened || stunned || paralysis) + if(incapacitated()) return if(next_move >= world.time) diff --git a/code/datums/diseases/advance/symptoms/confusion.dm b/code/datums/diseases/advance/symptoms/confusion.dm index 8f388c45edc..9e806b24f41 100644 --- a/code/datums/diseases/advance/symptoms/confusion.dm +++ b/code/datums/diseases/advance/symptoms/confusion.dm @@ -35,6 +35,6 @@ Bonus to_chat(M, "[pick("Your head hurts.", "Your mind blanks for a moment.")]") else to_chat(M, "You can't think straight!") - M.confused = min(100, M.confused + 8) + M.AdjustConfused(8, bound_lower = 0, bound_upper = 100) return diff --git a/code/datums/diseases/advance/symptoms/deafness.dm b/code/datums/diseases/advance/symptoms/deafness.dm index 6c65e330fa8..1a9bba6961e 100644 --- a/code/datums/diseases/advance/symptoms/deafness.dm +++ b/code/datums/diseases/advance/symptoms/deafness.dm @@ -33,11 +33,11 @@ Bonus if(3, 4) to_chat(M, "[pick("You hear a ringing in your ear.", "Your ears pop.")]") if(5) - if(!(M.ear_deaf)) + if(!(M.disabilities & DEAF)) to_chat(M, "Your ears pop and begin ringing loudly!") - M.setEarDamage(-1,INFINITY) //Shall be enough + M.BecomeDeaf() spawn(200) if(M) to_chat(M, "The ringing in your ears fades...") - M.setEarDamage(-1,0) - return \ No newline at end of file + M.CureDeaf() + return diff --git a/code/datums/diseases/advance/symptoms/hallucigen.dm b/code/datums/diseases/advance/symptoms/hallucigen.dm index cac8b4d2e03..e117dbf51f8 100644 --- a/code/datums/diseases/advance/symptoms/hallucigen.dm +++ b/code/datums/diseases/advance/symptoms/hallucigen.dm @@ -36,6 +36,6 @@ Bonus to_chat(M, "[pick("Something is following you.", "You are being watched.", "You hear a whisper in your ear.", "Thumping footsteps slam toward you from nowhere.")]") else to_chat(M, "[pick("Oh, your head...", "Your head pounds.", "They're everywhere! Run!", "Something in the shadows...")]") - M.hallucination += 5 + M.AdjustHallucinate(5) return diff --git a/code/datums/diseases/anxiety.dm b/code/datums/diseases/anxiety.dm index 150b7483aaa..4d9716e44da 100644 --- a/code/datums/diseases/anxiety.dm +++ b/code/datums/diseases/anxiety.dm @@ -24,18 +24,18 @@ to_chat(affected_mob, "You feel panicky.") if(prob(2)) to_chat(affected_mob, "You're overtaken with panic!") - affected_mob.confused += (rand(2,3)) + affected_mob.AdjustConfused(rand(2,3)) if(4) if(prob(10)) to_chat(affected_mob, "You feel butterflies in your stomach.") if(prob(5)) affected_mob.visible_message("[affected_mob] stumbles around in a panic.", \ "You have a panic attack!") - affected_mob.confused += (rand(6,8)) - affected_mob.jitteriness += (rand(6,8)) + affected_mob.AdjustConfused(rand(6,8)) + affected_mob.AdjustJitter(rand(6,8)) if(prob(2)) affected_mob.visible_message("[affected_mob] coughs up butterflies!", \ "You cough up butterflies!") new /mob/living/simple_animal/butterfly(affected_mob.loc) new /mob/living/simple_animal/butterfly(affected_mob.loc) - return \ No newline at end of file + return diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm index 7f04eb5fc56..e3482955865 100644 --- a/code/datums/diseases/transformation.dm +++ b/code/datums/diseases/transformation.dm @@ -106,7 +106,7 @@ if(3) if(prob(4)) to_chat(affected_mob, "You feel a stabbing pain in your head.") - affected_mob.confused += 10 + affected_mob.AdjustConfused(10) if(4) if(prob(3)) affected_mob.say(pick("Eeek, ook ook!", "Eee-eeek!", "Eeee!", "Ungh, ungh.")) @@ -241,4 +241,4 @@ stage3 = list("Your appendages are melting away.", "Your limbs begin to lose their shape.") stage4 = list("You're ravenous.") stage5 = list("You have become a morph.") - new_form = /mob/living/simple_animal/hostile/morph \ No newline at end of file + new_form = /mob/living/simple_animal/hostile/morph diff --git a/code/datums/diseases/tuberculosis.dm b/code/datums/diseases/tuberculosis.dm index 11c06e386c5..4cd027a7d7d 100644 --- a/code/datums/diseases/tuberculosis.dm +++ b/code/datums/diseases/tuberculosis.dm @@ -44,7 +44,7 @@ affected_mob.AdjustSleeping(5) if(prob(2)) to_chat(affected_mob, "You feel your mind relax and your thoughts drift!") - affected_mob.confused = min(100, affected_mob.confused + 8) + affected_mob.AdjustConfused(8, bound_lower = 0, bound_upper = 100) if(prob(10)) affected_mob.vomit(20) if(prob(3)) @@ -55,4 +55,3 @@ to_chat(affected_mob, "[pick("You feel uncomfortably hot...", "You feel like unzipping your jumpsuit", "You feel like taking off some clothes...")]") affected_mob.bodytemperature += 40 return - diff --git a/code/datums/diseases/vampire.dm b/code/datums/diseases/vampire.dm index dbcc9bbb3c0..16706087673 100644 --- a/code/datums/diseases/vampire.dm +++ b/code/datums/diseases/vampire.dm @@ -20,15 +20,15 @@ if(prob(10)) affected_mob.emote(pick("cough","groan", "gasp")) - affected_mob.losebreath++ + affected_mob.AdjustLoseBreath(1) if(prob(15)) if(prob(33)) to_chat(affected_mob, "You feel sickly and weak.") - affected_mob.slowed += 3 + affected_mob.AdjustSlowed(3) affected_mob.adjustToxLoss(toxdamage) if(prob(5)) to_chat(affected_mob, "Your joints ache horribly!") affected_mob.Weaken(stuntime) - affected_mob.Stun(stuntime) \ No newline at end of file + affected_mob.Stun(stuntime) diff --git a/code/datums/spells/cluwne.dm b/code/datums/spells/cluwne.dm index d4d3b383f9d..fe0e02bda6d 100644 --- a/code/datums/spells/cluwne.dm +++ b/code/datums/spells/cluwne.dm @@ -16,7 +16,7 @@ adjustBrainLoss(80) nutrition = 9000 overeatduration = 9000 - confused = 30 + Confused(30) if(mind) mind.assigned_role = "Cluwne" @@ -44,8 +44,8 @@ adjustBrainLoss(-120) nutrition = NUTRITION_LEVEL_STARVING overeatduration = 0 - confused = 0 - jitteriness = 0 + SetConfused(0) + SetJitter(0) if(mind) mind.assigned_role = "Lawyer" diff --git a/code/datums/spells/inflict_handler.dm b/code/datums/spells/inflict_handler.dm index 9ddac0b0920..1eed65bbed4 100644 --- a/code/datums/spells/inflict_handler.dm +++ b/code/datums/spells/inflict_handler.dm @@ -50,8 +50,8 @@ target.Paralyse(amt_paralysis) target.Stun(amt_stunned) - target.eye_blind += amt_eye_blind - target.eye_blurry += amt_eye_blurry + target.AdjustEyeBlind(amt_eye_blind) + target.AdjustEyeBlurry(amt_eye_blurry) //summoning if(summon_type) - new summon_type(target.loc, target) \ No newline at end of file + new summon_type(target.loc, target) diff --git a/code/defines/procs/announce.dm b/code/defines/procs/announce.dm index c147bd9235c..d73076c8787 100644 --- a/code/defines/procs/announce.dm +++ b/code/defines/procs/announce.dm @@ -62,7 +62,7 @@ datum/announcement/proc/Message(message as text, message_title as text) for(var/mob/M in player_list) - if(!istype(M,/mob/new_player) && !isdeaf(M)) + if(M.can_hear()) to_chat(M, "

[title]

") to_chat(M, "[message]") if(announcer) @@ -88,7 +88,7 @@ datum/announcement/priority/command/Message(message as text, message_title as te command += "
[message]
" command += "
" for(var/mob/M in player_list) - if(!istype(M,/mob/new_player) && !isdeaf(M)) + if(M.can_hear()) to_chat(M, command) datum/announcement/priority/enemy/Message(message as text, message_title as text, from as text) @@ -100,7 +100,7 @@ datum/announcement/priority/enemy/Message(message as text, message_title as text command += "
[message]
" command += "
" for(var/mob/M in player_list) - if(!istype(M,/mob/new_player) && !isdeaf(M)) + if(M.can_hear()) to_chat(M, command) datum/announcement/priority/security/Message(message as text, message_title as text) @@ -125,7 +125,7 @@ datum/announcement/proc/PlaySound(var/message_sound) if(!message_sound) return for(var/mob/M in player_list) - if(!istype(M,/mob/new_player) && !isdeaf(M)) + if(M.can_hear()) M << message_sound datum/announcement/proc/Sound(var/message_sound) diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 40814a72c78..63c42687b67 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -144,7 +144,7 @@ if(usr.stat != 0) return - if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other + if(usr.incapacitated()) //are you cuffed, dying, lying, stunned or other return if(!ishuman(usr)) //Make sure they're a mob that has dna to_chat(usr, "Try as you might, you can not climb up into the [src].") @@ -169,7 +169,7 @@ return if(O.loc == user) //no you can't pull things out of your ass return - if(user.restrained() || user.stat || user.weakened || user.stunned || user.paralysis || user.resting) //are you cuffed, dying, lying, stunned or other + if(user.incapacitated()) //are you cuffed, dying, lying, stunned or other return if(O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src)) // is the mob anchored, too far away from you, or are you too far away from the source return @@ -973,4 +973,4 @@ return 1 -/////////////////////////// DNA MACHINES \ No newline at end of file +/////////////////////////// DNA MACHINES diff --git a/code/game/dna/genes/disabilities.dm b/code/game/dna/genes/disabilities.dm index a30d160fd92..4cfa6f45750 100644 --- a/code/game/dna/genes/disabilities.dm +++ b/code/game/dna/genes/disabilities.dm @@ -24,7 +24,7 @@ /datum/dna/gene/disability/can_activate(var/mob/M,var/flags) return 1 // Always set! -/datum/dna/gene/disability/activate(var/mob/M, var/connected, var/flags) +/datum/dna/gene/disability/activate(var/mob/living/M, var/connected, var/flags) ..() if(mutation && !(mutation in M.mutations)) M.mutations.Add(mutation) @@ -35,7 +35,7 @@ else testing("[name] has no activation message.") -/datum/dna/gene/disability/deactivate(var/mob/M, var/connected, var/flags) +/datum/dna/gene/disability/deactivate(var/mob/living/M, var/connected, var/flags) ..() if(mutation && (mutation in M.mutations)) M.mutations.Remove(mutation) @@ -127,7 +127,7 @@ /datum/dna/gene/disability/deaf/activate(var/mob/M, var/connected, var/flags) ..(M,connected,flags) - M.ear_deaf = 1 + M.EarDeaf(1) /datum/dna/gene/disability/nearsighted name="Nearsightedness" diff --git a/code/game/gamemodes/changeling/powers/headcrab.dm b/code/game/gamemodes/changeling/powers/headcrab.dm index 07ae44d9a9a..4adbc39e7fc 100644 --- a/code/game/gamemodes/changeling/powers/headcrab.dm +++ b/code/game/gamemodes/changeling/powers/headcrab.dm @@ -17,11 +17,11 @@ for(var/mob/living/carbon/human/H in range(2,user)) to_chat(H, "You are blinded by a shower of blood!") H.Stun(1) - H.eye_blurry = max(20, H.eye_blurry) + H.EyeBlurry(20) var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes) if(istype(E)) E.damage = max(E.damage+5, 0) - H.confused += 3 + H.AdjustConfused(3) for(var/mob/living/silicon/S in range(2,user)) to_chat(S, "Your sensors are disabled by a shower of blood!") S.Weaken(3) @@ -37,4 +37,4 @@ to_chat(crab, "You burst out of the remains of your former body in a shower of gore!") user.gib() feedback_add_details("changeling_powers","LR") - return 1 \ No newline at end of file + return 1 diff --git a/code/game/gamemodes/changeling/powers/revive.dm b/code/game/gamemodes/changeling/powers/revive.dm index b6692817650..2585287528c 100644 --- a/code/game/gamemodes/changeling/powers/revive.dm +++ b/code/game/gamemodes/changeling/powers/revive.dm @@ -17,10 +17,14 @@ user.SetStunned(0) user.SetWeakened(0) user.radiation = 0 - user.eye_blind = 0 - user.eye_blurry = 0 - user.setEarDamage(0,0) + user.SetEyeBlind(0) + user.SetEyeBlurry(0) + user.SetEarDamage(0) + user.SetEarDeaf(0) user.heal_overall_damage(user.getBruteLoss(), user.getFireLoss()) + user.CureBlind() + user.CureDeaf() + user.CureNearsighted() user.reagents.clear_reagents() user.germ_level = 0 user.next_pain_time = 0 diff --git a/code/game/gamemodes/changeling/powers/shriek.dm b/code/game/gamemodes/changeling/powers/shriek.dm index 7babc2a5a62..5185b61e508 100644 --- a/code/game/gamemodes/changeling/powers/shriek.dm +++ b/code/game/gamemodes/changeling/powers/shriek.dm @@ -11,8 +11,8 @@ for(var/mob/living/M in get_mobs_in_view(4, user)) if(iscarbon(M)) if(!M.mind || !M.mind.changeling) - M.adjustEarDamage(0, 30) - M.confused += 20 + M.AdjustEarDeaf(30) + M.AdjustConfused(20) M.Jitter(50) else M << sound('sound/effects/screech.ogg') @@ -41,5 +41,3 @@ L.broken() empulse(get_turf(user), 2, 4, 1) return 1 - - diff --git a/code/game/gamemodes/changeling/powers/tiny_prick.dm b/code/game/gamemodes/changeling/powers/tiny_prick.dm index f4aa6f3d8f2..0df371009a8 100644 --- a/code/game/gamemodes/changeling/powers/tiny_prick.dm +++ b/code/game/gamemodes/changeling/powers/tiny_prick.dm @@ -153,7 +153,7 @@ obj/effect/proc_holder/changeling/sting/mute /obj/effect/proc_holder/changeling/sting/mute/sting_action(var/mob/user, var/mob/living/carbon/target) add_logs(user, target, "stung", object="mute sting") - target.silent += 30 + target.AdjustSilence(30) feedback_add_details("changeling_powers","MS") return 1 @@ -165,12 +165,12 @@ obj/effect/proc_holder/changeling/sting/blind chemical_cost = 25 dna_cost = 1 -/obj/effect/proc_holder/changeling/sting/blind/sting_action(var/mob/user, var/mob/target) +/obj/effect/proc_holder/changeling/sting/blind/sting_action(var/mob/living/user, var/mob/living/target) add_logs(user, target, "stung", object="blind sting") to_chat(target, "Your eyes burn horrifically!") - target.disabilities |= NEARSIGHTED - target.eye_blind = 20 - target.eye_blurry = 40 + target.BecomeNearsighted() + target.EyeBlind(20) + target.EyeBlurry(40) feedback_add_details("changeling_powers","BS") return 1 @@ -186,7 +186,7 @@ obj/effect/proc_holder/changeling/sting/LSD add_logs(user, target, "stung", object="LSD sting") spawn(rand(300,600)) if(target) - target.hallucination = max(400, target.hallucination) + target.Hallucinate(400) feedback_add_details("changeling_powers","HS") return 1 diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index ca96b4f869f..20133d972c8 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -840,7 +840,7 @@ var/list/sacrificed = list() var/obj/item/weapon/nullrod/N = locate() in C if(N) continue - C.adjustEarDamage(0,50) + C.AdjustEarDeaf(50) C.show_message("\red The world around you suddenly becomes quiet.", 3) affected++ if(prob(1)) @@ -859,7 +859,7 @@ var/list/sacrificed = list() var/obj/item/weapon/nullrod/N = locate() in C if(N) continue - C.adjustEarDamage(0,30) + C.AdjustEarDeaf(30) //talismans is weaker. C.show_message("\red The world around you suddenly becomes quiet.", 3) affected++ @@ -880,12 +880,12 @@ var/list/sacrificed = list() var/obj/item/weapon/nullrod/N = locate() in C if(N) continue - C.eye_blurry += 50 - C.eye_blind += 20 + C.AdjustEyeBlurry(50) + C.AdjustEyeBlind(20) if(prob(5)) - C.disabilities |= NEARSIGHTED + C.BecomeNearsighted() if(prob(10)) - C.disabilities |= BLIND + C.BecomeBlind() C.show_message("\red Suddenly you see red flash that blinds you.", 3) affected++ if(affected) @@ -902,8 +902,8 @@ var/list/sacrificed = list() var/obj/item/weapon/nullrod/N = locate() in C if(N) continue - C.eye_blurry += 30 - C.eye_blind += 10 + C.AdjustEyeBlurry(30) + C.AdjustEyeBlind(10) //talismans is weaker. affected++ C.show_message("\red You feel a sharp pain in your eyes, and the world disappears into darkness..", 3) @@ -1016,7 +1016,7 @@ var/list/sacrificed = list() var/mob/living/carbon/C = T C.flash_eyes() if(!(HULK in C.mutations)) - C.silent += 15 + C.AdjustSilence(15) C.Weaken(10) C.Stun(10) return diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index 4d98876ccd6..29f217b44bc 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -466,7 +466,7 @@ Congratulations! You are now trained for xenobiology research!"} L.Sleeping(60) add_logs(user, L, "put to sleep") else - L.drowsyness += 1 + L.AdjustDrowsy(1) to_chat(user, "Sleep inducement works fully only on stunned specimens! ") L.visible_message("[user] tried to induce sleep in [L] with [src]!", \ "You suddenly feel drowsy!") diff --git a/code/game/gamemodes/miniantags/abduction/gland.dm b/code/game/gamemodes/miniantags/abduction/gland.dm index 8a3fbd8ff60..b59f1fd8454 100644 --- a/code/game/gamemodes/miniantags/abduction/gland.dm +++ b/code/game/gamemodes/miniantags/abduction/gland.dm @@ -98,7 +98,7 @@ if(H == owner) continue to_chat(H, "You hear a buzz in your head.") - H.confused += 20 + H.AdjustConfused(20) /obj/item/organ/internal/gland/pop origin_tech = "materials=4;biotech=6;abductor=3" diff --git a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm index 26fb00b42a8..0f9173c31ea 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm @@ -253,7 +253,7 @@ to_chat(human, "You suddenly feel [pick("sick and tired", "tired and confused", "nauseated", "dizzy")].") human.adjustStaminaLoss(stamdamage) human.adjustToxLoss(toxdamage) - human.confused = min(human.confused+confusion, maxconfusion) + human.AdjustConfused(confusion, bound_lower = 0, bound_upper = maxconfusion) new/obj/effect/overlay/temp/revenant(human.loc) if(!istype(T, /turf/simulated/shuttle) && !istype(T, /turf/simulated/wall/rust) && !istype(T, /turf/simulated/wall/r_wall) && istype(T, /turf/simulated/wall) && prob(15)) new/obj/effect/overlay/temp/revenant(T) @@ -317,4 +317,4 @@ playsound(S, 'sound/machines/warning-buzzer.ogg', 50, 1) new/obj/effect/overlay/temp/revenant(S.loc) S.spark_system.start() - S.emp_act(1) \ No newline at end of file + S.emp_act(1) diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 83846818091..461fe0e4ca7 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -241,7 +241,7 @@ revolutionaries += rev_mind if(iscarbon(rev_mind.current)) var/mob/living/carbon/carbon_mob = rev_mind.current - carbon_mob.silent = max(carbon_mob.silent, 5) + carbon_mob.Silence(5) carbon_mob.flash_eyes(1, 1) rev_mind.current.Stun(5) to_chat(rev_mind.current, " You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!") diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index 70471a91aff..b9525ee282e 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -46,7 +46,7 @@ else //Only alludes to the shadowling if the target is close by to_chat(target, "Red lights suddenly dance in your vision, and you are mesmerized by the heavenly lights...") target.Stun(10) - M.silent += 10 + M.AdjustSilence(10) /obj/effect/proc_holder/spell/targeted/lesser_glare @@ -79,7 +79,7 @@ else to_chat(target, "Red lights suddenly dance in your vision, and you are mesmerized by their heavenly beauty...") target.Stun(3) //Roughly 30% as long as the normal one - M.silent += 3 + M.AdjustSilence(3) /obj/effect/proc_holder/spell/aoe_turf/veil @@ -519,7 +519,7 @@ /datum/reagent/shadowling_blindness_smoke/on_mob_life(mob/living/M) if(!is_shadow_or_thrall(M)) to_chat(M, "You breathe in the black smoke, and your eyes burn horribly!") - M.eye_blind = 5 + M.EyeBlind(5) if(prob(25)) M.visible_message("[M] claws at their eyes!") M.Stun(3) @@ -556,8 +556,8 @@ if(iscarbon(target)) var/mob/living/carbon/M = target to_chat(M, "A spike of pain drives into your head and scrambles your thoughts!") - M.confused += 10 - M.setEarDamage(M.ear_damage + 3) + M.AdjustConfused(10) + M.AdjustEarDamage(3) else if(issilicon(target)) var/mob/living/silicon/S = target to_chat(S, "ERROR $!(@ ERROR )#^! SENSORY OVERLOAD \[$(!@#") diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index f8e1575efc1..92a1a3dfa19 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -259,8 +259,8 @@ continue to_chat(C, "You hear a ear piercing shriek and your senses dull!") C.Weaken(4) - C.adjustEarDamage(0,20) - C.stuttering = 20 + C.AdjustEarDeaf(20) + C.Stuttering(20) C.Stun(4) C.Jitter(150) for(var/obj/structure/window/W in view(4)) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 34886dde2e0..689fb350b0d 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -782,7 +782,7 @@ var/global/list/multiverse = list() else if(istype(I,/obj/item/weapon/bikehorn)) to_chat(target, "HONK") target << 'sound/items/AirHorn.ogg' - target.adjustEarDamage(0,3) + target.AdjustEarDeaf(3) GiveHint(target) cooldown = world.time +cooldown_time return diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 08a580923f4..4c06f84d7cd 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -747,7 +747,7 @@ /obj/item/weapon/spellbook/oneuse/blind/recoil(mob/user as mob) ..() to_chat(user, "You go blind!") - user.eye_blind = 10 + user.EyeBlind(10) /obj/item/weapon/spellbook/oneuse/mindswap spell = /obj/effect/proc_holder/spell/targeted/mind_transfer diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 60e650691e5..fb49e6a5970 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -546,7 +546,7 @@ if(panel_open) to_chat(usr, "Close the maintenance panel first.") return - if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other + if(usr.incapacitated()) //are you cuffed, dying, lying, stunned or other return for(var/mob/living/carbon/slime/M in range(1,usr)) if(M.Victim == usr) @@ -590,4 +590,4 @@ component_parts += new /obj/item/stack/cable_coil(null, 1) RefreshParts() -#undef ADDICTION_SPEEDUP_TIME \ No newline at end of file +#undef ADDICTION_SPEEDUP_TIME diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 65a1730bacd..5be99b2ab1c 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -448,7 +448,7 @@ if(ORION_TRAIL_RAIDERS) if(prob(50)) to_chat(usr, "You hear battle shouts. The tramping of boots on cold metal. Screams of agony. The rush of venting air. Are you going insane?") - M.hallucination += 30 + M.AdjustHallucinate(30) else to_chat(usr, "Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there...") M.take_organ_damage(30) diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index 0a84ee81821..f1d7149f9fa 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -20,7 +20,7 @@ jump_action.Grant(user) /obj/machinery/computer/camera_advanced/check_eye(mob/user) - if((stat & (NOPOWER|BROKEN)) || !Adjacent(user) || user.eye_blind || user.incapacitated()) + if((stat & (NOPOWER|BROKEN)) || !Adjacent(user) || !user.can_see() || user.incapacitated()) user.unset_machine() return 0 return 1 @@ -167,4 +167,4 @@ var/camera = input("Choose which camera you want to view", "Cameras") as null|anything in T var/obj/machinery/camera/final = T[camera] if(final) - remote_eye.setLoc(get_turf(final)) \ No newline at end of file + remote_eye.setLoc(get_turf(final)) diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 6dd6182c930..a46f6a97b50 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -80,10 +80,10 @@ beaker = null return ..() -/obj/machinery/atmospherics/unary/cryo_cell/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) +/obj/machinery/atmospherics/unary/cryo_cell/MouseDrop_T(atom/movable/O as mob|obj, mob/living/user as mob) if(O.loc == user) //no you can't pull things out of your ass return - if(user.restrained() || user.stat || user.weakened || user.stunned || user.paralysis || user.resting) //are you cuffed, dying, lying, stunned or other + if(user.incapacitated()) //are you cuffed, dying, lying, stunned or other return if(get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src)) // is the mob anchored, too far away from you, or are you too far away from the source return @@ -371,7 +371,7 @@ occupant.bodytemperature += 2*(air_contents.temperature - occupant.bodytemperature)*current_heat_capacity/(current_heat_capacity + air_contents.heat_capacity()) occupant.bodytemperature = max(occupant.bodytemperature, air_contents.temperature) // this is so ugly i'm sorry for doing it i'll fix it later i promise if(occupant.bodytemperature < T0C) - occupant.sleeping = max(5/efficiency, (1/occupant.bodytemperature)*2000/efficiency) + occupant.Sleeping(max(5/efficiency, (1/occupant.bodytemperature)*2000/efficiency)) occupant.Paralyse(max(5/efficiency, (1/occupant.bodytemperature)*3000/efficiency)) if(air_contents.oxygen > 2) if(occupant.getOxyLoss()) occupant.adjustOxyLoss(-1) @@ -469,9 +469,9 @@ if(M.Victim == usr) to_chat(usr, "You're too busy getting your life sucked out of you.") return - if(usr.stat != 0 || stat & (NOPOWER|BROKEN)) + if(usr.stat != CONSCIOUS || stat & (NOPOWER|BROKEN)) return - if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other + if(usr.incapacitated()) //are you cuffed, dying, lying, stunned or other return put_mob(usr) return diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 9ffec3cb02c..4c462b5a05c 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -485,7 +485,7 @@ if(O.loc == user) //no you can't pull things out of your ass return - if(user.restrained() || user.stat || user.weakened || user.stunned || user.paralysis || user.resting) //are you cuffed, dying, lying, stunned or other + if(user.incapacitated()) //are you cuffed, dying, lying, stunned or other return if(get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src)) // is the mob anchored, too far away from you, or are you too far away from the source return diff --git a/code/game/machinery/poolcontroller.dm b/code/game/machinery/poolcontroller.dm index d8f23599f74..1c764f0d346 100644 --- a/code/game/machinery/poolcontroller.dm +++ b/code/game/machinery/poolcontroller.dm @@ -100,15 +100,15 @@ if(drownee.stat == DEAD) //Dead spacemen don't drown more return - if(drownee.losebreath > 20) //You've probably got bigger problems than drowning at this point, so we won't add to it until you get that under control. + if(drownee.lose_breath > 20) //You've probably got bigger problems than drowning at this point, so we won't add to it until you get that under control. return if(drownee.stat) //Mob is in critical. - drownee.losebreath -= 3 //You're gonna die here. + drownee.AdjustLoseBreath(3, bound_lower = 0, bound_upper = 20) add_logs(src, drownee, "drowned", null, null, 0) //log it to their VV, but don't spam the admins' chats with the logs drownee.visible_message("\The [drownee] appears to be drowning!","You're quickly drowning!") //inform them that they are fucked. else - drownee.losebreath -= 2 //For every time you drown, you miss 2 breath attempts. Hope you catch on quick! + drownee.AdjustLoseBreath(2, bound_lower = 0, bound_upper = 20) //For every time you drown, you miss 2 breath attempts. Hope you catch on quick! add_logs(src, drownee, "drowned", null, null, 0) //log it to their VV, but don't spam the admins' chats with the logs if(prob(35)) //35% chance to tell them what is going on. They should probably figure it out before then. drownee.visible_message("\The [drownee] flails, almost like they are drowning!","You're lacking air!") //*gasp* *gasp* *gasp* *gasp* *gasp* diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 68b2c83059e..fedb792c37d 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -164,9 +164,9 @@ if(istype(H.l_ear, /obj/item/clothing/ears/earmuffs) || istype(H.r_ear, /obj/item/clothing/ears/earmuffs)) continue to_chat(M, "HONK") - M.sleeping = 0 - M.stuttering = 20 - M.adjustEarDamage(0,30) + M.SetSleeping(0) + M.Stuttering(20) + M.AdjustEarDeaf(30) M.Weaken(3) if(prob(30)) M.Stun(10) diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 47b6c1bf57b..90e4c47b276 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -583,7 +583,7 @@ steam.start() -- spawns the effect // if(M.wear_suit, /obj/item/clothing/suit/wizrobe && (M.hat, /obj/item/clothing/head/wizard) && (M.shoes, /obj/item/clothing/shoes/sandal)) // I'll work on it later else M.drop_item() - M:sleeping += 5 + M.AdjustSleeping(5) if(M.coughedtime != 1) M.coughedtime = 1 M.emote("cough") @@ -600,7 +600,7 @@ steam.start() -- spawns the effect return else M.drop_item() - M:sleeping += 5 + M.AdjustSleeping(5) if(M.coughedtime != 1) M.coughedtime = 1 M.emote("cough") diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm index 32bf9a2fea5..9e36faae088 100644 --- a/code/game/objects/explosion.dm +++ b/code/game/objects/explosion.dm @@ -57,10 +57,11 @@ var/close = range(world.view+round(devastation_range,1), epicenter) // to all distanced mobs play a different sound - for(var/mob/M in world) if(M.z == epicenter.z) if(!(M in close)) - // check if the mob can hear - if(M.ear_deaf <= 0 || !M.ear_deaf) if(!istype(M.loc,/turf/space)) - M << 'sound/effects/explosionfar.ogg' + for(var/mob/M in world) + if(M.z == epicenter.z && !(M in close)) + // check if the mob can hear + if(M.can_hear() && !istype(M.loc,/turf/space)) + M << 'sound/effects/explosionfar.ogg' if(heavy_impact_range > 1) var/datum/effect/system/explosion/E = new/datum/effect/system/explosion() diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 6ea2906c072..b34cc09ca89 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -474,10 +474,10 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d if(!(eyes.status & ORGAN_ROBOT) || !(eyes.status & ORGAN_ASSISTED)) //robot eyes bleeding might be a bit silly to_chat(M, "Your eyes start to bleed profusely!") if(prob(50)) - if(M.stat != 2) + if(M.stat != DEAD) to_chat(M, "You drop what you're holding and clutch at your eyes!") M.drop_item() - M.eye_blurry += 10 + M.AdjustEyeBlurry(10) M.Paralyse(1) M.Weaken(2) if(eyes.damage >= eyes.min_broken_damage) @@ -488,7 +488,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d H.UpdateDamageIcon() else M.take_organ_damage(7) - M.eye_blurry += rand(3,4) + M.AdjustEyeBlurry(rand(3,4)) return /obj/item/clean_blood() diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index a91c4e2ebe3..065392a9222 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -236,10 +236,10 @@ var/mob/living/carbon/human/C = target user.visible_message(" [user] sprays [src] into the face of [target]!") if(C.client) - C.eye_blurry = max(C.eye_blurry, 3) - C.eye_blind = max(C.eye_blind, 1) + C.EyeBlurry(3) + C.EyeBlind(1) if(C.check_eye_prot() <= 0) // no eye protection? ARGH IT BURNS. - C.confused = max(C.confused, 3) + C.Confused(3) C.Weaken(3) C.lip_style = "spray_face" C.lip_color = colour @@ -251,4 +251,4 @@ overlays.Cut() var/image/I = image('icons/obj/crayons.dmi',icon_state = "[capped ? "spraycan_cap_colors" : "spraycan_colors"]") I.color = colour - overlays += I \ No newline at end of file + overlays += I diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm index 7f2afb179e4..fb617133d83 100644 --- a/code/game/objects/items/devices/camera_bug.dm +++ b/code/game/objects/items/devices/camera_bug.dm @@ -55,7 +55,7 @@ interact(user) /obj/item/device/camera_bug/check_eye(var/mob/user as mob) - if(user.stat || loc != user || !user.canmove || user.eye_blind || !current) + if(user.stat || loc != user || !user.canmove || !user.can_see() || !current) user.reset_view(null) user.unset_machine() return null diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index cec1c106e48..52a9a343e6b 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -81,7 +81,7 @@ if(M.weakeyes) M.Weaken(3) //quick weaken bypasses eye protection but has no eye flash if(M.flash_eyes(1, 1)) - M.confused += power + M.AdjustConfused(power) terrible_conversion_proc(M, user) M.Stun(1) visible_message("[user] blinds [M] with the flash!") @@ -96,7 +96,7 @@ to_chat(M, "[user] fails to blind you with the flash!") else if(M.flash_eyes()) - M.confused += power + M.AdjustConfused(power) /obj/item/device/flash/attack(mob/living/M, mob/user) if(!try_use_flash(user)) diff --git a/code/game/objects/items/weapons/garrote.dm b/code/game/objects/items/weapons/garrote.dm index e6b0ff92c32..22b589c7517 100644 --- a/code/game/objects/items/weapons/garrote.dm +++ b/code/game/objects/items/weapons/garrote.dm @@ -91,7 +91,7 @@ G.state = GRAB_NECK G.hud.icon_state = "kill" G.hud.name = "kill" - M.silent += 1 + M.AdjustSilence(1) garrote_time = world.time + 10 processing_objects.Add(src) @@ -152,11 +152,11 @@ return - strangling.silent = max(strangling.silent, 3) // Non-improvised effects + strangling.Silence(3) // Non-improvised effects strangling.apply_damage(4, OXY, "head") /obj/item/weapon/twohanded/garrote/suicide_act(mob/user) user.visible_message("[user] is wrapping the [src] around \his neck and pulling the handles! It looks like \he's trying to commit suicide.") playsound(src.loc, 'sound/weapons/cablecuff.ogg', 15, 1, -1) - return (OXYLOSS) \ No newline at end of file + return (OXYLOSS) diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index 9562f9442c7..4241c9c5c0c 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -51,12 +51,13 @@ if(!ear_safety) M.Stun(max(10/distance, 3)) M.Weaken(max(10/distance, 3)) - M.setEarDamage(M.ear_damage + rand(0, 5), max(M.ear_deaf,15)) + M.EarDeaf(15) + M.AdjustEarDamage(rand(0, 5)) if(M.ear_damage >= 15) to_chat(M, "Your ears start to ring badly!") - if(prob(M.ear_damage - 10 + 5)) + if(prob(M.ear_damage - 5)) to_chat(M, "You can't hear anything!") - M.disabilities |= DEAF + M.BecomeDeaf() else if(M.ear_damage >= 5) to_chat(M, "Your ears start to ring!") diff --git a/code/game/objects/items/weapons/scissors.dm b/code/game/objects/items/weapons/scissors.dm index 05a50200e7d..e966f5500e5 100644 --- a/code/game/objects/items/weapons/scissors.dm +++ b/code/game/objects/items/weapons/scissors.dm @@ -115,7 +115,7 @@ if(do_after(user, 50, target = H)) playsound(loc, "sound/weapons/bladeslice.ogg", 50, 1, -1) user.visible_message("[user] abruptly stops cutting [M]'s hair and slices their throat!", "You stop cutting [M]'s hair and slice their throat!") //Just a little off the top. - H.losebreath += 10 //30 Oxy damage over time + H.AdjustLoseBreath(10) //30 Oxy damage over time H.apply_damage(18, BRUTE, "head", sharp =1, edge =1, used_weapon = "scissors") var/turf/location = get_turf(H) if(istype(location, /turf/simulated)) diff --git a/code/game/objects/items/weapons/storage/artistic_toolbox.dm b/code/game/objects/items/weapons/storage/artistic_toolbox.dm index 81ba661115a..470c273bd69 100644 --- a/code/game/objects/items/weapons/storage/artistic_toolbox.dm +++ b/code/game/objects/items/weapons/storage/artistic_toolbox.dm @@ -138,8 +138,8 @@ affected_mob.setStaminaLoss(0) var/status = CANSTUN | CANWEAKEN | CANPARALYSE affected_mob.status_flags &= ~status - affected_mob.dizziness = max(0, affected_mob.dizziness-10) - affected_mob.drowsyness = max(0, affected_mob.drowsyness-10) + affected_mob.AdjustDizzy(-10) + affected_mob.AdjustDrowsy(-10) affected_mob.SetSleeping(0) stage = 1 switch(progenitor.hunger) @@ -181,4 +181,4 @@ affected_mob.adjustBruteLoss(5) if(ismob(progenitor.loc)) - progenitor.hunger++ \ No newline at end of file + progenitor.hunger++ diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 937cc3214a3..ef0cdfc329b 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -116,7 +116,7 @@ if(H.get_item_by_slot(slot_head) == src) if(H.internal) return - H.losebreath += 1 + H.AdjustLoseBreath(1) else storage_slots = 7 processing_objects.Remove(src) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index b27d3f6e4f8..bbbecf6695d 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -420,8 +420,7 @@ H.lip_style = null //Washes off lipstick H.lip_color = initial(H.lip_color) H.regenerate_icons() - user.drowsyness -= rand(2,3) //Washing your face wakes you up if you're falling asleep - user.drowsyness = Clamp(user.drowsyness, 0, INFINITY) + user.AdjustDrowsy(-rand(2,3)) //Washing your face wakes you up if you're falling asleep else user.clean_blood() @@ -459,4 +458,3 @@ icon_state = "puddle-splash" ..() icon_state = "puddle" - diff --git a/code/game/sound.dm b/code/game/sound.dm index fe5e361f16a..ed5f0d15b4c 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -40,7 +40,7 @@ var/list/ricochet = list('sound/weapons/effects/ric1.ogg', 'sound/weapons/effect M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, is_global, S) /mob/proc/playsound_local(var/turf/turf_source, soundin, vol as num, vary, frequency, falloff, is_global, sound/S) - if(!src.client || ear_deaf > 0) + if(!src.client || !can_hear()) return if(!S) diff --git a/code/modules/admin/verbs/freeze.dm b/code/modules/admin/verbs/freeze.dm index fb93cd3512d..920b24297ad 100644 --- a/code/modules/admin/verbs/freeze.dm +++ b/code/modules/admin/verbs/freeze.dm @@ -36,7 +36,7 @@ var/global/list/frozen_mob_list = list() anchored = 1 frozen = AO admin_prev_sleeping = sleeping - sleeping += 20000 + AdjustSleeping(20000) if(!(src in frozen_mob_list)) frozen_mob_list += src @@ -49,7 +49,7 @@ var/global/list/frozen_mob_list = list() anchored = 0 overlays -= frozen frozen = null - sleeping = admin_prev_sleeping + SetSleeping(admin_prev_sleeping) admin_prev_sleeping = null if(src in frozen_mob_list) frozen_mob_list -= src diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 9945079b1a5..4ae3e230762 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -411,11 +411,12 @@ var/mob/living/carbon/human/M = src.loc to_chat(M, "\red The Optical Thermal Scanner overloads and blinds you!") if(M.glasses == src) - M.eye_blind = 3 - M.eye_blurry = 5 - M.disabilities |= NEARSIGHTED - spawn(100) - M.disabilities &= ~NEARSIGHTED + M.EyeBlind(3) + M.EyeBlurry(5) + if(!(M.disabilities & NEARSIGHTED)) + M.BecomeNearsighted() + spawn(100) + M.CureNearsighted() ..() /obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 35e31dc9519..274809d2145 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -335,7 +335,7 @@ if(ishuman(loc)) var/mob/living/carbon/human/H = loc if(H.head == src) - H.slurring = max(3, H.slurring) //always slur + H.Slur(3) //always slur /obj/item/clothing/head/beret/fluff/linda //Epic_Charger: Linda Clark name = "Green beret" diff --git a/code/modules/events/mass_hallucination.dm b/code/modules/events/mass_hallucination.dm index d7877676b21..a3f302cff9f 100644 --- a/code/modules/events/mass_hallucination.dm +++ b/code/modules/events/mass_hallucination.dm @@ -6,7 +6,7 @@ var/armor = H.getarmor(type = "rad") if((H.species.flags & RADIMMUNE) || armor >= 75) // Leave radiation-immune species/rad armored players completely unaffected continue - H.hallucination += rand(50, 100) + H.AdjustHallucinate(rand(50, 100)) /datum/event/mass_hallucination/announce() - command_announcement.Announce("It seems that station [station_name()] is passing through a minor radiation field, this may cause some hallucination, but no further damage") \ No newline at end of file + command_announcement.Announce("It seems that station [station_name()] is passing through a minor radiation field, this may cause some hallucination, but no further damage") diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index ffc4882a055..4c120db79e0 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -279,11 +279,11 @@ Gunshots/explosions/opening doors/less rare audio (done) /obj/effect/hallucination/simple/singularity/proc/Eat(atom/OldLoc, Dir) var/target_dist = get_dist(src,target) if(target_dist<=3) //"Eaten" - target.sleeping = 20 + target.Sleeping(20) target.hal_crit = 1 target.hal_screwyhud = 1 spawn(rand(50,100)) - target.sleeping = 0 + target.SetSleeping(0) target.hal_crit = 0 target.hal_screwyhud = 0 @@ -480,7 +480,7 @@ Gunshots/explosions/opening doors/less rare audio (done) my_target.show_message("[src.name] has attacked [my_target] with [weapon_name]!", 1) my_target.staminaloss += 30 if(prob(20)) - my_target.eye_blurry += 3 + my_target.AdjustEyeBlurry(3) if(prob(33)) if(!locate(/obj/effect/overlay) in my_target.loc) fake_blood(my_target) @@ -752,11 +752,11 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/ite halimage = null if("death") //Fake death - src.sleeping = 20 + Sleeping(20) hal_crit = 1 hal_screwyhud = 1 spawn(rand(50,100)) - src.sleeping = 0 + SetSleeping(0) hal_crit = 0 hal_screwyhud = 0 if("husks") diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm index bc6692d72b1..0e557ea1d31 100644 --- a/code/modules/hydroponics/grown_inedible.dm +++ b/code/modules/hydroponics/grown_inedible.dm @@ -98,7 +98,7 @@ to_chat(M, "You are stunned by the powerful acid of the Deathnettle!") add_logs(user, M, "attacked", src) - M.eye_blurry += force/7 + M.AdjustEyeBlurry(force/7) if(prob(20)) M.Paralyse(force / 6) M.Weaken(force / 15) diff --git a/code/modules/martial_arts/krav_maga.dm b/code/modules/martial_arts/krav_maga.dm index 9b589878475..e1a577e24fa 100644 --- a/code/modules/martial_arts/krav_maga.dm +++ b/code/modules/martial_arts/krav_maga.dm @@ -88,7 +88,7 @@ D.visible_message("[A] pounds [D] on the chest!", \ "[A] slams your chest! You can't breathe!") playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1) - D.losebreath += 5 + D.AdjustLoseBreath(5) D.adjustOxyLoss(10) return 1 @@ -97,7 +97,7 @@ "[A] karate chops your neck, rendering you unable to speak for a short time!") playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1) D.apply_damage(5, BRUTE) - D.silent += 10 + D.AdjustSilence(10) return 1 datum/martial_art/krav_maga/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) @@ -170,4 +170,4 @@ datum/martial_art/krav_maga/grab_act(var/mob/living/carbon/human/A, var/mob/livi name = "krav maga gloves" desc = "These gloves can teach you to perform Krav Maga using nanochips." icon_state = "fightgloves" - item_state = "fightgloves" \ No newline at end of file + item_state = "fightgloves" diff --git a/code/modules/martial_arts/sleeping_carp.dm b/code/modules/martial_arts/sleeping_carp.dm index bc4e15eb598..960844a063a 100644 --- a/code/modules/martial_arts/sleeping_carp.dm +++ b/code/modules/martial_arts/sleeping_carp.dm @@ -66,7 +66,7 @@ D.visible_message("[A] knees [D] in the stomach!", \ "[A] winds you with a knee in the stomach!") D.audible_message("[D] gags!") - D.losebreath += 3 + D.AdjustLoseBreath(3) D.Stun(2) playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1) if(prob(80)) diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index 50a9527326a..3a813b0a557 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -28,7 +28,7 @@ //non-verbal languages are garbled if you can't see the speaker. Yes, this includes if they are inside a closet. if(language && (language.flags & NONVERBAL)) - if(disabilities & BLIND || blinded) //blind people can't see dumbass + if(!can_see()) //blind people can't see dumbass message = stars(message) if(!speaker || !(speaker in view(src))) @@ -65,7 +65,7 @@ if(client.prefs.toggles & CHAT_GHOSTEARS && speaker in view(src)) message = "[message]" - if(disabilities & DEAF || ear_deaf) + if(!can_hear()) if(!language || !(language.flags & INNATE)) // INNATE is the flag for audible-emote-language, so we don't want to show an "x talks but you cannot hear them" message if it's set if(speaker == src) to_chat(src, "You cannot hear yourself speak!") @@ -95,7 +95,7 @@ //non-verbal languages are garbled if you can't see the speaker. Yes, this includes if they are inside a closet. if(language && (language.flags & NONVERBAL)) - if(disabilities & BLIND || blinded) //blind people can't see dumbass + if(!can_see()) //blind people can't see dumbass message = stars(message) if(!speaker || !(speaker in view(src))) @@ -182,7 +182,7 @@ formatted = language.format_message_radio(message, verb) else formatted = "[verb], \"[message]\"" - if(disabilities & DEAF || ear_deaf) + if(!can_hear()) if(prob(20)) to_chat(src, "You feel your headset vibrate but can hear nothing from it!") else if(track) diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index 81b54bcc3a6..c9e410d9e9b 100644 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -605,7 +605,7 @@ return ..() // Can we speak this language, as opposed to just understanding it? -/mob/proc/can_speak(datum/language/speaking) +/mob/proc/can_speak_language(datum/language/speaking) return (universal_speak || (speaking && speaking.flags & INNATE) || speaking in src.languages) diff --git a/code/modules/mob/living/carbon/alien/alien_defenses.dm b/code/modules/mob/living/carbon/alien/alien_defenses.dm index 3949948b0f3..c6e2bcc510d 100644 --- a/code/modules/mob/living/carbon/alien/alien_defenses.dm +++ b/code/modules/mob/living/carbon/alien/alien_defenses.dm @@ -16,7 +16,7 @@ In all, this is a lot like the monkey code. /N switch(M.a_intent) if(I_HELP) - sleeping = max(0,sleeping-5) + AdjustSleeping(-5) resting = 0 AdjustParalysis(-3) AdjustStunned(-3) diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 876cae4b312..c5cee9d3db4 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -96,13 +96,15 @@ f_loss += 60 - adjustEarDamage(30, 120) + AdjustEarDamage(30) + AdjustEarDeaf(120) if(3.0) b_loss += 30 if(prob(50) && !shielded) Paralyse(1) - adjustEarDamage(15,60) + AdjustEarDamage(15) + AdjustEarDeaf(60) adjustBruteLoss(b_loss) adjustFireLoss(f_loss) @@ -298,4 +300,4 @@ return initial(pixel_x) /mob/living/carbon/alien/humanoid/get_permeability_protection() - return 0.8 \ No newline at end of file + return 0.8 diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm index 4cccb6e57ed..da93e43c13f 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/life.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm @@ -57,13 +57,12 @@ if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP blinded = 1 - silent = 0 + SetSilence(0) else //ALIVE. LIGHTS ARE ON if(health < config.health_threshold_dead || !get_int_organ(/obj/item/organ/internal/brain)) death() blinded = 1 - stat = DEAD - silent = 0 + SetSilence(0) return 1 //UNCONSCIOUS. NO-ONE IS HOME @@ -80,7 +79,7 @@ blinded = 1 stat = UNCONSCIOUS else if(sleeping) - sleeping = max(sleeping-1, 0) + AdjustSleeping(-1) blinded = 1 stat = UNCONSCIOUS if( prob(10) && health ) @@ -98,18 +97,18 @@ if(disabilities & BLIND) //disabled-blind, doesn't get better on its own blinded = 1 else if(eye_blind) //blindness, heals slowly over time - eye_blind = max(eye_blind-1,0) + AdjustEyeBlind(-1) blinded = 1 else if(eye_blurry) //blurry eyes heal slowly - eye_blurry = max(eye_blurry-1, 0) + AdjustEyeBlurry(-1) //Ears if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own - setEarDamage(-1, max(ear_deaf, 1)) + EarDeaf(1) else if(ear_deaf) //deafness, heals slowly over time - adjustEarDamage(0,-1) + AdjustEarDeaf(-1) else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs - adjustEarDamage(-0.05, 0) + AdjustEarDamage(-0.05) //Other if(stunned) @@ -123,11 +122,11 @@ update_icons() if(stuttering) - stuttering = max(stuttering-1, 0) + AdjustStuttering(-1) if(silent) - silent = max(silent-1, 0) + AdjustSilence(-1) if(druggy) - druggy = max(druggy-1, 0) - return 1 \ No newline at end of file + AdjustDruggy(-1) + return 1 diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 8e9e0dea576..04a460ec710 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -88,13 +88,15 @@ f_loss += 60 - adjustEarDamage(30,120) + AdjustEarDamage(30) + AdjustEarDeaf(120) if(3.0) b_loss += 30 if(prob(50)) Paralyse(1) - adjustEarDamage(15,60) + AdjustEarDamage(15) + AdjustEarDeaf(60) adjustBruteLoss(b_loss) adjustFireLoss(f_loss) diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index 76ceef6ad2e..03cb2096963 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -17,12 +17,12 @@ if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP blinded = 1 - silent = 0 + SetSilence(0) else //ALIVE. LIGHTS ARE ON if(health < -25 || !get_int_organ(/obj/item/organ/internal/brain)) death() blinded = 1 - silent = 0 + SetSilence(0) return 1 //UNCONSCIOUS. NO-ONE IS HOME @@ -39,7 +39,7 @@ blinded = 1 stat = UNCONSCIOUS else if(sleeping) - sleeping = max(sleeping-1, 0) + AdjustSleeping(-1) blinded = 1 stat = UNCONSCIOUS if( prob(10) && health ) @@ -57,32 +57,32 @@ if(disabilities & BLIND) //disabled-blind, doesn't get better on its own blinded = 1 else if(eye_blind) //blindness, heals slowly over time - eye_blind = max(eye_blind-1,0) + AdjustEyeBlind(-1) blinded = 1 else if(eye_blurry) //blurry eyes heal slowly - eye_blurry = max(eye_blurry-1, 0) + AdjustEyeBlurry(-1) //Ears if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own - setEarDamage(-1, max(ear_deaf, 1)) + EarDeaf(1) else if(ear_deaf) //deafness, heals slowly over time - adjustEarDamage(0,-1) + AdjustEarDeaf(-1) else if(ear_damage < 25) //ear damage heals slowly under this threshold. - adjustEarDamage(-0.05,0) + AdjustEarDamage(-0.05) //Other if(stunned) AdjustStunned(-1) if(weakened) - weakened = max(weakened-1,0) + AdjustWeakened(-1) if(stuttering) - stuttering = max(stuttering-1, 0) + AdjustStuttering(-1) if(silent) - silent = max(silent-1, 0) + AdjustSilence(-1) if(druggy) - druggy = max(druggy-1, 0) - return 1 \ No newline at end of file + AdjustDruggy(-1) + return 1 diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm index 996687ee4b0..7809e1fb947 100644 --- a/code/modules/mob/living/carbon/brain/brain.dm +++ b/code/modules/mob/living/carbon/brain/brain.dm @@ -100,8 +100,8 @@ I'm using this for Stat to give it a more nifty interface to work with /mob/living/carbon/brain/can_safely_leave_loc() return 0 //You're not supposed to be ethereal jaunting, brains -/mob/living/carbon/brain/adjustEarDamage() +/mob/living/carbon/brain/SetEarDamage() // no ears to damage or heal return -/mob/living/carbon/brain/setEarDamage() // no ears to damage or heal - return \ No newline at end of file +/mob/living/carbon/brain/SetEarDeaf() + return diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index fa466759bcc..e3ffe2074a7 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -21,7 +21,8 @@ /obj/item/organ/internal/brain/surgeryize() if(!owner) return - owner.setEarDamage(0,0) //Yeah, didn't you...hear? The ears are totally inside the brain. + owner.SetEarDeaf(0) + owner.SetEarDamage(0) //Yeah, didn't you...hear? The ears are totally inside the brain. /obj/item/organ/internal/brain/xeno name = "xenomorph brain" diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm index 40273bf66ad..74d096d9518 100644 --- a/code/modules/mob/living/carbon/brain/life.dm +++ b/code/modules/mob/living/carbon/brain/life.dm @@ -52,12 +52,12 @@ if(stat == DEAD) blinded = 1 - silent = 0 + SetSilence(0) else if(!container && (health < config.health_threshold_dead || ((world.time - timeofhostdeath) > config.revival_brain_life))) death() - blinded =1 - silent = 0 + blinded = 1 + SetSilence(0) return 1 . = 1 diff --git a/code/modules/mob/living/carbon/brain/login.dm b/code/modules/mob/living/carbon/brain/login.dm index e90297dfe5b..622ae74656a 100644 --- a/code/modules/mob/living/carbon/brain/login.dm +++ b/code/modules/mob/living/carbon/brain/login.dm @@ -1,3 +1,3 @@ /mob/living/carbon/brain/Login() ..() - sleeping = 0 \ No newline at end of file + SetSleeping(0) diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index 4f76dce16bd..3b5b415964d 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -185,7 +185,7 @@ src.brainmob.loc = src src.brainmob.container = src src.brainmob.stat = 0 - src.brainmob.silent = 0 + src.brainmob.SetSilence(0) dead_mob_list -= src.brainmob ..() diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 688508c4bf3..256aa562f72 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -158,13 +158,13 @@ "You feel a powerful shock coursing through your body!", \ "You hear a heavy electrical crack." \ ) - jitteriness += 1000 //High numbers for violent convulsions + AdjustJitter(1000) //High numbers for violent convulsions do_jitter_animation(jitteriness) - stuttering += 2 + AdjustStuttering(2) if(!tesla_shock || (tesla_shock && siemens_coeff > 0.5)) Stun(2) spawn(20) - jitteriness = max(jitteriness - 990, 10) //Still jittery, but vastly less + AdjustJitter(-1000, bound_lower = 10) //Still jittery, but vastly less if(!tesla_shock || (tesla_shock && siemens_coeff > 0.5)) Stun(3) Weaken(3) @@ -268,7 +268,7 @@ if(istype(src,/mob/living/carbon/human) && src:w_uniform) var/mob/living/carbon/human/H = src H.w_uniform.add_fingerprint(M) - src.sleeping = max(0,src.sleeping-5) + AdjustSleeping(-5) if(src.sleeping == 0) src.resting = 0 AdjustParalysis(-3) @@ -327,8 +327,8 @@ E.damage += rand(12, 16) if(E.damage > E.min_bruised_damage) - eye_blind += damage - eye_blurry += damage * rand(3, 6) + AdjustEyeBlind(damage) + AdjustEyeBlurry(damage * rand(3, 6)) if(E.damage > (E.min_bruised_damage + E.min_broken_damage) / 2) if(!(E.status & ORGAN_ROBOT)) diff --git a/code/modules/mob/living/carbon/death.dm b/code/modules/mob/living/carbon/death.dm index b0ccdc8381d..f8a9b38d098 100644 --- a/code/modules/mob/living/carbon/death.dm +++ b/code/modules/mob/living/carbon/death.dm @@ -1,9 +1,9 @@ /mob/living/carbon/death(gibbed) - losebreath = 0 + SetLoseBreath(0) med_hud_set_health() med_hud_set_status() if(reagents) reagents.death_metabolize(src) - ..(gibbed) \ No newline at end of file + ..(gibbed) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index df78c286254..64b7ad2490f 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -97,8 +97,8 @@ emote("deathgasp") //let the world KNOW WE ARE DEAD stat = DEAD - dizziness = 0 - jitteriness = 0 + SetDizzy(0) + SetJitter(0) heart_attack = 0 //Handle species-specific deaths. diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 0746cb30b2c..bd0c3538462 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -10,7 +10,7 @@ act = copytext(act, 1, t1) var/muzzled = is_muzzled() - if(disabilities & MUTE || silent) + if(!can_speak()) muzzled = 1 //var/m_type = 1 @@ -313,7 +313,7 @@ M = null if(M) - if(lying || weakened) + if(lying) message = "[src] flops and flails around on the floor." else message = "[src] flips in [M]'s general direction." @@ -378,7 +378,7 @@ message = "[src] faints." if(src.sleeping) return //Can't faint while asleep - src.sleeping += 1 + AdjustSleeping(1) m_type = 1 if("cough", "coughs") diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index ed48c229b89..3c9f5e9ce13 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -352,7 +352,8 @@ else valid_limbs -= processing_dismember if(!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs)) - adjustEarDamage(30, 120) + AdjustEarDamage(30) + AdjustEarDeaf(120) if(prob(70) && !shielded) Paralyse(10) @@ -376,7 +377,8 @@ else valid_limbs -= processing_dismember if(!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs)) - adjustEarDamage(15,60) + AdjustEarDamage(15) + AdjustEarDeaf(60) if(prob(50) && !shielded) Paralyse(10) @@ -491,8 +493,7 @@ O.show_message(text("The [M.name] has shocked []!", src), 1) Weaken(power) - if(stuttering < power) - stuttering = power + Stuttering(power) Stun(power) var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread @@ -1728,7 +1729,7 @@ if(last_special > world.time) return - if(stat || paralysis || stunned || weakened || lying || restrained() || buckled) + if(!canmove) to_chat(src, "You cannot leap in your current state.") return @@ -1782,7 +1783,7 @@ if(last_special > world.time) return - if(stat || paralysis || stunned || weakened || lying) + if(!canmove) to_chat(src, "\red You cannot do that in your current state.") return diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 16d940dd439..0ceabc84bfe 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -254,7 +254,7 @@ emp_act visible_message("[src] has been knocked down!", \ "[src] has been knocked down!") apply_effect(5, WEAKEN, armor) - confused += 15 + AdjustConfused(15) if(prob(I.force + ((100 - health)/2)) && src != user && I.damtype == BRUTE) ticker.mode.remove_revolutionary(mind) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 78e9098f434..e308e3da3dd 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -86,8 +86,8 @@ // If we have the gene for being crazy, have random events. if(dna.GetSEState(HALLUCINATIONBLOCK)) - if(prob(1) && hallucination < 1) - hallucination += 20 + if(prob(1)) + Hallucinate(20) if(disabilities & COUGHING) if((prob(5) && paralysis <= 1)) @@ -111,9 +111,9 @@ if(disabilities & NERVOUS) speech_problem_flag = 1 if(prob(10)) - stuttering = max(10, stuttering) + Stuttering(10) - if(getBrainLoss() >= 60 && stat != 2) + if(getBrainLoss() >= 60 && stat != DEAD) speech_problem_flag = 1 if(prob(3)) var/list/s1 = list("IM A PONY NEEEEEEIIIIIIIIIGH", @@ -152,8 +152,8 @@ if(getBrainLoss() >= 100 && stat != 2) //you lapse into a coma and die without immediate aid; RIP. -Fox Weaken(20) - losebreath += 10 - silent += 2 + AdjustLoseBreath(10) + AdjustSilence(2) if(getBrainLoss() >= 120 && stat != 2) //they died from stupidity--literally. -Fox visible_message("[src] goes limp, their facial expression utterly blank.") @@ -281,10 +281,10 @@ var/datum/gas_mixture/breath if(health <= config.health_threshold_crit) - losebreath++ + AdjustLoseBreath(1) - if(losebreath > 0) - losebreath-- + if(lose_breath > 0) + AdjustLoseBreath(-1) if(prob(10)) spawn emote("gasp") if(istype(loc, /obj/)) @@ -695,21 +695,21 @@ else overeatduration -= 2 - if(drowsyness) - drowsyness-- - eye_blurry = max(2, eye_blurry) + if(drowsy) + AdjustDrowsy(-1) + EyeBlurry(2) if(prob(5)) - sleeping += 1 + AdjustSleeping(1) Paralyse(5) - confused = max(0, confused - 1) + AdjustConfused(-1) // decrement dizziness counter, clamped to 0 if(resting) - dizziness = max(0, dizziness - 15) - jitteriness = max(0, jitteriness - 15) + AdjustDizzy(-15) + AdjustJitter(-15) else - dizziness = max(0, dizziness - 3) - jitteriness = max(0, jitteriness - 3) + AdjustDizzy(-3) + AdjustJitter(-3) if(species && species.flags & NO_INTORGANS) return @@ -744,8 +744,7 @@ alcohol_strength *= 5 if(alcohol_strength >= slur_start) //slurring - if(!slurring) slurring = 1 - slurring = drunk + Slur(drunk) if(alcohol_strength >= brawl_start) //the drunken martial art if(!istype(martial_art, /datum/martial_art/drunk_brawling)) var/datum/martial_art/drunk_brawling/F = new @@ -754,18 +753,17 @@ if(istype(martial_art, /datum/martial_art/drunk_brawling)) martial_art.remove(src) if(alcohol_strength >= confused_start && prob(33)) //confused walking - if(!confused) confused = 1 - confused = max(confused+(3/sober_str),0) + if(!confused) Confused(1) + AdjustConfused(3/sober_str) if(alcohol_strength >= blur_start) //blurry eyes - eye_blurry = max(eye_blurry, 10/sober_str) - drowsyness = max(drowsyness, 0) + EyeBlurry(10/sober_str) if(!isSynthetic()) //stuff only for non-synthetics if(alcohol_strength >= vomit_start) //vomiting if(prob(8)) fakevomit() if(alcohol_strength >= pass_out) - Paralyse(5 / sober_str) - drowsyness = max(drowsyness, 30/sober_str) + Paralyse(5/sober_str) + Drowsy(30/sober_str) if(L) L.take_damage(0.1, 1) adjustToxLoss(0.1) @@ -837,14 +835,14 @@ vision = get_int_organ(species.vision_organ) if(!species.vision_organ) // Presumably if a species has no vision organs, they see via some other means. - eye_blind = 0 + SetEyeBlind(0) blinded = 0 - eye_blurry = 0 + SetEyeBlurry(0) else if(!vision || vision.is_broken()) // Vision organs cut out or broken? Permablind. - eye_blind = 1 + EyeBlind(1) blinded = 1 - eye_blurry = 1 + EyeBlurry(1) else //blindness @@ -852,34 +850,34 @@ blinded = 1 else if(eye_blind) // Blindness, heals slowly over time - eye_blind = max(eye_blind-1,0) + AdjustEyeBlind(-1) blinded = 1 else if(istype(glasses, /obj/item/clothing/glasses/sunglasses/blindfold)) //resting your eyes with a blindfold heals blurry eyes faster - eye_blurry = max(eye_blurry-3, 0) + AdjustEyeBlurry(-3) blinded = 1 //blurry sight if(vision.is_bruised()) // Vision organs impaired? Permablurry. - eye_blurry = 1 + EyeBlurry(1) if(eye_blurry) // Blurry eyes heal slowly - eye_blurry = max(eye_blurry-1, 0) + AdjustEyeBlurry(-1) //Ears if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own - setEarDamage(-1, max(ear_deaf, 1)) + EarDeaf(1) else if(ear_deaf) //deafness, heals slowly over time - adjustEarDamage(0,-1) + AdjustEarDeaf(-1) else if(istype(l_ear, /obj/item/clothing/ears/earmuffs) || istype(r_ear, /obj/item/clothing/ears/earmuffs)) //resting your ears with earmuffs heals ear damage faster - adjustEarDamage(-0.15,0) - setEarDamage(-1, max(ear_deaf, 1)) + AdjustEarDamage(-0.15) + EarDeaf(1) else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs - adjustEarDamage(-0.05,0) + AdjustEarDamage(-0.05) if(flying) animate(src, pixel_y = pixel_y + 5 , time = 10, loop = 1, easing = SINE_EASING) @@ -896,7 +894,7 @@ else //dead blinded = 1 - silent = 0 + SetSilence(0) /mob/living/carbon/human/handle_vision() @@ -995,8 +993,8 @@ if(shock_stage >= 30) if(shock_stage == 30) custom_emote(1,"is having trouble keeping their eyes open.") - eye_blurry = max(2, eye_blurry) - stuttering = max(stuttering, 5) + EyeBlurry(2) + Stuttering(5) if(shock_stage == 40) to_chat(src, ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!")) @@ -1183,8 +1181,7 @@ if(!heart_attack) return else - if(losebreath < 3) - losebreath += 2 + AdjustLoseBreath(2, bound_lower = 0, bound_upper = 3) adjustOxyLoss(5) adjustBruteLoss(1) diff --git a/code/modules/mob/living/carbon/human/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm index d8434a87223..49d6d7fe245 100644 --- a/code/modules/mob/living/carbon/human/species/plasmaman.dm +++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm @@ -189,7 +189,7 @@ if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit H.Paralyse(3) // 3 gives them one second to wake up and run away a bit! if(SA_pp > SA_sleep_min) // Enough to make us sleep as well - H.sleeping = min(H.sleeping+2, 10) + H.AdjustSleeping(2, bound_lower = 0, bound_upper = 10) else if(SA_pp > 0.15) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning if(prob(20)) spawn(0) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 33aa58b94d4..42b73c3e59d 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -332,7 +332,7 @@ if(SA_pp > atmos_requirements["sa_para"]) // Enough to make us paralysed for a bit H.Paralyse(3) // 3 gives them one second to wake up and run away a bit! if(SA_pp > atmos_requirements["sa_sleep"]) // Enough to make us sleep as well - H.sleeping = max(H.sleeping + 2, 10) + H.AdjustSleeping(2, bound_lower = 0, bound_upper = 10) else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning if(prob(20)) spawn(0) @@ -509,7 +509,7 @@ if(tinted_weldhelh) H.overlay_fullscreen("tint", /obj/screen/fullscreen/impaired, 2) if(H.tinttotal >= TINT_BLIND) - H.eye_blind = max(H.eye_blind, 1) + H.EyeBlind(1) else H.clear_fullscreen("tint") diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 985047a8284..ec4206a7dd5 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -49,10 +49,10 @@ var/datum/gas_mixture/breath if(health <= config.health_threshold_crit) - losebreath++ + AdjustLoseBreath(1) - if(losebreath > 0) - losebreath-- + if(lose_breath > 0) + AdjustLoseBreath(-1) if(prob(10)) spawn emote("gasp") if(istype(loc, /obj/)) @@ -165,7 +165,7 @@ if(SA_partialpressure > SA_para_min) Paralyse(3) if(SA_partialpressure > SA_sleep_min) - sleeping = max(sleeping+2, 10) + AdjustSleeping(2, bound_lower = 0, bound_upper = 10) else if(SA_partialpressure > 0.01) if(prob(20)) spawn(0) emote(pick("giggle","laugh")) @@ -319,30 +319,27 @@ C.pixel_x -= pixel_x_diff C.pixel_y -= pixel_y_diff src = oldsrc - dizziness = max(dizziness - restingpwr, 0) + AdjustDizzy(-restingpwr) - if(drowsyness) - drowsyness = max(drowsyness - restingpwr, 0) - eye_blurry = max(2, eye_blurry) + if(drowsy) + AdjustDrowsy(-restingpwr) + EyeBlurry(2) if(prob(5)) - sleeping += 1 + AdjustSleeping(1) Paralyse(5) if(confused) - confused = max(0, confused - 1) + AdjustConfused(-1) //Jitteryness if(jitteriness) do_jitter_animation(jitteriness) - jitteriness = max(jitteriness - restingpwr, 0) + AdjustJitter(-restingpwr) if(hallucination) spawn handle_hallucinations() - if(hallucination<=2) - hallucination = 0 - else - hallucination -= 2 + AdjustHallucinate(-2) /mob/living/carbon/handle_sleeping() if(..()) @@ -352,8 +349,8 @@ spawn(0) emote("snore") // Keep SSD people asleep - if(player_logged && sleeping < 2) - sleeping = 2 + if(player_logged) + Sleeping(2) return sleeping diff --git a/code/modules/mob/living/carbon/slime/life.dm b/code/modules/mob/living/carbon/slime/life.dm index b51e0084ee3..6e3221c19fa 100644 --- a/code/modules/mob/living/carbon/slime/life.dm +++ b/code/modules/mob/living/carbon/slime/life.dm @@ -208,25 +208,25 @@ if(src.stuttering) src.stuttering = 0 if(src.eye_blind) - src.eye_blind = 0 + src.SetEyeBlind(0) src.blinded = 1 - if(src.ear_deaf > 0) src.ear_deaf = 0 + if(src.ear_deaf > 0) SetEarDeaf(0) if(src.ear_damage < 25) - src.ear_damage = 0 + SetEarDamage(0) src.density = !( src.lying ) if(src.disabilities & BLIND) src.blinded = 1 if(src.disabilities & DEAF) - src.ear_deaf = 1 + EarDeaf(1) if(src.eye_blurry > 0) - src.eye_blurry = 0 + SetEyeBlurry(0) if(src.druggy > 0) - src.druggy = 0 + SetDruggy(0) return 1 diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 921080c989a..ffd1fb9cd60 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -57,17 +57,16 @@ rad_damage = max(effect * ((100-run_armor_check(null, "rad", "Your clothes feel warm.", "Your clothes feel warm."))/100),0) radiation += rad_damage if(SLUR) - slurring = max(slurring,(effect * blocked)) + Slur(effect * blocked) if(STUTTER) - if(status_flags & CANSTUN) // stun is usually associated with stutter - stuttering = max(stuttering,(effect * blocked)) + Stuttering(effect * blocked) if(EYE_BLUR) - eye_blurry = max(eye_blurry,(effect * blocked)) + EyeBlurry(effect * blocked) if(DROWSY) - drowsyness = max(drowsyness,(effect * blocked)) + Drowsy(effect * blocked) if(JITTER) if(status_flags & CANSTUN) - jitteriness = max(jitteriness,(effect * blocked)) + Jitter(effect * blocked) updatehealth() return 1 diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index a151a062bce..308025e0204 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -136,17 +136,17 @@ /mob/living/proc/handle_silent() if(silent) - silent = max(silent-1, 0) + AdjustSilence(-1) return silent /mob/living/proc/handle_drugged() if(druggy) - druggy = max(druggy-1, 0) + AdjustDruggy(-1) return druggy /mob/living/proc/handle_slurring() if(slurring) - slurring = max(slurring-1, 0) + AdjustSlur(-1) return slurring /mob/living/proc/handle_paralysed() @@ -164,7 +164,7 @@ /mob/living/proc/handle_slowed() if(slowed) - slowed = max(slowed-1, 0) + AdjustSlowed(-1) return slowed /mob/living/proc/handle_drunk() @@ -175,19 +175,20 @@ /mob/living/proc/handle_disabilities() //Eyes if(disabilities & BLIND || stat) //blindness from disability or unconsciousness doesn't get better on its own - eye_blind = max(eye_blind, 1) + EyeBlind(1) else if(eye_blind) //blindness, heals slowly over time - eye_blind = max(eye_blind-1,0) + AdjustEyeBlind(-1) else if(eye_blurry) //blurry eyes heal slowly - eye_blurry = max(eye_blurry-1, 0) + AdjustEyeBlurry(-1) //Ears if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own - setEarDamage(-1, max(ear_deaf, 1)) + EarDeaf(1) else // deafness heals slowly over time, unless ear_damage is over 100 if(ear_damage < 100) - adjustEarDamage(-0.05,-1) + AdjustEarDamage(-0.05) + AdjustEarDeaf(-1) //this handles hud updates. Calls update_vision() and handle_hud_icons() /mob/living/proc/handle_regular_hud_updates() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 72cc4789779..52215b3e08b 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -261,19 +261,6 @@ var/obj/item/organ/external/def_zone = ran_zone(t) return def_zone - -//damage/heal the mob ears and adjust the deaf amount -/mob/living/adjustEarDamage(damage, deaf) - ear_damage = max(0, ear_damage + damage) - ear_deaf = max(0, ear_deaf + deaf) - -//pass a negative argument to skip one of the variable -/mob/living/setEarDamage(damage, deaf) - if(damage >= 0) - ear_damage = damage - if(deaf >= 0) - ear_deaf = deaf - // heal ONE external organ, organ gets randomly selected from damaged ones. /mob/living/proc/heal_organ_damage(var/brute, var/burn) adjustBruteLoss(-brute) @@ -328,8 +315,8 @@ dead_mob_list -= src living_mob_list |= src mob_list |= src - setEarDamage(-1,0) - timeofdeath = 0 + SetEarDeaf(0) + timeofdeath = null /mob/living/proc/rejuvenate() var/mob/living/carbon/human/human_mob = null //Get this declared for use later. @@ -344,22 +331,30 @@ SetParalysis(0) SetStunned(0) SetWeakened(0) - slowed = 0 - losebreath = 0 - dizziness = 0 - jitteriness = 0 - confused = 0 - drowsyness = 0 + SetSlowed(0) + SetLoseBreath(0) + SetDizzy(0) + SetJitter(0) + SetConfused(0) + SetDrowsy(0) radiation = 0 - druggy = 0 - hallucination = 0 + SetDruggy(0) + SetHallucinate(0) + blinded = 0 nutrition = 400 bodytemperature = 310 - disabilities = 0 - blinded = 0 - eye_blind = 0 - eye_blurry = 0 - setEarDamage(0,0) + CureBlind() + CureNearsighted() + CureMute() + CureDeaf() + CureTourettes() + CureEpilepsy() + CureCoughing() + CureNervous() + SetEyeBlind(0) + SetEyeBlurry(0) + SetEarDamage(0) + SetEarDeaf(0) heal_overall_damage(1000, 1000) ExtinguishMob() fire_stacks = 0 diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index c142c8d28d1..c3dab651906 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -15,8 +15,6 @@ var/brainloss = 0 //'Retardation' damage caused by someone hitting you in the head with a bible or being infected with brainrot. var/staminaloss = 0 //Stamina damage, or exhaustion. You recover it slowly naturally, and are stunned if it gets too high. Holodeck and hallucinations deal this. - var/hallucination = 0 //Directly affects how long a mob will hallucinate for - var/last_special = 0 //Used by the resist verb, likely used to prevent players from bypassing next_move by logging in/out. @@ -32,7 +30,6 @@ var/update_slimes = 1 var/implanting = 0 //Used for the mind-slave implant - var/silent = 0 //Can't talk. Value goes down every life proc. //NOTE TO FUTURE CODERS: DO NOT INITIALIZE NUMERICAL VARS AS NULL OR I WILL MURDER YOU. var/floating = 0 var/mob_size = MOB_SIZE_HUMAN var/nightvision = 0 diff --git a/code/modules/mob/living/logout.dm b/code/modules/mob/living/logout.dm index 71e26e60858..10ba19b4302 100644 --- a/code/modules/mob/living/logout.dm +++ b/code/modules/mob/living/logout.dm @@ -4,6 +4,6 @@ if(!key) //key and mind have become seperated. I believe this is for when a staff member aghosts. mind.active = 0 //This is to stop say, a mind.transfer_to call on a corpse causing a ghost to re-enter its body. //This causes instant sleep and tags a player as SSD. See life.dm for furthering SSD. - if(sleeping < 2 && mind.active) - sleeping = 2 - player_logged = 1 \ No newline at end of file + if(mind.active) + Sleeping(2) + player_logged = 1 diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm index 8cf6863eafb..2a3b39c1c9b 100644 --- a/code/modules/mob/living/silicon/ai/say.dm +++ b/code/modules/mob/living/silicon/ai/say.dm @@ -82,7 +82,7 @@ var/const/VOX_PATH = "sound/vox_fem/" for(var/mob/M in player_list) if(M.client) var/turf/T = get_turf(M) - if(T && T.z == z_level && !isdeaf(M)) + if(T && T.z == z_level && M.can_hear()) M << voice else only_listener << voice diff --git a/code/modules/mob/living/silicon/login.dm b/code/modules/mob/living/silicon/login.dm index bd93fd6c3c4..01240adf942 100644 --- a/code/modules/mob/living/silicon/login.dm +++ b/code/modules/mob/living/silicon/login.dm @@ -1,5 +1,5 @@ /mob/living/silicon/Login() - sleeping = 0 + SetSleeping(0) if(mind && ticker && ticker.mode) ticker.mode.remove_revolutionary(mind, 1) ticker.mode.remove_cultist(mind, 1) @@ -9,4 +9,4 @@ ticker.mode.remove_thrall(mind, 0) ticker.mode.remove_shadowling(mind) ticker.mode.remove_abductor(mind) - ..() \ No newline at end of file + ..() diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index b2c8857f040..ca480d987f8 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -62,7 +62,7 @@ if(sleeping) Paralyse(3) - sleeping-- + AdjustSleeping(-1) if(resting) Weaken(5) @@ -90,7 +90,7 @@ stat = UNCONSCIOUS if(!paralysis > 0) - eye_blind = 0 + SetEyeBlind(0) else stat = CONSCIOUS @@ -98,7 +98,7 @@ diag_hud_set_health() diag_hud_set_status() else //dead - eye_blind = 1 + SetEyeBlind(0) //update the state of modules and components here if(stat != CONSCIOUS) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 75bbec89a1b..469b6e86574 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -152,7 +152,7 @@ //Silicon mob language procs -/mob/living/silicon/can_speak(datum/language/speaking) +/mob/living/silicon/can_speak_language(datum/language/speaking) return universal_speak || (speaking in src.speech_synthesizer_langs) //need speech synthesizer support to vocalize a language /mob/living/silicon/add_language(var/language, var/can_speak=1) @@ -355,8 +355,8 @@ /////////////////////////////////// EAR DAMAGE //////////////////////////////////// -/mob/living/silicon/adjustEarDamage() +/mob/living/silicon/SetEarDamage() return -/mob/living/silicon/setEarDamage() - return \ No newline at end of file +/mob/living/silicon/SetEarDeaf() + return diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index cb48c63b66f..d0e8e0e4bad 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -118,11 +118,11 @@ for(var/atom/check in check_list) for(var/mob/living/M in viewers(world.view + 1, check) - src) if(M.client && CanAttack(M) && !M.has_unlimited_silicon_privilege) - if(!M.eye_blind) + if(M.can_see()) return M for(var/obj/mecha/M in view(world.view + 1, check)) //assuming if you can see them they can see you if(M.occupant && M.occupant.client) - if(!M.occupant.eye_blind) + if(M.occupant.can_see()) return M.occupant return null @@ -185,7 +185,7 @@ continue var/turf/T = get_turf(L.loc) if(T && T in targets) - L.eye_blind = max(L.eye_blind, 4) + L.EyeBlind(4) return //Toggle Night Vision diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 06160dca1fd..cc5b319c84f 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -706,8 +706,8 @@ /mob/living/simple_animal/proc/sentience_act() //Called when a simple animal gains sentience via gold slime potion return -/mob/living/simple_animal/adjustEarDamage() +/mob/living/simple_animal/SetEarDamage() return -/mob/living/simple_animal/setEarDamage() - return \ No newline at end of file +/mob/living/simple_animal/SetEarDeaf() + return diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm new file mode 100644 index 00000000000..3b7189a5cdf --- /dev/null +++ b/code/modules/mob/living/status_procs.dm @@ -0,0 +1,522 @@ +//Here are the procs used to modify status effects of a mob. + +// We use these to automatically apply their effects when they are changed, as +// opposed to setting them manually and having to either wait for the next `Life` +// or update by hand + +// The `updating` argument is only available on effects that cause a visual/physical effect on the mob itself +// when applied, such as Stun, Weaken, and Jitter - stuff like Blindness, which has a client-side effect, +// lacks this argument. + +// Ideally, code should only read the vars in this file, and not ever directly +// modify them + +// If you want a mob type to ignore a given status effect, just override the corresponding +// `SetSTATE` proc - since all of the other procs are wrappers around that, +// calling them will have no effect + +// BOOLEAN STATES + +/* + * EyesBlocked + Your eyes are covered somehow + * EarsBlocked + Your ears are covered somehow + * Resting + You are lying down of your own volition + * Flying + For some reason or another you can move while not touching the ground +*/ + + +// STATUS EFFECTS +// All of these decrement over time - at a rate of 1 per life cycle unless otherwise noted +// Status effects sorted alphabetically: +/* + * Confused * + Movement is scrambled + * Dizzy * + The screen goes all warped + * Drowsy + You begin to yawn, and have a chance of incrementing "Paralysis" + * Druggy * + A trippy overlay appears. + * Drunk * + Essentially what your "BAC" is - the higher it is, the more alcohol you have in you + * EarDamage * + Doesn't do much, but if it's 25+, you go deaf. Heals much slower than other statuses - 0.05 normally + * EarDeaf * + You cannot hear. Prevents EarDamage from healing naturally. + * EyeBlind * + You cannot see. Prevents EyeBlurry from healing naturally. + * EyeBlurry * + A hazy overlay appears on your screen. + * Hallucination * + Your character will imagine various effects happening to them, vividly. + * Jitter * + Your character will visibly twitch. Higher values amplify the effect. + * LoseBreath * + Your character is unable to breathe. + * Paralysis * + Your character is knocked out. + * Silent * + Your character is unable to speak. + * Sleeping * + Your character is asleep. + * Slowed * + Your character moves slower. + * Slurring * + Your character cannot enunciate clearly. + * Stunned * + Your character is unable to move, and drops stuff in their hands. They keep standing, though. + * Stuttering * + Your character stutters parts of their messages. + * Weakened * + Your character collapses, but is still conscious. +*/ + +// DISABILITIES +// These are more permanent than the above. +// Disabilities sorted alphabetically +/* + * Blind (32) + Can't see. EyeBlind does not heal when this is active. + * Coughing (4) + Cough occasionally, causing you to drop your items + * Deaf (128) + Can't hear. EarDeaf does not heal when this is active + * Epilepsy (2) + Occasionally go "Epileptic", causing you to become very twitchy, drop all items, and fall to the floor + * Mute (64) + Cannot talk. + * Nearsighted (1) + My glasses! I can't see without my glasses! (Nearsighted overlay when not wearing prescription eyewear) + * Nervous (16) + Occasionally begin to stutter. + * Tourettes (8) + SHIT (say bad words, and drop stuff occasionally) +*/ + +/mob/living + + // Booleans + var/resting = FALSE + + /* + STATUS EFFECTS + */ + +/mob // On `/mob` for now, to support legacy code + var/confused = 0 + var/dizziness = 0 + var/drowsy = 0 + var/druggy = 0 + var/drunk = 0 + var/ear_damage = 0 + var/ear_deaf = 0 + var/eye_blind = 0 + var/eye_blurry = 0 + var/hallucination = 0 + var/jitteriness = 0 + var/lose_breath = 0 + var/paralysis = 0 + var/silent = 0 + var/sleeping = 0 + var/slowed = 0 + var/slurring = 0 + var/stunned = 0 + var/stuttering = 0 + var/weakened = 0 + +/mob/living + // Bitfields + var/disabilities = 0 + +// RESTING + +/mob/living/proc/StartResting(updating = 1) + var/val_change = !resting + resting = TRUE + if(updating && val_change) + update_canmove() + +/mob/living/proc/StopResting(updating = 1) + var/val_change = !!resting + resting = FALSE + if(updating && val_change) + update_canmove() + +/mob/living/proc/StartFlying() + var/val_change = !flying + flying = TRUE + if(val_change) + update_animations() + +/mob/living/proc/StopFlying() + var/val_change = !!flying + flying = FALSE + if(val_change) + update_animations() + + +// SCALAR STATUS EFFECTS + +// CONFUSED + +/mob/living/Confused(amount) + SetConfused(max(confused, amount)) + +/mob/living/SetConfused(amount) + confused = max(amount, 0) + +/mob/living/AdjustConfused(amount, bound_lower = 0, bound_upper = INFINITY) + var/new_value = directional_bounded_sum(confused, amount, bound_lower, bound_upper) + SetConfused(new_value) + +// DIZZY + +/mob/living/Dizzy(amount) + SetDizzy(max(dizziness, amount)) + +/mob/living/SetDizzy(amount) + dizziness = max(amount, 0) + +/mob/living/AdjustDizzy(amount, bound_lower = 0, bound_upper = INFINITY) + var/new_value = directional_bounded_sum(dizziness, amount, bound_lower, bound_upper) + SetDizzy(new_value) + +// DROWSY + +/mob/living/Drowsy(amount) + SetDrowsy(max(drowsy, amount)) + +/mob/living/SetDrowsy(amount) + drowsy = max(amount, 0) + +/mob/living/AdjustDrowsy(amount, bound_lower = 0, bound_upper = INFINITY) + var/new_value = directional_bounded_sum(drowsy, amount, bound_lower, bound_upper) + SetDrowsy(new_value) + +// DRUNK + +/mob/living/Drunk(amount) + SetDrunk(max(drunk, amount)) + +/mob/living/SetDrunk(amount) + drunk = max(amount, 0) + +/mob/living/AdjustDrunk(amount, bound_lower = 0, bound_upper = INFINITY) + var/new_value = directional_bounded_sum(drunk, amount, bound_lower, bound_upper) + SetDrunk(new_value) + +// DRUGGY + +/mob/living/Druggy(amount) + SetDruggy(max(druggy, amount)) + +/mob/living/SetDruggy(amount) + var/old_val = druggy + druggy = max(amount, 0) + // We transitioned to/from 0, so update the druggy overlays + if((old_val == 0 || druggy == 0) && (old_val != druggy)) + update_druggy_effects() + +/mob/living/AdjustDruggy(amount, bound_lower = 0, bound_upper = INFINITY) + var/new_value = directional_bounded_sum(druggy, amount, bound_lower, bound_upper) + SetDruggy(new_value) + +// EAR_DAMAGE + +/mob/living/EarDamage(amount) + SetEarDamage(max(ear_damage, amount)) + +/mob/living/SetEarDamage(amount) + ear_damage = max(amount, 0) + +/mob/living/AdjustEarDamage(amount, bound_lower = 0, bound_upper = INFINITY) + var/new_value = directional_bounded_sum(ear_damage, amount, bound_lower, bound_upper) + SetEarDamage(new_value) + +// EAR_DEAF + +/mob/living/EarDeaf(amount) + SetEarDeaf(max(ear_deaf, amount)) + +/mob/living/SetEarDeaf(amount) + ear_deaf = max(amount, 0) + +/mob/living/AdjustEarDeaf(amount, bound_lower = 0, bound_upper = INFINITY) + var/new_value = directional_bounded_sum(ear_deaf, amount, bound_lower, bound_upper) + SetEarDeaf(new_value) + +// EYE_BLIND + +/mob/living/EyeBlind(amount) + SetEyeBlind(max(eye_blind, amount)) + +/mob/living/SetEyeBlind(amount) + var/old_val = eye_blind + eye_blind = max(amount, 0) + // We transitioned to/from 0, so update the eye blind overlays + if((old_val == 0 || eye_blind == 0) && (old_val != eye_blind)) + update_blind_effects() + +/mob/living/AdjustEyeBlind(amount, bound_lower = 0, bound_upper = INFINITY) + var/new_value = directional_bounded_sum(eye_blind, amount, bound_lower, bound_upper) + SetEyeBlind(new_value) + +// EYE_BLURRY + +/mob/living/EyeBlurry(amount) + SetEyeBlurry(max(eye_blurry, amount)) + +/mob/living/SetEyeBlurry(amount) + var/old_val = eye_blurry + eye_blurry = max(amount, 0) + // We transitioned to/from 0, so update the eye blur overlays + if((old_val == 0 || eye_blurry == 0) && (old_val != eye_blurry)) + update_blurry_effects() + +/mob/living/AdjustEyeBlurry(amount, bound_lower = 0, bound_upper = INFINITY) + var/new_value = directional_bounded_sum(eye_blurry, amount, bound_lower, bound_upper) + SetEyeBlurry(new_value) + +// HALLUCINATION + +/mob/living/Hallucinate(amount) + SetHallucinate(max(hallucination, amount)) + +/mob/living/SetHallucinate(amount) + hallucination = max(amount, 0) + +/mob/living/AdjustHallucinate(amount, bound_lower = 0, bound_upper = INFINITY) + var/new_value = directional_bounded_sum(hallucination, amount, bound_lower, bound_upper) + SetHallucinate(new_value) + +// JITTER + +/mob/living/Jitter(amount, force = 0) + SetJitter(max(jitteriness, amount), force) + +/mob/living/SetJitter(amount, force = 0) + // Jitter is also associated with stun + if(status_flags & CANSTUN || force) + jitteriness = max(amount, 0) + else + jitteriness = 0 + +/mob/living/AdjustJitter(amount, bound_lower = 0, bound_upper = INFINITY, force = 0) + var/new_value = directional_bounded_sum(jitteriness, amount, bound_lower, bound_upper) + SetJitter(new_value, force) + +// LOSE_BREATH + +/mob/living/LoseBreath(amount) + SetLoseBreath(max(lose_breath, amount)) + +/mob/living/SetLoseBreath(amount) + lose_breath = max(amount, 0) + +/mob/living/AdjustLoseBreath(amount, bound_lower = 0, bound_upper = INFINITY) + var/new_value = directional_bounded_sum(lose_breath, amount, bound_lower, bound_upper) + SetLoseBreath(new_value) + +// PARALYSE + +/mob/living/Paralyse(amount, updating = 1, force = 0) + SetParalysis(max(paralysis, amount), updating, force) + +/mob/living/SetParalysis(amount, updating = 1, force = 0) + if(status_flags & CANPARALYSE || force) + paralysis = max(amount, 0) + else + paralysis = 0 + if(updating) + update_canmove() + update_stat() + +/mob/living/AdjustParalysis(amount, bound_lower = 0, bound_upper = INFINITY, updating = 1, force = 0) + var/new_value = directional_bounded_sum(paralysis, amount, bound_lower, bound_upper) + SetParalysis(new_value, updating, force) + +// SILENT + +/mob/living/Silence(amount) + SetSilence(max(silent, amount)) + +/mob/living/SetSilence(amount) + silent = max(amount, 0) + +/mob/living/AdjustSilence(amount, bound_lower = 0, bound_upper = INFINITY) + var/new_value = directional_bounded_sum(silent, amount, bound_lower, bound_upper) + SetSilence(new_value) + +// SLEEPING + +/mob/living/Sleeping(amount, updating = 1) + SetSleeping(max(sleeping, amount), updating) + +/mob/living/SetSleeping(amount, updating = 1) + sleeping = max(amount, 0) + update_sleeping_effects() + if(updating) + update_stat() + +/mob/living/AdjustSleeping(amount, bound_lower = 0, bound_upper = INFINITY, updating = 1) + var/new_value = directional_bounded_sum(sleeping, amount, bound_lower, bound_upper) + SetSleeping(new_value, updating) + +// SLOWED + +/mob/living/Slowed(amount, updating = 1) + SetSlowed(max(slowed, amount), updating) + +/mob/living/SetSlowed(amount, updating = 1) + slowed = max(amount, 0) + +/mob/living/AdjustSlowed(amount, bound_lower = 0, bound_upper = INFINITY, updating = 1) + var/new_value = directional_bounded_sum(slowed, amount, bound_lower, bound_upper) + SetSlowed(new_value, updating) + +// SLURRING + +/mob/living/Slur(amount) + SetSlur(max(slurring, amount)) + +/mob/living/SetSlur(amount) + slurring = max(amount, 0) + +/mob/living/AdjustSlur(amount, bound_lower = 0, bound_upper = INFINITY) + var/new_value = directional_bounded_sum(slurring, amount, bound_lower, bound_upper) + SetSlur(new_value) + +// STUN + +/mob/living/Stun(amount, updating = 1, force = 0) + SetStunned(max(stunned, amount), updating, force) + +/mob/living/SetStunned(amount, updating = 1, force = 0) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned" + if(status_flags & CANSTUN || force) + stunned = max(amount, 0) + else if(stunned) + stunned = 0 + if(updating) + update_canmove() + +/mob/living/AdjustStunned(amount, bound_lower = 0, bound_upper = INFINITY, updating = 1, force = 0) + var/new_value = directional_bounded_sum(stunned, amount, bound_lower, bound_upper) + SetStunned(new_value, updating, force) + +// STUTTERING + + +/mob/living/Stuttering(amount, force = 0) + SetStuttering(max(stuttering, amount), force) + +/mob/living/SetStuttering(amount, force = 0) + //From mob/living/apply_effect: "Stuttering is often associated with Stun" + if(status_flags & CANSTUN || force) + stuttering = max(stuttering, 0) + else + stuttering = 0 + +/mob/living/AdjustStuttering(amount, bound_lower = 0, bound_upper = INFINITY, force = 0) + var/new_value = directional_bounded_sum(stuttering, amount, bound_lower, bound_upper) + SetStuttering(new_value, force) + +// WEAKEN + +/mob/living/Weaken(amount, updating = 1, force = 0) + SetWeakened(max(weakened, amount), updating, force) + +/mob/living/SetWeakened(amount, updating = 1, force = 0) + if(status_flags & CANWEAKEN || force) + weakened = max(amount, 0) + else + weakened = 0 + if(updating) + update_canmove() //updates lying, canmove and icons + +/mob/living/AdjustWeakened(amount, bound_lower = 0, bound_upper = INFINITY, updating = 1, force = 0) + var/new_value = directional_bounded_sum(weakened, amount, bound_lower, bound_upper) + SetWeakened(new_value, updating, force) + +// +// DISABILITIES +// + +// Blind + +/mob/living/proc/BecomeBlind() + var/val_change = !(disabilities & BLIND) + disabilities |= BLIND + if(val_change) + update_blind_effects() + +/mob/living/proc/CureBlind() + var/val_change = !!(disabilities & BLIND) + disabilities &= ~BLIND + if(val_change) + update_blind_effects() + +// Coughing + +/mob/living/proc/BecomeCoughing() + disabilities |= COUGHING + +/mob/living/proc/CureCoughing() + disabilities &= ~COUGHING + +// Deaf + +/mob/living/proc/BecomeDeaf() + disabilities |= DEAF + +/mob/living/proc/CureDeaf() + disabilities &= ~DEAF + +// Epilepsy + +/mob/living/proc/BecomeEpilepsy() + disabilities |= EPILEPSY + +/mob/living/proc/CureEpilepsy() + disabilities &= ~EPILEPSY + +// Mute + +/mob/living/proc/BecomeMute() + disabilities |= MUTE + +/mob/living/proc/CureMute() + disabilities &= ~MUTE + +// Nearsighted + +/mob/living/proc/BecomeNearsighted() + var/val_change = !(disabilities & NEARSIGHTED) + disabilities |= NEARSIGHTED + if(val_change) + update_nearsighted_effects() + +/mob/living/proc/CureNearsighted() + var/val_change = !!(disabilities & NEARSIGHTED) + disabilities &= ~NEARSIGHTED + if(val_change) + update_nearsighted_effects() + +// Nervous + +/mob/living/proc/BecomeNervous() + disabilities |= NERVOUS + +/mob/living/proc/CureNervous() + disabilities &= ~NERVOUS + +// Tourettes + +/mob/living/proc/BecomeTourettes() + disabilities |= TOURETTES + +/mob/living/proc/CureTourettes() + disabilities &= ~TOURETTES diff --git a/code/modules/mob/living/update_status.dm b/code/modules/mob/living/update_status.dm new file mode 100644 index 00000000000..5cbf7cae450 --- /dev/null +++ b/code/modules/mob/living/update_status.dm @@ -0,0 +1,97 @@ +/mob/living/update_blind_effects() + if(!can_see()) + overlay_fullscreen("blind", /obj/screen/fullscreen/blind) + throw_alert("blind", /obj/screen/alert/blind) + return 1 + else + clear_fullscreen("blind") + clear_alert("blind") + return 0 + +/mob/living/update_blurry_effects() + if(eyes_blurred()) + overlay_fullscreen("blurry", /obj/screen/fullscreen/blurry) + return 1 + else + clear_fullscreen("blurry") + return 0 + +/mob/living/update_druggy_effects() + if(druggy) + overlay_fullscreen("high", /obj/screen/fullscreen/high) + throw_alert("high", /obj/screen/alert/high) + else + clear_fullscreen("high") + clear_alert("high") + +/mob/living/update_nearsighted_effects() + if(disabilities & NEARSIGHTED) + overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1) + else + clear_fullscreen("nearsighted") + +/mob/living/update_sleeping_effects() + if(sleeping) + throw_alert("asleep", /obj/screen/alert/asleep) + else + clear_alert("asleep") + +// Querying status of the mob + +// Whether the mob can hear things +/mob/living/can_hear() + return !(ear_deaf || (disabilities & DEAF)) + +// Whether the mob is able to see +/mob/living/can_see() + return !(eye_blind || (disabilities & BLIND) || stat) + +// Whether the mob is capable of talking +/mob/living/can_speak() + return !(silent || (disabilities & MUTE) || is_muzzled()) + +// Whether the mob is capable of standing or not +/mob/living/proc/can_stand() + return !(weakened || paralysis || stat || (status_flags & FAKEDEATH)) + +// Whether the mob is capable of actions or not +/mob/living/incapacitated(ignore_restraints = 0, ignore_grab = 0, ignore_lying = 0) + if(stat || paralysis || stunned || (weakened && lying) || (!ignore_restraints && restrained()) || (!ignore_lying && lying)) + return 1 + +// wonderful proc names, I know - used to check whether the blur overlay +// should show or not +/mob/living/proc/eyes_blurred() + return eye_blurry + +//Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it. +/mob/living/update_canmove(delay_action_updates = 0) + var/fall_over = !can_stand() + var/buckle_lying = !(buckled && !buckled.buckle_lying) + if(fall_over || resting || stunned) + drop_r_hand() + drop_l_hand() + else + lying = 0 + canmove = 1 + if(buckled) + lying = 90 * buckle_lying + else if((fall_over || resting) && !lying) + fall(fall_over) + + canmove = !(fall_over || resting || stunned || buckled) + density = !lying + if(lying) + if(layer == initial(layer)) + layer = MOB_LAYER - 0.2 + else + if(layer == MOB_LAYER - 0.2) + layer = initial(layer) + + update_transform() + if(!delay_action_updates) + update_action_buttons_icon() + return canmove + +/mob/living/proc/update_stamina() + return diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 4a292328fb6..e312ff9556b 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -62,22 +62,22 @@ if(!client) return if(type) - if(type & 1 && (disabilities & BLIND || blinded || paralysis) )//Vision related + if(type & 1 && !can_see())//Vision related if(!( alt )) return else msg = alt type = alt_type - if(type & 2 && (disabilities & DEAF || ear_deaf))//Hearing related + if(type & 2 && !can_hear())//Hearing related if(!( alt )) return else msg = alt type = alt_type - if((type & 1 && disabilities & BLIND)) + if(type & 1 && !can_see()) return // Added voice muffling for Issue 41. - if(stat == UNCONSCIOUS || (sleeping > 0 && stat != 2)) + if(stat == UNCONSCIOUS || (sleeping > 0 && stat != DEAD)) to_chat(src, "... You can almost hear someone talking ...") else to_chat(src, msg) @@ -163,13 +163,6 @@ // handle_typing_indicator() return - -/mob/proc/restrained() - return - -/mob/proc/incapacitated() - return - //This proc is called whenever someone clicks an inventory ui slot. /mob/proc/attack_ui(slot) var/obj/item/W = get_active_hand() @@ -1031,36 +1024,6 @@ var/list/slot_equipment_priority = list( \ if(restrained()) return 0 return 1 -//Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it. -/mob/proc/update_canmove(delay_action_updates = 0) - var/ko = weakened || paralysis || stat || (status_flags & FAKEDEATH) - var/buckle_lying = !(buckled && !buckled.buckle_lying) - if(ko || resting || stunned) - drop_r_hand() - drop_l_hand() - else - lying = 0 - canmove = 1 - if(buckled) - lying = 90 * buckle_lying - else - if((ko || resting) && !lying) - fall(ko) - - canmove = !(ko || resting || stunned || buckled) - density = !lying - if(lying) - if(layer == initial(layer)) - layer = MOB_LAYER - 0.2 - else - if(layer == MOB_LAYER - 0.2) - layer = initial(layer) - - update_transform() - if(!delay_action_updates) - update_action_buttons_icon() - return canmove - /mob/proc/fall(var/forced) drop_l_hand() drop_r_hand() @@ -1101,77 +1064,6 @@ var/list/slot_equipment_priority = list( \ /mob/proc/activate_hand(selhand) return -/mob/proc/Jitter(amount) - jitteriness = max(jitteriness, amount, 0) - -/mob/proc/Dizzy(amount) - dizziness = max(dizziness, amount, 0) - -/mob/proc/AdjustDrunk(amount) - drunk = max(drunk + amount, 0) - -/mob/proc/Stun(amount) - SetStunned(max(stunned, amount)) - -/mob/proc/SetStunned(amount) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned" - if(status_flags & CANSTUN) - stunned = max(amount, 0) - update_canmove() - else if(stunned) - stunned = 0 - update_canmove() - -/mob/proc/AdjustStunned(amount) - SetStunned(stunned + amount) - -/mob/proc/Weaken(amount) - SetWeakened(max(weakened, amount)) - -/mob/proc/SetWeakened(amount) - if(status_flags & CANWEAKEN) - weakened = max(amount, 0) - update_canmove() //updates lying, canmove and icons - else if(weakened) - weakened = 0 - update_canmove() - -/mob/proc/AdjustWeakened(amount) - SetWeakened(weakened + amount) - -/mob/proc/Paralyse(amount) - SetParalysis(max(paralysis, amount)) - -/mob/proc/SetParalysis(amount) - if(status_flags & CANPARALYSE) - paralysis = max(amount, 0) - update_canmove() - else if(paralysis) - paralysis = 0 - update_canmove() - -/mob/proc/AdjustParalysis(amount) - SetParalysis(paralysis + amount) - -/mob/proc/Sleeping(amount) - SetSleeping(max(sleeping, amount)) - -/mob/proc/SetSleeping(amount) - sleeping = max(amount, 0) - update_canmove() - -/mob/proc/AdjustSleeping(amount) - SetSleeping(sleeping + amount) - -/mob/proc/Resting(amount) - SetResting(max(resting, amount)) - -/mob/proc/SetResting(amount) - resting = max(amount, 0) - update_canmove() - -/mob/proc/AdjustResting(amount) - SetResting(resting + amount) - /mob/proc/get_species() return "" @@ -1365,13 +1257,6 @@ mob/proc/yank_out_object() location.add_vomit_floor(src, 1) playsound(location, 'sound/effects/splat.ogg', 50, 1) - -/mob/proc/adjustEarDamage() - return - -/mob/proc/setEarDamage() - return - /mob/proc/AddSpell(obj/effect/proc_holder/spell/S) mob_spell_list += S S.action.Grant(src) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index f7bd04906ea..6cb582e94c1 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -33,18 +33,11 @@ var/obj/machinery/machine = null var/other_mobs = null var/memory = "" - var/disabilities = 0 //Carbon var/atom/movable/pulling = null var/next_move = null var/notransform = null //Carbon var/other = 0.0 var/hand = null - var/eye_blind = 0 //Carbon - var/eye_blurry = 0 //Carbon - var/ear_deaf = 0 //Carbon - var/ear_damage = 0 //Carbon - var/stuttering = 0 //Carbon - var/slurring = 0 //Carbon var/real_name = null var/flavor_text = "" var/med_record = "" @@ -53,11 +46,6 @@ var/blinded = null var/bhunger = 0 //Carbon var/ajourn = 0 - var/druggy = 0 //Carbon - var/confused = 0 //Carbon - var/drunk = 0 - var/sleeping = 0 //Carbon - var/resting = 0 //Carbon var/lying = 0 var/lying_prev = 0 var/canmove = 1 @@ -77,19 +65,11 @@ var/bodytemperature = 310.055 //98.7 F - var/drowsyness = 0.0//Carbon - var/dizziness = 0//Carbon - var/jitteriness = 0//Carbon var/flying = 0 var/charges = 0.0 var/nutrition = 400.0//Carbon var/overeatduration = 0 // How long this guy is overeating //Carbon - var/paralysis = 0 - var/stunned = 0 - var/weakened = 0 - var/slowed = 0 - var/losebreath = 0 //Carbon var/intent = null//Living var/shakecamera = 0 var/a_intent = I_HELP//Living diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 90f84b7fc74..a22d9bf3c6b 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -175,9 +175,9 @@ if(state >= GRAB_KILL) //affecting.apply_effect(STUTTER, 5) //would do this, but affecting isn't declared as mob/living for some stupid reason. - affecting.stuttering = max(affecting.stuttering, 5) //It will hamper your voice, being choked and all. + affecting.Stuttering(5) //It will hamper your voice, being choked and all. affecting.Weaken(5) //Should keep you down unless you get help. - affecting.losebreath = max(affecting.losebreath + 2, 3) + affecting.AdjustLoseBreath(2, bound_lower = 0, bound_upper = 3) adjust_position() @@ -290,7 +290,7 @@ msg_admin_attack("[key_name(assailant)] strangled (kill intent) [key_name(affecting)]") assailant.next_move = world.time + 10 - affecting.losebreath += 1 + affecting.AdjustLoseBreath(1) affecting.set_dir(WEST) adjust_position() diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index aa59991a6cb..b03b9562949 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -75,12 +75,6 @@ proc/iscuffed(A) return 1 return 0 -proc/isdeaf(A) - if(istype(A, /mob)) - var/mob/M = A - return (M.disabilities & DEAF) || M.ear_deaf - return 0 - proc/hassensorlevel(A, var/level) var/mob/living/carbon/human/H = A if(istype(H) && istype(H.w_uniform, /obj/item/clothing/under)) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 4c210f6f8f8..fff30f68155 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -233,7 +233,7 @@ mob.last_movement = world.time switch(mob.m_intent) if("run") - if(mob.drowsyness > 0) + if(mob.drowsy > 0) move_delay += 6 move_delay += 1+config.run_speed if("walk") diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index dd48c1ce1a4..f8a73364264 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -565,3 +565,7 @@ /mob/new_player/is_ready() return ready && ..() + +// No hearing announcements +/mob/new_player/can_hear() + return 0 diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index f280bec0ce1..d010bdfa135 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -142,7 +142,7 @@ if(length(message) >= 2) var/language_prefix = trim_right(lowertext(copytext(message, 1 ,4))) var/datum/language/L = language_keys[language_prefix] - if(can_speak(L)) + if(can_speak_language(L)) return L return null diff --git a/code/modules/mob/status_procs.dm b/code/modules/mob/status_procs.dm new file mode 100644 index 00000000000..7358486deee --- /dev/null +++ b/code/modules/mob/status_procs.dm @@ -0,0 +1,202 @@ +// A bunch of empty procs for all the status procs in living/status_procs.dm, because +// I can't be bothered to deal with all the merge conflicts it would cause to +// typecast every mob in the codebase correctly + +/mob/proc/Confused() + return + +/mob/proc/SetConfused() + return + +/mob/proc/AdjustConfused() + return + + +/mob/proc/Dizzy() + return + +/mob/proc/SetDizzy() + return + +/mob/proc/AdjustDizzy() + return + + +/mob/proc/Drowsy() + return + +/mob/proc/SetDrowsy() + return + +/mob/proc/AdjustDrowsy() + return + + +/mob/proc/Drunk() + return + +/mob/proc/SetDrunk() + return + +/mob/proc/AdjustDrunk() + return + + +/mob/proc/Druggy() + return + +/mob/proc/SetDruggy() + return + +/mob/proc/AdjustDruggy() + return + + +/mob/proc/EarDamage() + return + +/mob/proc/SetEarDamage() + return + +/mob/proc/AdjustEarDamage() + return + + +/mob/proc/EarDeaf() + return + +/mob/proc/SetEarDeaf() + return + +/mob/proc/AdjustEarDeaf() + return + + +/mob/proc/EyeBlind() + return + +/mob/proc/SetEyeBlind() + return + +/mob/proc/AdjustEyeBlind() + return + + +/mob/proc/EyeBlurry() + return + +/mob/proc/SetEyeBlurry() + return + +/mob/proc/AdjustEyeBlurry() + return + + +/mob/proc/Hallucinate() + return + +/mob/proc/SetHallucinate() + return + +/mob/proc/AdjustHallucinate() + return + + +/mob/proc/Jitter() + return + +/mob/proc/SetJitter() + return + +/mob/proc/AdjustJitter() + return + + +/mob/proc/LoseBreath() + return + +/mob/proc/SetLoseBreath() + return + +/mob/proc/AdjustLoseBreath() + return + + +/mob/proc/Paralyse() + return + +/mob/proc/SetParalysis() + return + +/mob/proc/AdjustParalysis() + return + + +/mob/proc/Silence() + return + +/mob/proc/SetSilence() + return + +/mob/proc/AdjustSilence() + return + + +/mob/proc/Sleeping() + return + +/mob/proc/SetSleeping() + return + +/mob/proc/AdjustSleeping() + return + + +/mob/proc/Slowed() + return + +/mob/proc/SetSlowed() + return + +/mob/proc/AdjustSlowed() + return + + +/mob/proc/Slur() + return + +/mob/proc/SetSlur() + return + +/mob/proc/AdjustSlur() + return + + +/mob/proc/Stun() + return + +/mob/proc/SetStunned() + return + +/mob/proc/AdjustStunned() + return + + +/mob/proc/Stuttering() + return + +/mob/proc/SetStuttering() + return + +/mob/proc/AdjustStuttering() + return + + +/mob/proc/Weaken() + return + +/mob/proc/SetWeakened() + return + +/mob/proc/AdjustWeakened() + return diff --git a/code/modules/mob/update_status.dm b/code/modules/mob/update_status.dm new file mode 100644 index 00000000000..3893085edb3 --- /dev/null +++ b/code/modules/mob/update_status.dm @@ -0,0 +1,65 @@ +// These are procs that cause immediate updates to features of the mob - prefixed with `update_` +// Procs that have a stacking effect depending on how many times they are called +// do not belong in this file - those go in `life.dm` instead, with the prefix `handle_` + +// OVERLAY/SIGHT PROCS + +// These return 0 if they are not applying an overlay, and 1 if they are + +// Call this to immediately apply blindness effects, instead of +// waiting for the next `Life` tick +/mob/proc/update_blind_effects() + // No handling for this on the mob level + return 0 + +/mob/proc/update_blurry_effects() + // No handling for this on the mob level + return 0 + +/mob/proc/update_druggy_effects() + // No handling for this on the mob level + return 0 + +/mob/proc/update_nearsighted_effects() + // No handling for this on the mob level + return 0 + +/mob/proc/update_sleeping_effects() + // No handling for this on the mob level + return 0 + +/mob/proc/update_tint_effects() + // No handling for this on the mob level + return 0 + +// Procs that give information about the status of the mob + +/mob/proc/can_hear() + return 1 + +/mob/proc/can_see() + return 1 + +/mob/proc/can_speak() + return 1 + +/mob/proc/incapacitated(ignore_restraints, ignore_grab) + return 0 + +/mob/proc/restrained(ignore_grab) + // All are created free + return 0 + +// Procs that update other things about the mob + +// Does various animations - Jitter, Flying, Spinning +/mob/proc/update_animations() + if(flying) + animate(src, pixel_y = pixel_y + 5 , time = 10, loop = 1, easing = SINE_EASING) + animate(pixel_y = pixel_y - 5, time = 10, loop = 1, easing = SINE_EASING) + +/mob/proc/update_stat() + return + +/mob/proc/update_canmove() + return 1 diff --git a/code/modules/nano/interaction/base.dm b/code/modules/nano/interaction/base.dm index 113c9e2878b..e4e5dd1a33b 100644 --- a/code/modules/nano/interaction/base.dm +++ b/code/modules/nano/interaction/base.dm @@ -14,10 +14,10 @@ /mob/proc/shared_nano_interaction() if(stat || !client) return STATUS_CLOSE // no updates, close the interface - else if(restrained() || lying || stunned || weakened) + else if(incapacitated()) return STATUS_UPDATE // update only (orange visibility) return STATUS_INTERACTIVE - + /mob/dead/observer/shared_nano_interaction() if(check_rights(R_ADMIN, 0, src)) return STATUS_INTERACTIVE // Admins are more equal diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 0f6d41fc145..420733f7c76 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -122,7 +122,7 @@ if(ishuman(mob)) //Hilariously enough, running into a closet should make you get hit the hardest. var/mob/living/carbon/human/H = mob - H.hallucination += max(50, min(300, DETONATION_HALLUCINATION * sqrt(1 / (get_dist(mob, src) + 1)) ) ) + H.AdjustHallucinate(max(50, min(300, DETONATION_HALLUCINATION * sqrt(1 / (get_dist(mob, src) + 1))))) var/rads = DETONATION_RADS * sqrt( 1 / (get_dist(mob, src) + 1) ) mob.apply_effect(rads, IRRADIATE) @@ -189,7 +189,7 @@ var/obj/item/organ/internal/eyes/eyes = l.get_int_organ(/obj/item/organ/internal/eyes) if(!istype(eyes)) continue - l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / max(1,get_dist(l, src)) ) ) ) + l.Hallucinate(min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / max(1,get_dist(l, src))))) for(var/mob/living/l in range(src, round((power / 100) ** 0.25))) var/rads = (power / 10) * sqrt( 1 / max(get_dist(l, src),1) ) diff --git a/code/modules/power/treadmill.dm b/code/modules/power/treadmill.dm index 0dc2bbb5f76..7c263157342 100644 --- a/code/modules/power/treadmill.dm +++ b/code/modules/power/treadmill.dm @@ -71,7 +71,7 @@ var/mob_speed = M.movement_delay() switch(M.m_intent) if("run") - if(M.drowsyness > 0) + if(M.drowsy > 0) mob_speed += 6 mob_speed += config.run_speed - 1 if("walk") diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 0ae9b10752e..275e2ec94e5 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -23,18 +23,18 @@ /obj/item/projectile/bullet/weakbullet/booze/on_hit(atom/target, blocked = 0) if(..(target, blocked)) var/mob/living/M = target - M.dizziness += 20 - M.slurring += 20 - M.confused += 20 - M.eye_blurry += 20 - M.drowsyness += 20 + M.AdjustDizzy(20) + M.AdjustSlur(20) + M.AdjustConfused(20) + M.AdjustEyeBlurry(20) + M.AdjustDrowsy(20) for(var/datum/reagent/ethanol/A in M.reagents.reagent_list) M.AdjustParalysis(2) - M.dizziness += 10 - M.slurring += 10 - M.confused += 10 - M.eye_blurry += 10 - M.drowsyness += 10 + M.AdjustDizzy(10) + M.AdjustSlur(10) + M.AdjustConfused(10) + M.AdjustEyeBlurry(10) + M.AdjustDrowsy(10) A.volume += 5 //Because we can /obj/item/projectile/bullet/weakbullet2 //detective revolver instastuns, but multiple shots are better for keeping punks down @@ -216,7 +216,7 @@ ..(target, blocked) if(iscarbon(target)) var/mob/living/carbon/M = target - M.silent = max(M.silent, 10) + M.Silence(10) else if(istype(target, /obj/mecha/combat/honker)) var/obj/mecha/chassis = target chassis.occupant_message("A mimetech anti-honk bullet has hit \the [chassis]!") diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 0e1b7478cc8..bcc4335f66a 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -186,7 +186,7 @@ if(ishuman(target)) var/mob/living/carbon/human/M = target M.adjustBrainLoss(20) - M.hallucination += 20 + M.AdjustHallucinate(20) /obj/item/projectile/clown name = "snap-pop" diff --git a/code/modules/reagents/newchem/Blob-Reagents.dm b/code/modules/reagents/newchem/Blob-Reagents.dm index fa5e9747e34..a7cfa32f403 100644 --- a/code/modules/reagents/newchem/Blob-Reagents.dm +++ b/code/modules/reagents/newchem/Blob-Reagents.dm @@ -61,7 +61,7 @@ volume = ..() M.apply_damage(0.4*volume, BRUTE) M.apply_damage(1*volume, OXY) - M.losebreath += round(0.3*volume) + M.AdjustLoseBreath(round(0.3*volume)) /datum/reagent/blob/kinetic //does semi-random brute damage diff --git a/code/modules/reagents/newchem/disease.dm b/code/modules/reagents/newchem/disease.dm index def94ba9a2c..cdc2d0b8d43 100644 --- a/code/modules/reagents/newchem/disease.dm +++ b/code/modules/reagents/newchem/disease.dm @@ -131,12 +131,12 @@ color = "#EC536D" // rgb: 236, 83, 109 /datum/reagent/synaphydramine/on_mob_life(mob/living/M) - M.drowsyness = max(M.drowsyness-5, 0) + M.AdjustDrowsy(-5) if(holder.has_reagent("lsd")) holder.remove_reagent("lsd", 5) if(holder.has_reagent("histamine")) holder.remove_reagent("histamine", 5) - M.hallucination = max(0, M.hallucination - 10) + M.AdjustHallucinate(-10) if(prob(30)) M.adjustToxLoss(1) ..() @@ -317,4 +317,4 @@ if(B && B.data) var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"] if(D) - D.Devolve() \ No newline at end of file + D.Devolve() diff --git a/code/modules/reagents/newchem/drinks.dm b/code/modules/reagents/newchem/drinks.dm index b1f789b7f22..da07f7a995f 100644 --- a/code/modules/reagents/newchem/drinks.dm +++ b/code/modules/reagents/newchem/drinks.dm @@ -15,7 +15,7 @@ mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' /datum/reagent/ginsonic/on_mob_life(mob/living/M) - M.drowsyness = max(0, M.drowsyness-5) + M.AdjustDrowsy(-5) if(prob(25)) M.AdjustParalysis(-1) M.AdjustStunned(-1) diff --git a/code/modules/reagents/newchem/drugs.dm b/code/modules/reagents/newchem/drugs.dm index 99a637e4fca..bc5b10be569 100644 --- a/code/modules/reagents/newchem/drugs.dm +++ b/code/modules/reagents/newchem/drugs.dm @@ -30,7 +30,7 @@ if(severity == 1) if(effect <= 2) M.visible_message("[M] looks nervous!") - M.confused += 15 + M.AdjustConfused(15) M.adjustToxLoss(2) M.Jitter(10) M.emote("twitch_s") @@ -55,7 +55,7 @@ M.Jitter(10) M.adjustToxLoss(5) M.Weaken(1) - M.confused += 33 + M.AdjustConfused(33) else if(effect <= 7) M.emote("collapse") to_chat(M, "Your heart is pounding!") @@ -90,7 +90,7 @@ if(prob(4)) to_chat(M, "You feel kinda awful!") M.adjustToxLoss(1) - M.jitteriness += 30 + M.AdjustJitter(30) M.emote(pick("groan", "moan")) ..() @@ -99,7 +99,7 @@ if(severity == 1) if(effect <= 2) M.visible_message("[M] looks confused!") - M.confused += 20 + M.AdjustConfused(20) M.Jitter(20) M.emote("scream") else if(effect <= 4) @@ -123,7 +123,7 @@ M.adjustToxLoss(2) M.adjustBrainLoss(8) M.Weaken(3) - M.confused += 25 + M.AdjustConfused(25) M.emote("scream") M.reagents.add_reagent("jagged_crystals", 5) else if(effect <= 7) @@ -160,7 +160,7 @@ /datum/reagent/krokodil/on_mob_life(mob/living/M) - M.jitteriness -= 40 + M.AdjustJitter(-40) if(prob(25)) M.adjustBrainLoss(1) if(prob(15)) @@ -241,8 +241,8 @@ if(prob(5)) M.emote(pick("twitch_s","blink_r","shiver")) if(current_cycle >= 25) - M.jitteriness += 5 - M.drowsyness = max(0, M.drowsyness-10) + M.AdjustJitter(5) + M.AdjustDrowsy(-10) M.AdjustParalysis(-2.5) M.AdjustStunned(-2.5) M.AdjustWeakened(-2.5) @@ -262,7 +262,7 @@ if(severity == 1) if(effect <= 2) M.visible_message("[M] can't seem to control their legs!") - M.confused += 20 + M.AdjustConfused(20) M.Weaken(4) else if(effect <= 4) M.visible_message("[M]'s hands flip out and flail everywhere!") @@ -296,7 +296,7 @@ for(var/mob/living/carbon/C in range(T, 1)) if(C.can_breathe_gas()) C.emote("gasp") - C.losebreath++ + C.AdjustLoseBreath(1) C.reagents.add_reagent("toxin", 10) C.reagents.add_reagent("neurotoxin2", 20) @@ -342,15 +342,15 @@ M.SetWeakened(0) if(check < 30) M.emote(pick("twitch", "twitch_s", "scream", "drool", "grumble", "mumble")) - M.druggy = max(M.druggy, 15) + M.Druggy(15) if(check < 20) - M.confused += 10 + M.AdjustConfused(10) if(check < 8) M.reagents.add_reagent(pick("methamphetamine", "crank", "neurotoxin"), rand(1,5)) M.visible_message("[M] scratches at something under their skin!") M.adjustBruteLoss(5) else if(check < 16) - M.hallucination += 30 + M.AdjustHallucinate(30) else if(check < 24) to_chat(M, "They're coming for you!") else if(check < 28) @@ -373,7 +373,7 @@ if(severity == 1) if(effect <= 2) M.visible_message("[M] flails around like a lunatic!") - M.confused += 25 + M.AdjustConfused(25) M.Jitter(10) M.emote("scream") M.reagents.add_reagent("jagged_crystals", 5) @@ -383,7 +383,7 @@ M.adjustToxLoss(2) M.adjustBrainLoss(1) M.Stun(3) - M.eye_blurry = max(M.eye_blurry, 7) + M.EyeBlurry(7) M.reagents.add_reagent("jagged_crystals", 5) else if(effect <= 7) M.emote("faint") @@ -394,7 +394,7 @@ M.adjustToxLoss(2) M.adjustBrainLoss(1) M.Stun(3) - M.eye_blurry = max(M.eye_blurry, 7) + M.EyeBlurry(7) M.reagents.add_reagent("jagged_crystals", 5) else if(effect <= 4) M.visible_message("[M] convulses violently and falls to the floor!") @@ -479,7 +479,7 @@ to_chat(M, "You cannot breathe!") M.adjustOxyLoss(15) M.Stun(1) - M.losebreath++ + M.AdjustLoseBreath(1) ..() /datum/reagent/thc @@ -497,10 +497,10 @@ if(prob(5)) to_chat(M, "[pick("You feel hungry.","Your stomach rumbles.","You feel cold.","You feel warm.")]") if(prob(4)) - M.confused = max(M.confused, 10) + M.Confused(10) if(volume >= 50 && prob(25)) if(prob(10)) - M.drowsyness = max(M.drowsyness, 10) + M.Drowsy(10) ..() /datum/reagent/fliptonium @@ -545,7 +545,7 @@ if(current_cycle == 50) M.SpinAnimation(speed = 4, loops = -1) - M.drowsyness = max(0, M.drowsyness-6) + M.AdjustDrowsy(-6) M.AdjustParalysis(-1.5) M.AdjustStunned(-1.5) M.AdjustWeakened(-1.5) @@ -561,7 +561,7 @@ if(severity == 1) if(effect <= 2) M.visible_message("[M] can't seem to control their legs!") - M.confused += 33 + M.AdjustConfused(33) M.Weaken(2) else if(effect <= 4) M.visible_message("[M]'s hands flip out and flail everywhere!") @@ -655,7 +655,7 @@ /datum/reagent/surge/on_mob_life(mob/living/M) - M.druggy = max(M.druggy, 15) + M.Druggy(15) var/high_message = pick("You feel calm.", "You feel collected.", "You feel like you need to relax.") if(prob(1)) if(prob(1)) diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/newchem/medicine.dm index 777c10ebfd7..a84ac83f385 100644 --- a/code/modules/reagents/newchem/medicine.dm +++ b/code/modules/reagents/newchem/medicine.dm @@ -167,7 +167,7 @@ M.adjustBruteLoss(-2*REM) M.adjustFireLoss(-2*REM) if(prob(50)) - M.losebreath -= 1 + M.AdjustLoseBreath(-1) ..() /datum/reagent/omnizine/overdose_process(mob/living/M, severity) @@ -181,7 +181,7 @@ M.Weaken(4) else if(effect <= 3) M.visible_message("[M] completely spaces out for a moment.") - M.confused += 15 + M.AdjustConfused(15) else if(effect <= 5) M.visible_message("[M] stumbles and staggers.") M.Dizzy(5) @@ -317,7 +317,7 @@ /datum/reagent/salbutamol/on_mob_life(mob/living/M) M.adjustOxyLoss(-6*REM) - M.losebreath = max(0, M.losebreath-4) + M.AdjustLoseBreath(-4) ..() /datum/chemical_reaction/salbutamol @@ -341,8 +341,8 @@ /datum/reagent/perfluorodecalin/on_mob_life(mob/living/carbon/human/M) M.adjustOxyLoss(-25*REM) if(volume >= 4) - M.losebreath = max(M.losebreath, 6) - M.silent = max(M.silent, 6) + M.LoseBreath(6) + M.Silence(6) if(prob(33)) M.adjustBruteLoss(-1*REM) M.adjustFireLoss(-1*REM) @@ -369,13 +369,12 @@ addiction_chance = 25 /datum/reagent/ephedrine/on_mob_life(mob/living/M) - M.drowsyness = max(0, M.drowsyness-5) + M.AdjustDrowsy(-5) M.AdjustParalysis(-1) M.AdjustStunned(-1) M.AdjustWeakened(-1) M.adjustStaminaLoss(-1*REM) - if(M.losebreath > 5) - M.losebreath = max(5, M.losebreath-1) + M.AdjustLoseBreath(-1, bound_lower = 5) if(M.oxyloss > 75) M.adjustOxyLoss(-1) if(M.health < 0 || M.health > 0 && prob(33)) @@ -422,14 +421,14 @@ addiction_chance = 10 /datum/reagent/diphenhydramine/on_mob_life(mob/living/M) - M.jitteriness = max(0, M.jitteriness-20) + M.AdjustJitter(-20) M.reagents.remove_reagent("histamine",3) M.reagents.remove_reagent("itching_powder",3) if(prob(7)) M.emote("yawn") if(prob(3)) M.Stun(2) - M.drowsyness += 1 + M.AdjustDrowsy(1) M.visible_message("[M] looks a bit dazed.") ..() @@ -453,16 +452,16 @@ shock_reduction = 50 /datum/reagent/morphine/on_mob_life(mob/living/M) - M.jitteriness = max(0, M.jitteriness-25) + M.AdjustJitter(-25) switch(current_cycle) if(1 to 15) if(prob(7)) M.emote("yawn") if(16 to 35) - M.drowsyness = max(M.drowsyness, 20) + M.Drowsy(20) if(36 to INFINITY) M.Paralyse(15) - M.drowsyness = max(M.drowsyness, 20) + M.Drowsy(20) if(ishuman(M)) var/mob/living/carbon/human/H = M if(H.traumatic_shock < 100) @@ -476,16 +475,16 @@ var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes) if(istype(E)) E.damage = max(E.damage-1, 0) - M.eye_blurry = max(M.eye_blurry-1 , 0) - M.adjustEarDamage(-1,0) + M.AdjustEyeBlurry(-1) + M.AdjustEarDamage(-1) if(prob(50)) - M.disabilities &= ~NEARSIGHTED + M.CureNearsighted() if(prob(30)) - M.disabilities &= ~BLIND - M.eye_blind = 0 + M.CureBlind() + M.SetEyeBlind(0) if(M.ear_damage <= 25) if(prob(30)) - M.setEarDamage(-1,0) + M.SetEarDeaf(0) ..() /datum/chemical_reaction/oculine @@ -515,12 +514,11 @@ overdose_threshold = 25 /datum/reagent/atropine/on_mob_life(mob/living/M) - M.dizziness += 1 - M.confused = max(M.confused, 5) + M.AdjustDizzy(1) + M.Confused(5) if(prob(4)) M.emote("collapse") - if(M.losebreath > 5) - M.losebreath = max(5, M.losebreath-5) + M.AdjustLoseBreath(-5, bound_lower = 5) if(M.oxyloss > 65) M.adjustOxyLoss(-10*REM) if(M.health < -25) @@ -550,7 +548,7 @@ overdose_threshold = 20 /datum/reagent/epinephrine/on_mob_life(mob/living/M) - M.drowsyness = max(0, M.drowsyness-5) + M.AdjustDrowsy(-5) if(prob(20)) M.AdjustParalysis(-1) if(prob(20)) @@ -562,8 +560,7 @@ if(prob(5)) M.adjustBrainLoss(-1) holder.remove_reagent("histamine", 15) - if(M.losebreath > 3) - M.losebreath-- + M.AdjustLoseBreath(-1, bound_lower = 3) if(M.oxyloss > 35) M.adjustOxyLoss(-10*REM) if(M.health < -10 && M.health > -65) @@ -694,7 +691,7 @@ color = "#D1D1F1" /datum/reagent/mutadone/on_mob_life(mob/living/carbon/human/M) - M.jitteriness = 0 + M.SetJitter(0) var/needs_update = M.mutations.len > 0 || M.disabilities > 0 if(needs_update) @@ -733,7 +730,7 @@ color = "#009CA8" /datum/reagent/antihol/on_mob_life(mob/living/M) - M.slurring = 0 + M.SetSlur(0) M.AdjustDrunk(-4) M.reagents.remove_all_type(/datum/reagent/ethanol, 8, 0, 1) if(M.toxloss <= 25) @@ -763,10 +760,10 @@ M.adjustBruteLoss(-10*REM) M.adjustFireLoss(-10*REM) M.setStaminaLoss(0) - M.slowed = 0 - M.dizziness = max(0,M.dizziness-10) - M.drowsyness = max(0,M.drowsyness-10) - M.confused = 0 + M.SetSlowed(0) + M.AdjustDizzy(-10) + M.AdjustDrowsy(-10) + M.SetConfused(0) M.SetSleeping(0) var/status = CANSTUN | CANWEAKEN | CANPARALYSE M.status_flags &= ~status @@ -811,7 +808,7 @@ if(prob(33)) M.adjustStaminaLoss(2.5*REM) M.adjustToxLoss(1*REM) - M.losebreath++ + M.AdjustLoseBreath(1) /datum/reagent/insulin name = "Insulin" @@ -882,11 +879,11 @@ M.reagents.remove_reagent("bath_salts", 5) M.reagents.remove_reagent("lsd", 5) M.reagents.remove_reagent("thc", 5) - M.druggy -= 5 - M.hallucination -= 5 - M.jitteriness -= 5 + M.AdjustDruggy(-5) + M.AdjustHallucinate(-5) + M.AdjustJitter(-5) if(prob(50)) - M.drowsyness = max(M.drowsyness, 3) + M.Drowsy(3) if(prob(10)) M.emote("drool") if(prob(20)) @@ -910,16 +907,16 @@ color = "#96DEDE" /datum/reagent/ether/on_mob_life(mob/living/M) - M.jitteriness = max(M.jitteriness-25,0) + M.AdjustJitter(-25) switch(current_cycle) if(1 to 15) if(prob(7)) M.emote("yawn") if(16 to 35) - M.drowsyness = max(M.drowsyness, 20) + M.Drowsy(20) if(36 to INFINITY) M.Paralyse(15) - M.drowsyness = max(M.drowsyness, 20) + M.Drowsy(20) ..() /datum/chemical_reaction/ether @@ -960,7 +957,7 @@ M.AdjustParalysis(-1) M.AdjustStunned(-1) M.AdjustWeakened(-1) - M.confused = max(0, M.confused-5) + M.AdjustConfused(-5) for(var/datum/reagent/R in M.reagents.reagent_list) if(R != src) if(R.id == "ultralube" || R.id == "lube") @@ -1037,7 +1034,7 @@ M.Weaken(4) else if(effect <= 3) M.visible_message("[M] completely spaces out for a moment.") - M.confused += 15 + M.AdjustConfused(15) else if(effect <= 5) M.visible_message("[M] stumbles and staggers.") M.Dizzy(5) diff --git a/code/modules/reagents/newchem/pyro.dm b/code/modules/reagents/newchem/pyro.dm index 6dece72544c..05ecb1b1206 100644 --- a/code/modules/reagents/newchem/pyro.dm +++ b/code/modules/reagents/newchem/pyro.dm @@ -356,12 +356,13 @@ if(!ear_safety) M.Stun(max(10/distance, 3)) M.Weaken(max(10/distance, 3)) - M.setEarDamage(M.ear_damage + rand(0, 5), max(M.ear_deaf,15)) + M.AdjustEarDamage(rand(0, 5)) + M.EarDeaf(15) if(M.ear_damage >= 15) to_chat(M, "Your ears start to ring badly!") - if(prob(M.ear_damage - 10 + 5)) + if(prob(M.ear_damage - 5)) to_chat(M, "You can't hear anything!") - M.disabilities |= DEAF + M.BecomeDeaf() else if(M.ear_damage >= 5) to_chat(M, "Your ears start to ring!") @@ -384,10 +385,11 @@ if(!ear_safety) M.Stun(max(10/distance, 3)) M.Weaken(max(10/distance, 3)) - M.setEarDamage(M.ear_damage + rand(0, 5), max(M.ear_deaf,15)) + M.AdjustEarDamage(rand(0, 5)) + M.EarDeaf(15) if(M.ear_damage >= 15) to_chat(M, "Your ears start to ring badly!") - if(prob(M.ear_damage - 10 + 5)) + if(prob(M.ear_damage - 5)) to_chat(M, "You can't hear anything!") M.disabilities |= DEAF else @@ -619,4 +621,4 @@ if(method == TOUCH) M.adjust_fire_stacks(volume / 5) return - ..() \ No newline at end of file + ..() diff --git a/code/modules/reagents/newchem/toxins.dm b/code/modules/reagents/newchem/toxins.dm index 56d64d9a62e..d8e8205b1f7 100644 --- a/code/modules/reagents/newchem/toxins.dm +++ b/code/modules/reagents/newchem/toxins.dm @@ -41,7 +41,7 @@ if(prob(10)) to_chat(M, "Your eyes itch.") M.emote(pick("blink", "sneeze")) - M.eye_blurry += 3 + M.AdjustEyeBlurry(3) if(prob(10)) M.visible_message("[M] scratches at an itch.") M.adjustBruteLoss(1) @@ -141,7 +141,7 @@ if(prob(4)) M.visible_message("[M] starts convulsing violently!", "You feel as if your body is tearing itself apart!") M.Weaken(15) - M.jitteriness += 1000 + M.AdjustJitter(1000) spawn(rand(20, 100)) M.gib() @@ -159,19 +159,19 @@ current_cycle++ return if(5 to 8) - M.dizziness += 1 - M.confused = max(M.confused, 10) + M.AdjustDizzy(1) + M.Confused(10) if(9 to 12) - M.drowsyness = max(M.drowsyness, 10) - M.dizziness += 1 - M.confused = max(M.confused, 20) + M.Drowsy(10) + M.AdjustDizzy(1) + M.Confused(20) if(13) M.emote("faint") if(14 to INFINITY) M.Paralyse(10) - M.drowsyness = max(M.drowsyness, 20) + M.Drowsy(20) - M.jitteriness = max(0, M.jitteriness-30) + M.AdjustJitter(-30) if(M.getBrainLoss() <= 80) M.adjustBrainLoss(1) else @@ -207,7 +207,7 @@ M.emote("drool") if(prob(10)) to_chat(M, "You cannot breathe!") - M.losebreath += 1 + M.AdjustLoseBreath(1) M.emote("gasp") if(prob(8)) to_chat(M, "You feel horrendously weak!") @@ -261,7 +261,7 @@ to_chat(M, "AHHHHHH!") M.adjustBruteLoss(5) M.Weaken(5) - M.jitteriness += 6 + M.AdjustJitter(6) M.visible_message("[M] falls to the floor, scratching themselves violently!") M.emote("scream") ..() @@ -364,11 +364,11 @@ if(prob(10)) to_chat(M, "You cannot breathe!") M.adjustOxyLoss(10) - M.losebreath++ + M.AdjustLoseBreath(1) if(prob(10)) to_chat(M, "Your chest is burning with pain!") M.adjustOxyLoss(10) - M.losebreath++ + M.AdjustLoseBreath(1) M.Stun(3) M.Weaken(2) if(ishuman(M)) @@ -425,12 +425,12 @@ M.Weaken(20) if(prob(10)) M.emote(pick("drool", "tremble", "gasp")) - M.losebreath++ + M.AdjustLoseBreath(1) if(prob(9)) to_chat(M, "You can't [pick("move", "feel your legs", "feel your face", "feel anything")]!") if(prob(7)) to_chat(M, "You can't breathe!") - M.losebreath += 3 + M.AdjustLoseBreath(3) ..() /datum/reagent/sodium_thiopental @@ -445,15 +445,15 @@ switch(current_cycle) if(1) M.emote("drool") - M.confused = max(M.confused, 5) + M.Confused(5) if(2 to 4) - M.drowsyness = max(M.drowsyness, 20) + M.Drowsy(20) if(5) M.emote("faint") M.Weaken(5) if(6 to INFINITY) M.Paralyse(20) - M.jitteriness = max(0, M.jitteriness-50) + M.AdjustJitter(-50) if(prob(10)) M.emote("drool") M.adjustBrainLoss(1) @@ -474,7 +474,7 @@ if(prob(25)) M.emote("yawn") if(6 to 9) - M.eye_blurry += 5 + M.AdjustEyeBlurry(5) if(prob(35)) M.emote("yawn") if(10) @@ -502,20 +502,20 @@ mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' /datum/reagent/sulfonal/on_mob_life(mob/living/M) - M.jitteriness = max(0, M.jitteriness-30) + M.AdjustJitter(-30) switch(current_cycle) if(1 to 10) if(prob(7)) M.emote("yawn") if(11 to 20) - M.drowsyness = max(M.drowsyness, 20) + M.Drowsy(20) if(21) M.emote("faint") if(22 to INFINITY) if(prob(20)) M.emote("faint") M.Paralyse(5) - M.drowsyness = max(M.drowsyness, 20) + M.Drowsy(20) M.adjustToxLoss(1) ..() @@ -570,7 +570,7 @@ /datum/reagent/coniine/on_mob_life(mob/living/M) M.adjustToxLoss(2) - M.losebreath += 5 + M.AdjustLoseBreath(5) ..() /datum/reagent/curare @@ -590,7 +590,7 @@ if(prob(20)) M.emote(pick("drool", "pale", "gasp")) if(6 to 10) - M.eye_blurry += 5 + M.AdjustEyeBlurry(5) if(prob(8)) to_chat(M, "You feel [pick("weak", "horribly weak", "numb", "like you can barely move", "tingly")].") M.Stun(1) @@ -598,12 +598,12 @@ M.emote(pick("drool","pale", "gasp")) if(11 to INFINITY) M.Stun(30) - M.drowsyness = max(M.drowsyness, 20) + M.Drowsy(20) if(prob(20)) M.emote(pick("drool", "faint", "pale", "gasp", "collapse")) else if(prob(8)) to_chat(M, "You can't [pick("breathe", "move", "feel your legs", "feel your face", "feel anything")]!") - M.losebreath++ + M.AdjustLoseBreath(1) ..() /datum/reagent/sarin @@ -636,22 +636,22 @@ /datum/reagent/sarin/on_mob_life(mob/living/M) switch(current_cycle) if(1 to 15) - M.jitteriness += 20 + M.AdjustJitter(20) if(prob(20)) M.emote(pick("twitch","twitch_s","quiver")) if(16 to 30) if(prob(25)) M.emote(pick("twitch","twitch","drool","quiver","tremble")) - M.eye_blurry += 5 - M.stuttering = max(M.stuttering, 5) + M.AdjustEyeBlurry(5) + M.Stuttering(5) if(prob(10)) - M.confused = max(M.confused, 15) + M.Confused(15) if(prob(15)) M.Stun(1) M.emote("scream") if(30 to 60) - M.eye_blurry += 5 - M.stuttering = max(M.stuttering, 5) + M.AdjustEyeBlurry(5) + M.Stuttering(5) if(prob(10)) M.Stun(1) M.emote(pick("twitch","twitch","drool","shake","tremble")) @@ -660,15 +660,15 @@ if(prob(5)) M.Weaken(3) M.visible_message("[M] has a seizure!") - M.jitteriness = 1000 + M.SetJitter(1000) if(prob(5)) to_chat(M, "You can't breathe!") M.emote(pick("gasp", "choke", "cough")) - M.losebreath++ + M.AdjustLoseBreath(1) if(61 to INFINITY) if(prob(15)) M.emote(pick("gasp", "choke", "cough","twitch", "shake", "tremble","quiver","drool", "twitch","collapse")) - M.losebreath = max(5, M.losebreath + 5) + M.LoseBreath(5) M.adjustToxLoss(1) M.adjustBrainLoss(1) M.Weaken(4) @@ -754,16 +754,16 @@ /datum/reagent/capulettium/on_mob_life(mob/living/M) switch(current_cycle) if(1 to 5) - M.eye_blurry += 10 + M.AdjustEyeBlurry(10) if(6 to 10) - M.drowsyness = max(M.drowsyness, 10) + M.Drowsy(10) if(11) M.Paralyse(10) M.visible_message("[M] seizes up and falls limp, their eyes dead and lifeless...") //so you can't trigger deathgasp emote on people. Edge case, but necessary. if(12 to 60) M.Paralyse(10) if(61 to INFINITY) - M.eye_blurry += 10 + M.AdjustEyeBlurry(10) ..() /datum/reagent/capulettium_plus @@ -783,7 +783,7 @@ mix_message = "The solution begins to slosh about violently by itself." /datum/reagent/capulettium_plus/on_mob_life(mob/living/M) - M.silent = max(M.silent, 2) + M.Silence(2) ..() /datum/reagent/toxic_slurry @@ -884,4 +884,4 @@ var/location = get_turf(holder.my_atom) var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(6, 1, location) - s.start() \ No newline at end of file + s.start() diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm index da92ffee0f2..e337aa10e1f 100644 --- a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm +++ b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm @@ -13,7 +13,7 @@ /datum/reagent/ethanol/on_mob_life(mob/living/M) M.nutrition += nutriment_factor M.AdjustDrunk(alcohol_perc) - M.dizziness += dizzy_adj + M.AdjustDizzy(dizzy_adj) ..() @@ -84,7 +84,7 @@ //copy paste from LSD... shoot me /datum/reagent/ethanol/absinthe/on_mob_life(mob/living/M) - M.hallucination += 5 + M.AdjustHallucinate(5) ..() /datum/reagent/ethanol/absinthe/overdose_process(mob/living/M, severity) @@ -97,10 +97,7 @@ color = "#664300" // rgb: 102, 67, 0 overdose_threshold = 30 alcohol_perc = 0.4 - -/datum/reagent/ethanol/rum/on_mob_life(mob/living/M) - M.dizziness +=5 - ..() + dizzy_adj = 5 /datum/reagent/ethanol/rum/overdose_process(mob/living/M, severity) M.adjustToxLoss(1) @@ -182,7 +179,7 @@ /datum/reagent/ethanol/thirteenloko/on_mob_life(mob/living/M) M.nutrition += nutriment_factor - M.drowsyness = max(0, M.drowsyness-7) + M.AdjustDrowsy(-7) M.AdjustSleeping(-2) if(M.bodytemperature > 310) M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) @@ -625,7 +622,7 @@ /datum/reagent/ethanol/neurotoxin/on_mob_life(mob/living/M) M.weakened = max(M.weakened, 3) if(current_cycle >=55) - M.druggy = max(M.druggy, 55) + M.Druggy(55) if(current_cycle >=200) M.adjustToxLoss(2) ..() @@ -637,10 +634,7 @@ reagent_state = LIQUID color = "#2E6671" // rgb: 46, 102, 113 alcohol_perc = 0.7 - -/datum/reagent/ethanol/changelingsting/on_mob_life(mob/living/M) - M.dizziness +=5 - ..() + dizzy_adj = 5 /datum/reagent/ethanol/irishcarbomb name = "Irish Car Bomb" @@ -649,10 +643,7 @@ reagent_state = LIQUID color = "#2E6671" // rgb: 46, 102, 113 alcohol_perc = 0.3 - -/datum/reagent/ethanol/irishcarbomb/on_mob_life(mob/living/M) - M.dizziness +=5 - ..() + dizzy_adj = 5 /datum/reagent/ethanol/syndicatebomb name = "Syndicate Bomb" @@ -677,9 +668,9 @@ nutriment_factor = 1 * FOOD_METABOLISM color = "#2E6671" // rgb: 46, 102, 113 alcohol_perc = 0.5 + dizzy_adj = 10 /datum/reagent/ethanol/driestmartini/on_mob_life(mob/living/M) - M.dizziness +=10 if(current_cycle >= 55 && current_cycle < 115) M.stuttering += 10 ..() @@ -692,8 +683,8 @@ alcohol_perc = 0.2 /datum/reagent/ethanol/kahlua/on_mob_life(mob/living/M) - M.dizziness = max(0, M.dizziness-5) - M.drowsyness = max(0, M.drowsyness-3) + M.AdjustDizzy(-5) + M.AdjustDrowsy(-3) M.AdjustSleeping(-2) M.Jitter(5) - ..() \ No newline at end of file + ..() diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm index 26bad6c1665..869e9295bf5 100644 --- a/code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm +++ b/code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm @@ -38,8 +38,8 @@ color = "#973800" // rgb: 151, 56, 0 /datum/reagent/drink/carrotjuicde/on_mob_life(mob/living/M) - M.eye_blurry = max(M.eye_blurry-1 , 0) - M.eye_blind = max(M.eye_blind-1 , 0) + M.AdjustEyeBlurry(-1) + M.AdjustEyeBlind(-1) switch(current_cycle) if(1 to 20) //nothing @@ -282,4 +282,4 @@ if(ishuman(M) && M.job in list("Mime")) M.adjustBruteLoss(-1) M.adjustFireLoss(-1) - ..() \ No newline at end of file + ..() diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_drink_base.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_drink_base.dm index 1868489adb7..6e30efb9423 100644 --- a/code/modules/reagents/oldchem/reagents/drink/reagents_drink_base.dm +++ b/code/modules/reagents/oldchem/reagents/drink/reagents_drink_base.dm @@ -14,9 +14,9 @@ /datum/reagent/drink/on_mob_life(mob/living/M) M.nutrition += nutriment_factor if(adj_dizzy) - M.dizziness = max(0, M.dizziness + adj_dizzy) + M.AdjustDizzy(adj_dizzy) if(adj_drowsy) - M.drowsyness = max(0, M.drowsyness + adj_drowsy) + M.AdjustDrowsy(adj_drowsy) if(adj_sleepy) M.AdjustSleeping(adj_sleepy) if(adj_temp_hot) @@ -25,4 +25,4 @@ if(adj_temp_cool) if(M.bodytemperature > 310)//310 is the normal bodytemp. 310.055 M.bodytemperature = max(310, M.bodytemperature - (adj_temp_cool * TEMPERATURE_DAMAGE_COEFFICIENT)) - ..() \ No newline at end of file + ..() diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_drink_cold.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_drink_cold.dm index fe54ed97246..26164571769 100644 --- a/code/modules/reagents/oldchem/reagents/drink/reagents_drink_cold.dm +++ b/code/modules/reagents/oldchem/reagents/drink/reagents_drink_cold.dm @@ -48,9 +48,9 @@ /datum/reagent/drink/cold/nuka_cola/on_mob_life(mob/living/M) M.Jitter(20) - M.druggy = max(M.druggy, 30) - M.dizziness +=5 - M.drowsyness = 0 + M.Druggy(30) + M.AdjustDizzy(5) + M.SetDrowsy(0) M.status_flags |= GOTTAGOFAST ..() @@ -121,4 +121,4 @@ /datum/reagent/drink/cold/rewriter/on_mob_life(mob/living/M) M.Jitter(5) - ..() \ No newline at end of file + ..() diff --git a/code/modules/reagents/oldchem/reagents/reagents_admin.dm b/code/modules/reagents/oldchem/reagents/reagents_admin.dm index ccc617d2aaa..09636bd111f 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_admin.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_admin.dm @@ -14,7 +14,6 @@ M.adjustBruteLoss(-5) M.adjustFireLoss(-5) M.adjustToxLoss(-5) - M.hallucination = 0 M.setBrainLoss(0) if(ishuman(M)) var/mob/living/carbon/human/H = M @@ -24,20 +23,28 @@ for(var/obj/item/organ/external/E in H.organs) if(E.mend_fracture()) E.perma_injury = 0 - M.disabilities = 0 - M.eye_blurry = 0 - M.eye_blind = 0 + M.SetEyeBlind(0) + M.CureNearsighted() + M.CureBlind() + M.CureMute() + M.CureDeaf() + M.CureEpilepsy() + M.CureTourettes() + M.CureCoughing() + M.CureNervous() + M.SetEyeBlurry(0) M.SetWeakened(0) M.SetStunned(0) M.SetParalysis(0) - M.silent = 0 - M.dizziness = 0 - M.drowsyness = 0 - M.stuttering = 0 - M.slurring = 0 - M.confused = 0 + M.SetSilence(0) + M.SetHallucinate(0) + M.SetDizzy(0) + M.SetDrowsy(0) + M.SetStuttering(0) + M.SetSlur(0) + M.SetConfused(0) M.SetSleeping(0) - M.jitteriness = 0 + M.SetJitter(0) for(var/datum/disease/D in M.viruses) if(D.severity == NONTHREAT) continue @@ -73,4 +80,4 @@ outgoing += tocheck else outgoing += tocheck - return outgoing \ No newline at end of file + return outgoing diff --git a/code/modules/reagents/oldchem/reagents/reagents_drugs.dm b/code/modules/reagents/oldchem/reagents/reagents_drugs.dm index 7cbc79b41b0..1fd0188287a 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_drugs.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_drugs.dm @@ -37,7 +37,7 @@ metabolization_rate = 0.2 * REAGENTS_METABOLISM /datum/reagent/hippies_delight/on_mob_life(mob/living/M) - M.druggy = max(M.druggy, 50) + M.Druggy(50) switch(current_cycle) if(1 to 5) if(!M.stuttering) M.stuttering = 1 @@ -47,13 +47,13 @@ if(!M.stuttering) M.stuttering = 1 M.Jitter(20) M.Dizzy(20) - M.druggy = max(M.druggy, 45) + M.Druggy(45) if(prob(20)) M.emote(pick("twitch","giggle")) if(10 to INFINITY) if(!M.stuttering) M.stuttering = 1 M.Jitter(40) M.Dizzy(40) - M.druggy = max(M.druggy, 60) + M.Druggy(60) if(prob(30)) M.emote(pick("twitch","giggle")) ..() @@ -65,8 +65,8 @@ color = "#0000D8" /datum/reagent/lsd/on_mob_life(mob/living/M) - M.druggy = max(M.druggy, 15) - M.hallucination += 10 + M.Druggy(15) + M.AdjustHallucinate(10) ..() /datum/reagent/space_drugs @@ -80,7 +80,7 @@ heart_rate_decrease = 1 /datum/reagent/space_drugs/on_mob_life(mob/living/M) - M.druggy = max(M.druggy, 15) + M.Druggy(15) if(isturf(M.loc) && !istype(M.loc, /turf/space)) if(M.canmove && !M.restrained()) step(M, pick(cardinal)) @@ -94,22 +94,22 @@ color = "#E700E7" // rgb: 231, 0, 231 /datum/reagent/psilocybin/on_mob_life(mob/living/M) - M.druggy = max(M.druggy, 30) + M.Druggy(30) switch(current_cycle) if(1 to 5) - if(!M.stuttering) M.stuttering = 1 + M.Stuttering(1) M.Dizzy(5) if(prob(10)) M.emote(pick("twitch","giggle")) if(5 to 10) - if(!M.stuttering) M.stuttering = 1 + M.Stuttering(1) M.Jitter(10) M.Dizzy(10) - M.druggy = max(M.druggy, 35) + M.Druggy(35) if(prob(20)) M.emote(pick("twitch","giggle")) if(10 to INFINITY) - if(!M.stuttering) M.stuttering = 1 + M.Stuttering(1) M.Jitter(20) M.Dizzy(20) - M.druggy = max(M.druggy, 40) + M.Druggy(40) if(prob(30)) M.emote(pick("twitch","giggle")) - ..() \ No newline at end of file + ..() diff --git a/code/modules/reagents/oldchem/reagents/reagents_flammable.dm b/code/modules/reagents/oldchem/reagents/reagents_flammable.dm index 52d33e21e07..61228dfb2d0 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_flammable.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_flammable.dm @@ -22,7 +22,7 @@ M.adjustBrainLoss(3) if(iscultist(M)) M.status_flags |= GOTTAGOFAST - M.drowsyness = max(M.drowsyness-5, 0) + M.AdjustDrowsy(-5) M.AdjustParalysis(-2) M.AdjustStunned(-2) M.AdjustWeakened(-2) @@ -78,4 +78,4 @@ id = "glycerol" description = "Glycerol is a simple polyol compound. Glycerol is sweet-tasting and of low toxicity." reagent_state = LIQUID - color = "#808080" // rgb: 128, 128, 128 \ No newline at end of file + color = "#808080" // rgb: 128, 128, 128 diff --git a/code/modules/reagents/oldchem/reagents/reagents_food.dm b/code/modules/reagents/oldchem/reagents/reagents_food.dm index 1dbe1f05a20..de52805fef2 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_food.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_food.dm @@ -370,9 +370,9 @@ overdose_threshold = 200 // Hyperglycaemic shock /datum/reagent/sugar/on_mob_life(mob/living/M) - M.drowsyness = max(0, M.drowsyness-5) + M.AdjustDrowsy(-5) if(current_cycle >= 90) - M.jitteriness += 2 + M.AdjustJitter(2) if(prob(50)) M.AdjustParalysis(-1) M.AdjustStunned(-1) @@ -391,4 +391,3 @@ M.Weaken(4 * severity) if(prob(8)) M.adjustToxLoss(severity) - diff --git a/code/modules/reagents/oldchem/reagents/reagents_med.dm b/code/modules/reagents/oldchem/reagents/reagents_med.dm index cc5592dd42e..b0a09afc999 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_med.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_med.dm @@ -41,7 +41,7 @@ overdose_threshold = 40 /datum/reagent/synaptizine/on_mob_life(mob/living/M) - M.drowsyness = max(0, M.drowsyness-5) + M.AdjustDrowsy(-5) M.AdjustParalysis(-1) M.AdjustStunned(-1) M.AdjustWeakened(-1) @@ -139,4 +139,4 @@ description = "An all-purpose antibiotic agent extracted from space fungus." reagent_state = LIQUID color = "#0AB478" - metabolization_rate = 0.2 \ No newline at end of file + metabolization_rate = 0.2 diff --git a/code/modules/reagents/oldchem/reagents/reagents_toxin.dm b/code/modules/reagents/oldchem/reagents/reagents_toxin.dm index bbdf92b8693..0aae5e3f40e 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_toxin.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_toxin.dm @@ -326,7 +326,7 @@ /datum/reagent/spores/on_mob_life(mob/living/M) M.adjustToxLoss(1) M.damageoverlaytemp = 60 - M.eye_blurry = max(M.eye_blurry, 3) + M.EyeBlurry(3) ..() /datum/reagent/beer2 //disguised as normal beer for use by emagged brobots @@ -385,25 +385,25 @@ to_chat(victim, "Your [safe_thing] protect you from most of the pepperspray!") if(prob(5)) victim.emote("scream") - victim.eye_blurry = max(M.eye_blurry, 3) - victim.eye_blind = max(M.eye_blind, 1) - victim.confused = max(M.confused, 3) + victim.EyeBlurry(3) + victim.EyeBlind(1) + victim.Confused(3) victim.damageoverlaytemp = 60 victim.Weaken(3) victim.drop_item() return else if( eyes_covered ) // Eye cover is better than mouth cover to_chat(victim, "Your [safe_thing] protects your eyes from the pepperspray!") - victim.eye_blurry = max(M.eye_blurry, 3) + victim.EyeBlurry(3) victim.damageoverlaytemp = 30 return else // Oh dear :D if(prob(5)) victim.emote("scream") to_chat(victim, "You're sprayed directly in the eyes with pepperspray!") - victim.eye_blurry = max(M.eye_blurry, 5) - victim.eye_blind = max(M.eye_blind, 2) - victim.confused = max(M.confused, 6) + victim.EyeBlurry(5) + victim.EyeBlind(2) + victim.Confused(6) victim.damageoverlaytemp = 75 victim.Weaken(5) victim.drop_item() @@ -411,4 +411,4 @@ /datum/reagent/condensedcapsaicin/on_mob_life(mob/living/M) if(prob(5)) M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]") - ..() \ No newline at end of file + ..() diff --git a/code/modules/reagents/oldchem/reagents/reagents_water.dm b/code/modules/reagents/oldchem/reagents/reagents_water.dm index bbfcbeb8142..a2dd3eb7fc4 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_water.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_water.dm @@ -264,27 +264,27 @@ process_flags = ORGANIC | SYNTHETIC /datum/reagent/holywater/on_mob_life(mob/living/M) - M.jitteriness = max(M.jitteriness-5,0) + M.AdjustJitter(-5) if(current_cycle >= 30) // 12 units, 60 seconds @ metabolism 0.4 units & tick rate 2.0 sec - M.stuttering = min(M.stuttering+4, 20) + M.AdjustStuttering(4, bound_lower = 0, bound_upper = 20) M.Dizzy(5) if(iscultist(M) && prob(5)) M.say(pick("Av'te Nar'sie","Pa'lid Mors","INO INO ORA ANA","SAT ANA!","Daim'niodeis Arc'iai Le'eones","Egkau'haom'nai en Chaous","Ho Diak'nos tou Ap'iron","R'ge Na'sie","Diabo us Vo'iscum","Si gn'um Co'nu")) if(current_cycle >= 75 && prob(33)) // 30 units, 150 seconds - M.confused += 3 + M.AdjustConfused(3) if(isvampirethrall(M)) ticker.mode.remove_vampire_mind(M.mind) holder.remove_reagent(id, volume) - M.jitteriness = 0 - M.stuttering = 0 - M.confused = 0 + M.SetJitter(0) + M.SetStuttering(0) + M.SetConfused(0) return if(iscultist(M)) ticker.mode.remove_cultist(M.mind) holder.remove_reagent(id, volume) // maybe this is a little too perfect and a max() cap on the statuses would be better?? - M.jitteriness = 0 - M.stuttering = 0 - M.confused = 0 + M.SetJitter(0) + M.SetStuttering(0) + M.SetConfused(0) return if(ishuman(M) && M.mind && M.mind.vampire && !M.mind.vampire.get_ability(/datum/vampire_passive/full) && prob(80)) switch(current_cycle) diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_badfeeling.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_badfeeling.dm index 373b5d9454f..0e83e5812c3 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_badfeeling.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_badfeeling.dm @@ -37,7 +37,7 @@ to_chat(H, "[pick(messages)]") if(prob(50)) - H.dizziness += rand(3,5) + H.AdjustDizzy(rand(3,5)) /datum/artifact_effect/badfeeling/DoEffectAura() if(holder) @@ -50,7 +50,7 @@ to_chat(H, "[pick(drastic_messages)]") if(prob(10)) - H.dizziness += rand(3,5) + H.AdjustDizzy(rand(3,5)) return 1 /datum/artifact_effect/badfeeling/DoEffectPulse() @@ -64,7 +64,7 @@ to_chat(H, "[pick(messages)]") if(prob(50)) - H.dizziness += rand(3,5) + H.AdjustDizzy(rand(3,5)) else if(prob(25)) - H.dizziness += rand(5,15) + H.AdjustDizzy(rand(5,15)) return 1 diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_goodfeeling.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_goodfeeling.dm index 08639dec98f..dd42c44204c 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_goodfeeling.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_goodfeeling.dm @@ -35,7 +35,7 @@ to_chat(H, "[pick(messages)]") if(prob(50)) - H.dizziness += rand(3,5) + H.AdjustDizzy(rand(3,5)) /datum/artifact_effect/goodfeeling/DoEffectAura() if(holder) @@ -48,7 +48,7 @@ to_chat(H, "[pick(drastic_messages)]") if(prob(5)) - H.dizziness += rand(3,5) + H.AdjustDizzy(rand(3,5)) return 1 /datum/artifact_effect/goodfeeling/DoEffectPulse() @@ -62,7 +62,7 @@ to_chat(H, "[pick(messages)]") if(prob(50)) - H.dizziness += rand(3,5) + H.AdjustDizzy(rand(3,5)) else if(prob(25)) - H.dizziness += rand(5,15) + H.AdjustDizzy(rand(5,15)) return 1 diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_sleepy.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_sleepy.dm index bbb16d76a3d..1f098ddfa6b 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_sleepy.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_sleepy.dm @@ -13,8 +13,8 @@ if(ishuman(toucher) && prob(weakness * 100)) var/mob/living/carbon/human/H = toucher to_chat(H, pick("\blue You feel like taking a nap.","\blue You feel a yawn coming on.","\blue You feel a little tired.")) - H.drowsyness = min(H.drowsyness + rand(5,25) * weakness, 50 * weakness) - H.eye_blurry = min(H.eye_blurry + rand(1,3) * weakness, 50 * weakness) + H.AdjustDrowsy(rand(5,25) * weakness, bound_lower = 0, bound_upper = 50 * weakness) + H.AdjustEyeBlurry(rand(1,3) * weakness, bound_lower = 0, bound_upper = 50 * weakness) return 1 else if(isrobot(toucher)) to_chat(toucher, "\red SYSTEM ALERT: CPU cycles slowing down.") @@ -28,8 +28,8 @@ if(prob(weakness * 100)) if(prob(10)) to_chat(H, pick("\blue You feel like taking a nap.","\blue You feel a yawn coming on.","\blue You feel a little tired.")) - H.drowsyness = min(H.drowsyness + 1 * weakness, 25 * weakness) - H.eye_blurry = min(H.eye_blurry + 1 * weakness, 25 * weakness) + H.AdjustDrowsy(1 * weakness, bound_lower = 0, bound_upper = 25 * weakness) + H.AdjustEyeBlurry(1 * weakness, bound_lower = 0, bound_upper = 25 * weakness) for(var/mob/living/silicon/robot/R in range(src.effectrange,holder)) to_chat(R, "\red SYSTEM ALERT: CPU cycles slowing down.") return 1 @@ -41,8 +41,8 @@ var/weakness = GetAnomalySusceptibility(H) if(prob(weakness * 100)) to_chat(H, pick("\blue You feel like taking a nap.","\blue You feel a yawn coming on.","\blue You feel a little tired.")) - H.drowsyness = min(H.drowsyness + rand(5,15) * weakness, 50 * weakness) - H.eye_blurry = min(H.eye_blurry + rand(5,15) * weakness, 50 * weakness) + H.AdjustDrowsy(rand(5,15) * weakness, bound_lower = 0, bound_upper = 50 * weakness) + H.AdjustEyeBlurry(rand(5,15) * weakness, bound_lower = 0, bound_upper = 50 * weakness) for(var/mob/living/silicon/robot/R in range(src.effectrange,holder)) to_chat(R, "\red SYSTEM ALERT: CPU cycles slowing down.") return 1 diff --git a/code/modules/research/xenoarchaeology/finds/finds_special.dm b/code/modules/research/xenoarchaeology/finds/finds_special.dm index ce6fb4c2663..8ddcf27593b 100644 --- a/code/modules/research/xenoarchaeology/finds/finds_special.dm +++ b/code/modules/research/xenoarchaeology/finds/finds_special.dm @@ -194,7 +194,7 @@ 'sound/hallucinations/turn_around1.ogg',\ 'sound/hallucinations/turn_around2.ogg',\ ), 50, 1, -3) - M.sleeping = max(M.sleeping,rand(5,10)) + M.Sleeping(rand(5,10)) src.loc = null else processing_objects.Remove(src) diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm index 406c1f83083..6c2f7354b43 100644 --- a/code/modules/surgery/face.dm +++ b/code/modules/surgery/face.dm @@ -55,7 +55,7 @@ user.visible_message(" [user]'s hand slips, slicing [target]'s throat wth \the [tool]!" , \ " Your hand slips, slicing [target]'s throat wth \the [tool]!" ) affected.createwound(CUT, 60) - target.losebreath += 4 + target.AdjustLoseBreath(4) return 0 @@ -83,7 +83,7 @@ /datum/surgery_step/face/mend_vocal/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message(" [user]'s hand slips, clamping [target]'s trachea shut for a moment with \the [tool]!", \ " Your hand slips, clamping [user]'s trachea shut for a moment with \the [tool]!") - target.losebreath += 4 + target.AdjustLoseBreath(4) return 0 /datum/surgery_step/face/fix_face diff --git a/code/modules/surgery/organs/blood.dm b/code/modules/surgery/organs/blood.dm index 9034393bfe2..f71e9bff0be 100644 --- a/code/modules/surgery/organs/blood.dm +++ b/code/modules/surgery/organs/blood.dm @@ -101,7 +101,7 @@ else adjustOxyLoss(round((BLOOD_VOLUME_NORMAL - blood_volume) * 0.02, 1)) if(prob(5)) - eye_blurry = max(eye_blurry, 6) + EyeBlurry(6) var/word = pick("dizzy","woozy","faint") to_chat(src, "You feel very [word].") if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD) diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index bb408f51726..18f0e51b2e2 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -307,7 +307,7 @@ owner.drip(10) if(prob(4)) spawn owner.custom_emote(1, "gasps for air!") - owner.losebreath += 5 + owner.AdjustLoseBreath(5) /obj/item/organ/internal/kidneys name = "kidneys" @@ -357,10 +357,10 @@ /obj/item/organ/internal/eyes/surgeryize() if(!owner) return - owner.disabilities &= ~NEARSIGHTED - owner.disabilities &= ~BLIND - owner.eye_blurry = 0 - owner.eye_blind = 0 + owner.CureNearsighted() + owner.CureBlind() + owner.SetEyeBlurry(0) + owner.SetEyeBlind(0) /obj/item/organ/internal/liver @@ -493,6 +493,7 @@ slot = "brain_tumor" health = 3 var/organhonked = 0 + var/suffering_delay = 900 /obj/item/organ/internal/honktumor/New() ..() @@ -535,11 +536,11 @@ return if(organhonked < world.time) - organhonked = world.time+900 + organhonked = world.time + suffering_delay to_chat(owner, "HONK") - owner.sleeping = 0 - owner.stuttering = 20 - owner.adjustEarDamage(0, 30) + owner.SetSleeping(0) + owner.Stuttering(20) + owner.AdjustEarDeaf(30) owner.Weaken(3) owner << 'sound/items/AirHorn.ogg' if(prob(30)) diff --git a/code/modules/surgery/organs/pain.dm b/code/modules/surgery/organs/pain.dm index 23d2af69bf3..f0b4b912eaf 100644 --- a/code/modules/surgery/organs/pain.dm +++ b/code/modules/surgery/organs/pain.dm @@ -15,8 +15,8 @@ mob/living/carbon/proc/pain(var/partname, var/amount, var/force, var/burning = 0 if(world.time < next_pain_time && !force) return if(amount > 10 && istype(src,/mob/living/carbon/human)) - if(src:paralysis) - src:paralysis = max(0, src:paralysis-round(amount/10)) + if(paralysis) + AdjustParalysis(-round(amount/10)) if(amount > 50 && prob(amount / 5)) src:drop_item() var/msg @@ -132,4 +132,4 @@ mob/living/carbon/human/proc/handle_pain() toxDamageMessage = "Your body aches all over, it's driving you mad." if(toxDamageMessage && prob(toxMessageProb)) - src.custom_pain(toxDamageMessage, getToxLoss() >= 15) \ No newline at end of file + src.custom_pain(toxDamageMessage, getToxLoss() >= 15) diff --git a/code/modules/surgery/organs/subtypes/diona.dm b/code/modules/surgery/organs/subtypes/diona.dm index 0f75fe9f80f..a4b0d8fb92b 100644 --- a/code/modules/surgery/organs/subtypes/diona.dm +++ b/code/modules/surgery/organs/subtypes/diona.dm @@ -169,10 +169,10 @@ /obj/item/organ/internal/diona_receptor/surgeryize() if(!owner) return - owner.disabilities &= ~NEARSIGHTED - owner.disabilities &= ~BLIND - owner.eye_blurry = 0 - owner.eye_blind = 0 + owner.CureNearsighted() + owner.CureBlind() + owner.SetEyeBlurry(0) + owner.SetEyeBlind(0) //TODO:Make absorb rads on insert diff --git a/code/modules/surgery/organs/subtypes/machine.dm b/code/modules/surgery/organs/subtypes/machine.dm index 61b2f143f69..0f402a42e5d 100644 --- a/code/modules/surgery/organs/subtypes/machine.dm +++ b/code/modules/surgery/organs/subtypes/machine.dm @@ -142,10 +142,10 @@ /obj/item/organ/internal/optical_sensor/surgeryize() if(!owner) return - owner.disabilities &= ~NEARSIGHTED - owner.disabilities &= ~BLIND - owner.eye_blurry = 0 - owner.eye_blind = 0 + owner.CureNearsighted() + owner.CureBlind() + owner.SetEyeBlurry(0) + owner.SetEyeBlind(0) // Used for an MMI or posibrain being installed into a human. diff --git a/paradise.dme b/paradise.dme index 17f48fd9dba..1cd04564e77 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1434,9 +1434,11 @@ #include "code\modules\mob\mob_movement.dm" #include "code\modules\mob\mob_transformation_simple.dm" #include "code\modules\mob\say.dm" +#include "code\modules\mob\status_procs.dm" #include "code\modules\mob\transform_procs.dm" #include "code\modules\mob\typing_indicator.dm" #include "code\modules\mob\update_icons.dm" +#include "code\modules\mob\update_status.dm" #include "code\modules\mob\camera\camera.dm" #include "code\modules\mob\dead\death.dm" #include "code\modules\mob\dead\observer\login.dm" @@ -1455,6 +1457,8 @@ #include "code\modules\mob\living\login.dm" #include "code\modules\mob\living\logout.dm" #include "code\modules\mob\living\say.dm" +#include "code\modules\mob\living\status_procs.dm" +#include "code\modules\mob\living\update_status.dm" #include "code\modules\mob\living\carbon\_defines.dm" #include "code\modules\mob\living\carbon\carbon.dm" #include "code\modules\mob\living\carbon\carbon_defenses.dm" From 8a6db8891f440bbe28990103972d36a6751b908a Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Mon, 5 Sep 2016 16:11:30 -0700 Subject: [PATCH 08/30] Fox's requests --- code/game/machinery/poolcontroller.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 4 +- code/modules/mob/living/carbon/life.dm | 4 +- .../mob/living/silicon/robot/update_status.dm | 4 ++ code/modules/mob/living/status_procs.dm | 40 +++++++------------ code/modules/mob/mob_movement.dm | 2 +- code/modules/power/treadmill.dm | 2 +- paradise.dme | 1 + 8 files changed, 27 insertions(+), 32 deletions(-) create mode 100644 code/modules/mob/living/silicon/robot/update_status.dm diff --git a/code/game/machinery/poolcontroller.dm b/code/game/machinery/poolcontroller.dm index 1c764f0d346..452408ccdaa 100644 --- a/code/game/machinery/poolcontroller.dm +++ b/code/game/machinery/poolcontroller.dm @@ -100,7 +100,7 @@ if(drownee.stat == DEAD) //Dead spacemen don't drown more return - if(drownee.lose_breath > 20) //You've probably got bigger problems than drowning at this point, so we won't add to it until you get that under control. + if(drownee.losebreath > 20) //You've probably got bigger problems than drowning at this point, so we won't add to it until you get that under control. return if(drownee.stat) //Mob is in critical. diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index e308e3da3dd..471cb6bbf69 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -283,7 +283,7 @@ if(health <= config.health_threshold_crit) AdjustLoseBreath(1) - if(lose_breath > 0) + if(losebreath > 0) AdjustLoseBreath(-1) if(prob(10)) spawn emote("gasp") @@ -695,7 +695,7 @@ else overeatduration -= 2 - if(drowsy) + if(drowsyness) AdjustDrowsy(-1) EyeBlurry(2) if(prob(5)) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index ec4206a7dd5..5e0841168e0 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -51,7 +51,7 @@ if(health <= config.health_threshold_crit) AdjustLoseBreath(1) - if(lose_breath > 0) + if(losebreath > 0) AdjustLoseBreath(-1) if(prob(10)) spawn emote("gasp") @@ -321,7 +321,7 @@ src = oldsrc AdjustDizzy(-restingpwr) - if(drowsy) + if(drowsyness) AdjustDrowsy(-restingpwr) EyeBlurry(2) if(prob(5)) diff --git a/code/modules/mob/living/silicon/robot/update_status.dm b/code/modules/mob/living/silicon/robot/update_status.dm new file mode 100644 index 00000000000..ecdee3c023b --- /dev/null +++ b/code/modules/mob/living/silicon/robot/update_status.dm @@ -0,0 +1,4 @@ +// No args for restraints because robots don't have those +/mob/living/silicon/robot/incapacitated() + if(stat || lockcharge || weakened || stunned || paralysis || !is_component_functioning("actuator")) + return 1 diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index 3b7189a5cdf..3b634b2920b 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -109,7 +109,7 @@ /mob // On `/mob` for now, to support legacy code var/confused = 0 var/dizziness = 0 - var/drowsy = 0 + var/drowsyness = 0 var/druggy = 0 var/drunk = 0 var/ear_damage = 0 @@ -118,7 +118,7 @@ var/eye_blurry = 0 var/hallucination = 0 var/jitteriness = 0 - var/lose_breath = 0 + var/losebreath = 0 var/paralysis = 0 var/silent = 0 var/sleeping = 0 @@ -188,13 +188,13 @@ // DROWSY /mob/living/Drowsy(amount) - SetDrowsy(max(drowsy, amount)) + SetDrowsy(max(drowsyness, amount)) /mob/living/SetDrowsy(amount) - drowsy = max(amount, 0) + drowsyness = max(amount, 0) /mob/living/AdjustDrowsy(amount, bound_lower = 0, bound_upper = INFINITY) - var/new_value = directional_bounded_sum(drowsy, amount, bound_lower, bound_upper) + var/new_value = directional_bounded_sum(drowsyness, amount, bound_lower, bound_upper) SetDrowsy(new_value) // DRUNK @@ -302,8 +302,6 @@ // Jitter is also associated with stun if(status_flags & CANSTUN || force) jitteriness = max(amount, 0) - else - jitteriness = 0 /mob/living/AdjustJitter(amount, bound_lower = 0, bound_upper = INFINITY, force = 0) var/new_value = directional_bounded_sum(jitteriness, amount, bound_lower, bound_upper) @@ -312,13 +310,13 @@ // LOSE_BREATH /mob/living/LoseBreath(amount) - SetLoseBreath(max(lose_breath, amount)) + SetLoseBreath(max(losebreath, amount)) /mob/living/SetLoseBreath(amount) - lose_breath = max(amount, 0) + losebreath = max(amount, 0) /mob/living/AdjustLoseBreath(amount, bound_lower = 0, bound_upper = INFINITY) - var/new_value = directional_bounded_sum(lose_breath, amount, bound_lower, bound_upper) + var/new_value = directional_bounded_sum(losebreath, amount, bound_lower, bound_upper) SetLoseBreath(new_value) // PARALYSE @@ -329,11 +327,9 @@ /mob/living/SetParalysis(amount, updating = 1, force = 0) if(status_flags & CANPARALYSE || force) paralysis = max(amount, 0) - else - paralysis = 0 - if(updating) - update_canmove() - update_stat() + if(updating) + update_canmove() + update_stat() /mob/living/AdjustParalysis(amount, bound_lower = 0, bound_upper = INFINITY, updating = 1, force = 0) var/new_value = directional_bounded_sum(paralysis, amount, bound_lower, bound_upper) @@ -398,10 +394,8 @@ /mob/living/SetStunned(amount, updating = 1, force = 0) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned" if(status_flags & CANSTUN || force) stunned = max(amount, 0) - else if(stunned) - stunned = 0 - if(updating) - update_canmove() + if(updating) + update_canmove() /mob/living/AdjustStunned(amount, bound_lower = 0, bound_upper = INFINITY, updating = 1, force = 0) var/new_value = directional_bounded_sum(stunned, amount, bound_lower, bound_upper) @@ -417,8 +411,6 @@ //From mob/living/apply_effect: "Stuttering is often associated with Stun" if(status_flags & CANSTUN || force) stuttering = max(stuttering, 0) - else - stuttering = 0 /mob/living/AdjustStuttering(amount, bound_lower = 0, bound_upper = INFINITY, force = 0) var/new_value = directional_bounded_sum(stuttering, amount, bound_lower, bound_upper) @@ -432,10 +424,8 @@ /mob/living/SetWeakened(amount, updating = 1, force = 0) if(status_flags & CANWEAKEN || force) weakened = max(amount, 0) - else - weakened = 0 - if(updating) - update_canmove() //updates lying, canmove and icons + if(updating) + update_canmove() //updates lying, canmove and icons /mob/living/AdjustWeakened(amount, bound_lower = 0, bound_upper = INFINITY, updating = 1, force = 0) var/new_value = directional_bounded_sum(weakened, amount, bound_lower, bound_upper) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index fff30f68155..4c210f6f8f8 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -233,7 +233,7 @@ mob.last_movement = world.time switch(mob.m_intent) if("run") - if(mob.drowsy > 0) + if(mob.drowsyness > 0) move_delay += 6 move_delay += 1+config.run_speed if("walk") diff --git a/code/modules/power/treadmill.dm b/code/modules/power/treadmill.dm index 7c263157342..0dc2bbb5f76 100644 --- a/code/modules/power/treadmill.dm +++ b/code/modules/power/treadmill.dm @@ -71,7 +71,7 @@ var/mob_speed = M.movement_delay() switch(M.m_intent) if("run") - if(M.drowsy > 0) + if(M.drowsyness > 0) mob_speed += 6 mob_speed += config.run_speed - 1 if("walk") diff --git a/paradise.dme b/paradise.dme index 1cd04564e77..bd6e246e18c 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1592,6 +1592,7 @@ #include "code\modules\mob\living\silicon\robot\robot_items.dm" #include "code\modules\mob\living\silicon\robot\robot_modules.dm" #include "code\modules\mob\living\silicon\robot\robot_movement.dm" +#include "code\modules\mob\living\silicon\robot\update_status.dm" #include "code\modules\mob\living\silicon\robot\drone\drone.dm" #include "code\modules\mob\living\silicon\robot\drone\drone_abilities.dm" #include "code\modules\mob\living\silicon\robot\drone\drone_console.dm" From 7c8709b360b472de101d49fe5a3356cb4e32e4db Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Fri, 14 Oct 2016 17:56:57 -0700 Subject: [PATCH 09/30] Brings over `update_stat` --- .../mob/living/carbon/brain/update_status.dm | 8 +++ .../mob/living/carbon/update_status.dm | 17 +++++++ code/modules/mob/living/living.dm | 8 --- .../mob/living/silicon/ai/update_status.dm | 10 ++++ .../mob/living/silicon/pai/update_status.dm | 3 ++ .../silicon/robot/drone/update_status.dm | 10 ++++ .../mob/living/silicon/robot/update_status.dm | 17 +++++++ code/modules/mob/living/stat_states.dm | 50 +++++++++++++++++++ paradise.dme | 6 +++ 9 files changed, 121 insertions(+), 8 deletions(-) create mode 100644 code/modules/mob/living/carbon/brain/update_status.dm create mode 100644 code/modules/mob/living/carbon/update_status.dm create mode 100644 code/modules/mob/living/silicon/ai/update_status.dm create mode 100644 code/modules/mob/living/silicon/pai/update_status.dm create mode 100644 code/modules/mob/living/silicon/robot/drone/update_status.dm create mode 100644 code/modules/mob/living/stat_states.dm diff --git a/code/modules/mob/living/carbon/brain/update_status.dm b/code/modules/mob/living/carbon/brain/update_status.dm new file mode 100644 index 00000000000..2532edfe37d --- /dev/null +++ b/code/modules/mob/living/carbon/brain/update_status.dm @@ -0,0 +1,8 @@ +/mob/living/carbon/brain/update_stat() + if(status_flags & GODMODE) + return + // if(health <= min_health) + if(health <= config.health_threshold_dead) + if(stat != DEAD) + death() + // Put brain(organ) damaging code here diff --git a/code/modules/mob/living/carbon/update_status.dm b/code/modules/mob/living/carbon/update_status.dm new file mode 100644 index 00000000000..6b333c19d07 --- /dev/null +++ b/code/modules/mob/living/carbon/update_status.dm @@ -0,0 +1,17 @@ +/mob/living/carbon/update_stat() + if(status_flags & GODMODE) + return + if(stat != DEAD) +// if(health <= min_health) + if(health <= config.health_threshold_dead) + death() + return +// if(paralysis || sleeping || getOxyLoss() > low_oxy_ko || (status_flags & FAKEDEATH) || health <= crit_health) + if(paralysis || sleeping || getOxyLoss() > 40 || (status_flags & FAKEDEATH) || health <= config.health_threshold_crit) + if(stat == CONSCIOUS) + KnockOut() + else + if(stat == UNCONSCIOUS) + // updating=FALSE because `WakeUp` will handle canmove up for us + StopResting(updating=FALSE) + WakeUp() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 52215b3e08b..dd9e9f7cbd6 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -310,14 +310,6 @@ C.reagents.clear_reagents() C.reagents.addiction_list.Cut() -/mob/living/proc/update_revive() // handles revival through other means than cloning or adminbus (defib, IPC repair) - stat = CONSCIOUS - dead_mob_list -= src - living_mob_list |= src - mob_list |= src - SetEarDeaf(0) - timeofdeath = null - /mob/living/proc/rejuvenate() var/mob/living/carbon/human/human_mob = null //Get this declared for use later. diff --git a/code/modules/mob/living/silicon/ai/update_status.dm b/code/modules/mob/living/silicon/ai/update_status.dm new file mode 100644 index 00000000000..4fa060abf39 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/update_status.dm @@ -0,0 +1,10 @@ +/mob/living/silicon/ai/update_stat() + if(status_flags & GODMODE) + return + if(stat != DEAD) + if(health <= config.health_threshold_dead) + death() + return + else if(stat == UNCONSCIOUS) + WakeUp() + //diag_hud_set_status() diff --git a/code/modules/mob/living/silicon/pai/update_status.dm b/code/modules/mob/living/silicon/pai/update_status.dm new file mode 100644 index 00000000000..155ecc84a28 --- /dev/null +++ b/code/modules/mob/living/silicon/pai/update_status.dm @@ -0,0 +1,3 @@ +/mob/living/silicon/pai/update_stat() + if(health <= 0) + death(gibbed = 0) diff --git a/code/modules/mob/living/silicon/robot/drone/update_status.dm b/code/modules/mob/living/silicon/robot/drone/update_status.dm new file mode 100644 index 00000000000..97d2214c2e2 --- /dev/null +++ b/code/modules/mob/living/silicon/robot/drone/update_status.dm @@ -0,0 +1,10 @@ +//Easiest to check this here, then check again in the robot proc. +//Standard robots use config for crit, which is somewhat excessive for these guys. +//Drones killed by damage will gib. +/mob/living/silicon/robot/drone/update_stat() + if(status_flags & GODMODE) + return + if(health <= -35 && stat != DEAD) + gib() + return + return ..() diff --git a/code/modules/mob/living/silicon/robot/update_status.dm b/code/modules/mob/living/silicon/robot/update_status.dm index ecdee3c023b..a28aae28278 100644 --- a/code/modules/mob/living/silicon/robot/update_status.dm +++ b/code/modules/mob/living/silicon/robot/update_status.dm @@ -2,3 +2,20 @@ /mob/living/silicon/robot/incapacitated() if(stat || lockcharge || weakened || stunned || paralysis || !is_component_functioning("actuator")) return 1 + +/mob/living/silicon/robot/update_stat() + if(status_flags & GODMODE) + return + if(stat != DEAD) + if(health <= -maxHealth) //die only once + death() + return + if(!is_component_functioning("actuator") || paralysis || sleeping || stunned || weakened || getOxyLoss() > maxHealth * 0.5) + if(stat == CONSCIOUS) + KnockOut() + else + if(stat == UNCONSCIOUS) + WakeUp() + // diag_hud_set_status() + // diag_hud_set_health() + // update_health_hud() diff --git a/code/modules/mob/living/stat_states.dm b/code/modules/mob/living/stat_states.dm new file mode 100644 index 00000000000..49c91a10d99 --- /dev/null +++ b/code/modules/mob/living/stat_states.dm @@ -0,0 +1,50 @@ +// There, now `stat` is a proper state-machine + +/mob/living/proc/KnockOut(updating = 1) + if(stat == DEAD) + log_runtime(EXCEPTION("KnockOut called on a dead mob."), src) + return 0 + else if(stat == UNCONSCIOUS) + return 0 + add_logs(src, null, "fallen unconscious at [atom_loc_line(get_turf(src))]", admin=0) + stat = UNCONSCIOUS + if(updating) + // update_blind_effects() + update_canmove() + return 1 + +/mob/living/proc/WakeUp(updating = 1) + if(stat == DEAD) + log_runtime(EXCEPTION("WakeUp called on a dead mob."), src) + return 0 + else if(stat == CONSCIOUS) + return 0 + add_logs(src, null, "woken up at [atom_loc_line(get_turf(src))]", admin=0) + stat = CONSCIOUS + if(updating) + // update_blind_effects() + update_canmove() + return 1 + +/mob/living/proc/can_be_revived() + . = TRUE + // if(health <= min_health) + if(health <= config.health_threshold_dead) + return FALSE + +// death() is used to make a mob die + +// handles revival through other means than cloning or adminbus (defib, IPC repair) +/mob/living/proc/update_revive() + if(stat != DEAD) + return + if(!can_be_revived()) + return + add_logs(src, null, "came back to life at [atom_loc_line(get_turf(src))]", admin=0) + stat = CONSCIOUS + dead_mob_list -= src + living_mob_list += src + timeofdeath = null + update_canmove() + // update_blind_effects() + updatehealth() diff --git a/paradise.dme b/paradise.dme index bd6e246e18c..76be0a60f57 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1457,6 +1457,7 @@ #include "code\modules\mob\living\login.dm" #include "code\modules\mob\living\logout.dm" #include "code\modules\mob\living\say.dm" +#include "code\modules\mob\living\stat_states.dm" #include "code\modules\mob\living\status_procs.dm" #include "code\modules\mob\living\update_status.dm" #include "code\modules\mob\living\carbon\_defines.dm" @@ -1469,6 +1470,7 @@ #include "code\modules\mob\living\carbon\shock.dm" #include "code\modules\mob\living\carbon\superheroes.dm" #include "code\modules\mob\living\carbon\update_icons.dm" +#include "code\modules\mob\living\carbon\update_status.dm" #include "code\modules\mob\living\carbon\alien\alien.dm" #include "code\modules\mob\living\carbon\alien\alien_defenses.dm" #include "code\modules\mob\living\carbon\alien\death.dm" @@ -1505,6 +1507,7 @@ #include "code\modules\mob\living\carbon\brain\MMI.dm" #include "code\modules\mob\living\carbon\brain\posibrain.dm" #include "code\modules\mob\living\carbon\brain\say.dm" +#include "code\modules\mob\living\carbon\brain\update_status.dm" #include "code\modules\mob\living\carbon\human\appearance.dm" #include "code\modules\mob\living\carbon\human\body_accessories.dm" #include "code\modules\mob\living\carbon\human\death.dm" @@ -1562,6 +1565,7 @@ #include "code\modules\mob\living\silicon\ai\login.dm" #include "code\modules\mob\living\silicon\ai\logout.dm" #include "code\modules\mob\living\silicon\ai\say.dm" +#include "code\modules\mob\living\silicon\ai\update_status.dm" #include "code\modules\mob\living\silicon\ai\freelook\cameranet.dm" #include "code\modules\mob\living\silicon\ai\freelook\chunk.dm" #include "code\modules\mob\living\silicon\ai\freelook\eye.dm" @@ -1578,6 +1582,7 @@ #include "code\modules\mob\living\silicon\pai\say.dm" #include "code\modules\mob\living\silicon\pai\software.dm" #include "code\modules\mob\living\silicon\pai\software_modules.dm" +#include "code\modules\mob\living\silicon\pai\update_status.dm" #include "code\modules\mob\living\silicon\robot\component.dm" #include "code\modules\mob\living\silicon\robot\death.dm" #include "code\modules\mob\living\silicon\robot\emote.dm" @@ -1600,6 +1605,7 @@ #include "code\modules\mob\living\silicon\robot\drone\drone_items.dm" #include "code\modules\mob\living\silicon\robot\drone\drone_manufacturer.dm" #include "code\modules\mob\living\silicon\robot\drone\drone_say.dm" +#include "code\modules\mob\living\silicon\robot\drone\update_status.dm" #include "code\modules\mob\living\simple_animal\constructs.dm" #include "code\modules\mob\living\simple_animal\corpse.dm" #include "code\modules\mob\living\simple_animal\parrot.dm" From be125358b34c5c2c68fba47d939e708ee8c7b930 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Fri, 14 Oct 2016 23:19:05 -0700 Subject: [PATCH 10/30] Adds update_canmove to mob.Sleep() --- code/modules/mob/living/status_procs.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index 3b634b2920b..bc12dfdeb87 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -357,6 +357,7 @@ update_sleeping_effects() if(updating) update_stat() + update_canmove() /mob/living/AdjustSleeping(amount, bound_lower = 0, bound_upper = INFINITY, updating = 1) var/new_value = directional_bounded_sum(sleeping, amount, bound_lower, bound_upper) From 698782d1ad345d75c7ff760f21f8d3487f8c25a4 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Sat, 15 Oct 2016 03:22:13 -0700 Subject: [PATCH 11/30] Puts the oxy KO threshold back to 50 --- code/modules/mob/living/carbon/update_status.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/update_status.dm b/code/modules/mob/living/carbon/update_status.dm index 6b333c19d07..3b0d3a045fc 100644 --- a/code/modules/mob/living/carbon/update_status.dm +++ b/code/modules/mob/living/carbon/update_status.dm @@ -7,7 +7,7 @@ death() return // if(paralysis || sleeping || getOxyLoss() > low_oxy_ko || (status_flags & FAKEDEATH) || health <= crit_health) - if(paralysis || sleeping || getOxyLoss() > 40 || (status_flags & FAKEDEATH) || health <= config.health_threshold_crit) + if(paralysis || sleeping || getOxyLoss() > 50 || (status_flags & FAKEDEATH) || health <= config.health_threshold_crit) if(stat == CONSCIOUS) KnockOut() else From 4b81269adc8d3bd5d1d8db3841435f9a3a11177a Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 25 Oct 2016 04:14:39 -0400 Subject: [PATCH 12/30] reagents --- code/modules/food_and_drinks/food/candy.dm | 365 +--- .../food_and_drinks/food/customizables.dm | 6 +- code/modules/food_and_drinks/food/meat.dm | 10 +- code/modules/food_and_drinks/food/seafood.dm | 127 +- code/modules/food_and_drinks/food/snacks.dm | 1598 +++++------------ .../food_and_drinks/recipes/recipes_candy.dm | 5 + .../food_and_drinks/recipes/recipes_grill.dm | 5 + .../food_and_drinks/recipes/recipes_oven.dm | 15 + .../reagents/reagent_containers/pill.dm | 6 - 9 files changed, 523 insertions(+), 1614 deletions(-) diff --git a/code/modules/food_and_drinks/food/candy.dm b/code/modules/food_and_drinks/food/candy.dm index d41272ef78a..63385bfb2ce 100644 --- a/code/modules/food_and_drinks/food/candy.dm +++ b/code/modules/food_and_drinks/food/candy.dm @@ -23,11 +23,7 @@ icon_state = "chocolatebar" filling_color = "#7D5F46" bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("chocolate",4) + list_reagents = list("nutriment" = 2, "chocolate" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/caramel name = "Caramel" @@ -35,11 +31,8 @@ icon_state = "caramel" filling_color = "#DB944D" bitesize = 2 + list_reagents = list("cream" = 2, "sugar" = 2) -/obj/item/weapon/reagent_containers/food/snacks/candy/caramel/New() - ..() - reagents.add_reagent("cream", 2) - reagents.add_reagent("sugar", 2) /obj/item/weapon/reagent_containers/food/snacks/candy/toffee name = "Toffee" @@ -47,11 +40,7 @@ icon_state = "toffee" filling_color = "#7D5F46" bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/candy/toffee/New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sugar", 3) + list_reagents = list("nutriment" = 3, "sugar" = 3) /obj/item/weapon/reagent_containers/food/snacks/candy/nougat name = "Nougat" @@ -59,14 +48,7 @@ icon_state = "nougat" filling_color = "#7D5F46" bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/candy/nougat/New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sugar", 3) - spawn(1) - reagents.del_reagent("egg") - reagents.update_total() + list_reagents = list("nutriment" = 3, "sugar" = 3) /obj/item/weapon/reagent_containers/food/snacks/candy/taffy name = "Saltwater Taffy" @@ -74,12 +56,11 @@ icon_state = "candy1" filling_color = "#7D5F46" bitesize = 2 + list_reagents = list("nutriment" = 3, "sugar" = 3) /obj/item/weapon/reagent_containers/food/snacks/candy/taffy/New() ..() icon_state = pick("candy1", "candy2", "candy3", "candy4", "candy5") - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sugar", 3) /obj/item/weapon/reagent_containers/food/snacks/candy/fudge name = "Fudge" @@ -87,11 +68,7 @@ icon_state = "fudge" filling_color = "#7D5F46" bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/fudge/New() - ..() - reagents.add_reagent("cream", 3) - reagents.add_reagent("chocolate",6) + list_reagents = list("cream" = 3, "chocolate" = 6) /obj/item/weapon/reagent_containers/food/snacks/candy/fudge/peanut name = "Peanut Fudge" @@ -110,10 +87,7 @@ desc = "An extra creamy fudge with bits of real chocolate cookie mixed in. Crunchy!" icon_state = "fudge_cookies_n_cream" filling_color = "#7D5F46" - -/obj/item/weapon/reagent_containers/food/snacks/candy/fudge/cookies_n_cream/New() - ..() - reagents.add_reagent("cream", 3) + list_reagents = list("cream" = 6, "chocolate" = 6) /obj/item/weapon/reagent_containers/food/snacks/candy/fudge/turtle name = "Turtle Fudge" @@ -130,11 +104,7 @@ desc = "A little treat for blood donors." trash = /obj/item/trash/candy bitesize = 5 - -/obj/item/weapon/reagent_containers/food/snacks/candy/donor/New() - ..() - reagents.add_reagent("nutriment", 10) - reagents.add_reagent("sugar", 3) + list_reagents = list("nutriment" = 10, "sugar" = 3) /obj/item/weapon/reagent_containers/food/snacks/candy/candy_corn name = "candy corn" @@ -142,11 +112,7 @@ icon_state = "candycorn" filling_color = "#FFFCB0" bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/candy/candy_corn/New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("sugar", 2) + list_reagents = list("nutriment" = 4, "sugar" = 2) // *********************************************************** // Candy Products (plain / unflavored) @@ -158,11 +124,8 @@ icon_state = "cottoncandy_plain" trash = /obj/item/weapon/c_tube filling_color = "#FFFFFF" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/New() - ..() - reagents.add_reagent("sugar", 15) + bitesize = 4 + list_reagents = list("sugar" = 15) /obj/item/weapon/reagent_containers/food/snacks/candy/candybar name = "candy" @@ -171,11 +134,7 @@ trash = /obj/item/trash/candy filling_color = "#7D5F46" bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/candybar/New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("chocolate",5) + list_reagents = list("nutriment" = 2, "chocolate" = 5) /obj/item/weapon/reagent_containers/food/snacks/candy/candycane name = "candy cane" @@ -183,11 +142,7 @@ icon_state = "candycane" filling_color = "#F2F2F2" bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/candy/candycane/New() - ..() - reagents.add_reagent("minttoxin", 1) - reagents.add_reagent("sugar", 5) + list_reagents = list("minttoxin" = 4, "sugar" = 5) /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear name = "gummy bear" @@ -195,10 +150,7 @@ icon_state = "gbear" filling_color = "#FFFFFF" bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/New() - ..() - reagents.add_reagent("sugar", 10) + list_reagents = list("sugar" = 10) /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm name = "gummy worm" @@ -206,10 +158,7 @@ icon_state = "gworm" filling_color = "#FFFFFF" bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/New() - ..() - reagents.add_reagent("sugar", 10) + list_reagents = list("sugar" = 10) /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean name = "jelly bean" @@ -217,10 +166,7 @@ icon_state = "jbean" filling_color = "#FFFFFF" bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/New() - ..() - reagents.add_reagent("sugar", 10) + list_reagents = list("sugar" = 10) /obj/item/weapon/reagent_containers/food/snacks/candy/jawbreaker name = "jawbreaker" @@ -228,10 +174,7 @@ icon_state = "jawbreaker" filling_color = "#ED0758" bitesize = 0.1 //this is gonna take a while, you'll be working at this all shift. - -/obj/item/weapon/reagent_containers/food/snacks/candy/jawbreaker/New() - ..() - reagents.add_reagent("sugar", 10) + list_reagents = list("sugar" = 10) /obj/item/weapon/reagent_containers/food/snacks/candy/cash name = "candy cash" @@ -239,23 +182,15 @@ icon_state = "candy_cash" filling_color = "#302000" bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/candy/cash/New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("chocolate", 4) + list_reagents = list("nutriment" = 2, "chocolate" = 4) /obj/item/weapon/reagent_containers/food/snacks/candy/coin name = "chocolate coin" desc = "Probably won't work in the vending machines." icon_state = "choc_coin" filling_color = "#302000" - -/obj/item/weapon/reagent_containers/food/snacks/candy/coin/New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("chocolate",4) bitesize = 3 + list_reagents = list("nutriment" = 2, "chocolate" = 4) /obj/item/weapon/reagent_containers/food/snacks/candy/gum name = "bubblegum" @@ -264,20 +199,14 @@ trash = /obj/item/trash/gum filling_color = "#FF7495" bitesize = 0.2 - -/obj/item/weapon/reagent_containers/food/snacks/candy/gum/New() - ..() - reagents.add_reagent("sugar", 5) + list_reagents = list("sugar" = 5) /obj/item/weapon/reagent_containers/food/snacks/candy/sucker name = "sucker" desc = "For being such a good sport!" icon_state = "sucker" filling_color = "#FFFFFF" - -/obj/item/weapon/reagent_containers/food/snacks/candy/sucker/New() - ..() - reagents.add_reagent("sugar", 10) + list_reagents = list("sugar" = 10) // *********************************************************** // Gummy Bear Flavors @@ -288,91 +217,56 @@ desc = "A small edible bear. It's red!" icon_state = "gbear_red" filling_color = "#801E28" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/red/New() - ..() - reagents.add_reagent("cherryjelly", 2) + list_reagents = list("sugar" = 10, "cherryjelly" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/blue name = "gummy bear" desc = "A small edible bear. It's blue!" icon_state = "gbear_blue" filling_color = "#863333" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/blue/New() - ..() - reagents.add_reagent("berryjuice", 2) + list_reagents = list("sugar" = 10, "berryjuice" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/poison name = "gummy bear" desc = "A small edible bear. It's blue!" icon_state = "gbear_blue" filling_color = "#863353" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/poison/New() - ..() - reagents.add_reagent("poisonberryjuice", 12) - spawn(1) - reagents.del_reagent("sugar") - reagents.update_total() + list_reagents = list("poisonberryjuice" = 12) /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/green name = "gummy bear" desc = "A small edible bear. It's green!" icon_state = "gbear_green" filling_color = "#365E30" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/green/New() - ..() - reagents.add_reagent("limejuice", 2) + list_reagents = list("sugar" = 10, "limejuice" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/yellow name = "gummy bear" desc = "A small edible bear. It's yellow!" icon_state = "gbear_yellow" filling_color = "#863333" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/yellow/New() - ..() - reagents.add_reagent("lemonjuice", 2) + list_reagents = list("sugar" = 10, "lemonjuice" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/orange name = "gummy bear" desc = "A small edible bear. It's orange!" icon_state = "gbear_orange" filling_color = "#E78108" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/orange/New() - ..() - reagents.add_reagent("orangejuice", 2) + list_reagents = list("sugar" = 10, "orangejuice" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/purple name = "gummy bear" desc = "A small edible bear. It's purple!" icon_state = "gbear_purple" filling_color = "#993399" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/purple/New() - ..() - reagents.add_reagent("grapejuice", 2) + list_reagents = list("sugar" = 10, "grapejuice" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/wtf name = "gummy bear" desc = "A small bear. Wait... what?" icon_state = "gbear_wtf" filling_color = "#60A584" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/wtf/New() - ..() - reagents.add_reagent("space_drugs", 2) + list_reagents = list("sugar" = 10, "space_drugs" = 2) // *********************************************************** // Gummy Worm Flavors @@ -383,91 +277,56 @@ desc = "An edible worm, made from gelatin. It's red!" icon_state = "gworm_red" filling_color = "#801E28" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/red/New() - ..() - reagents.add_reagent("cherryjelly", 2) + list_reagents = list("sugar" = 10, "cherryjelly" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/blue name = "gummy worm" desc = "An edible worm, made from gelatin. It's blue!" icon_state = "gworm_blue" filling_color = "#863333" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/blue/New() - ..() - reagents.add_reagent("berryjuice", 2) + list_reagents = list("sugar" = 10, "berryjuice" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/poison name = "gummy worm" desc = "An edible worm, made from gelatin. It's blue!" icon_state = "gworm_blue" filling_color = "#863353" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/poison/New() - ..() - reagents.add_reagent("poisonberryjuice", 12) - spawn(1) - reagents.del_reagent("sugar") - reagents.update_total() + list_reagents = list("poisonberryjuice" = 12) /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/green name = "gummy worm" desc = "An edible worm, made from gelatin. It's green!" icon_state = "gworm_green" filling_color = "#365E30" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/green/New() - ..() - reagents.add_reagent("limejuice", 10) + list_reagents = list("sugar" = 10, "limejuice" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/yellow name = "gummy worm" desc = "An edible worm, made from gelatin. It's yellow!" icon_state = "gworm_yellow" filling_color = "#863333" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/yellow/New() - ..() - reagents.add_reagent("lemonjuice", 2) + list_reagents = list("sugar" = 10, "lemonjuice" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/orange name = "gummy worm" desc = "An edible worm, made from gelatin. It's orange!" icon_state = "gworm_orange" filling_color = "#E78108" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/orange/New() - ..() - reagents.add_reagent("orangejuice", 2) + list_reagents = list("sugar" = 10, "orangejuice" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/purple name = "gummy worm" desc = "An edible worm, made from gelatin. It's purple!" icon_state = "gworm_purple" filling_color = "#993399" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/purple/New() - ..() - reagents.add_reagent("grapejuice", 2) + list_reagents = list("sugar" = 10, "grapejuice" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/wtf name = "gummy worm" desc = "An edible worm. Did it just move?" icon_state = "gworm_wtf" filling_color = "#60A584" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/wtf/New() - ..() - reagents.add_reagent("space_drugs", 2) + list_reagents = list("sugar" = 10, "space_drugs" = 2) // *********************************************************** // Jelly Bean Flavors @@ -478,146 +337,91 @@ desc = "A candy bean, guarenteed to not give you gas. It's red!" icon_state = "jbean_red" filling_color = "#801E28" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/red/New() - ..() - reagents.add_reagent("cherryjelly", 2) + list_reagents = list("sugar" = 10, "cherryjelly" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/blue name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. It's blue!" icon_state = "jbean_blue" filling_color = "#863333" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/blue/New() - ..() - reagents.add_reagent("berryjuice", 2) + list_reagents = list("sugar" = 10, "berryjuice" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/poison name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. It's blue!" icon_state = "jbean_blue" filling_color = "#863353" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/poison/New() - ..() - reagents.add_reagent("poisonberryjuice", 12) - spawn(1) - reagents.del_reagent("sugar") - reagents.update_total() + list_reagents = list("poisonberryjuice" = 12) /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/green name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. It's green!" icon_state = "jbean_green" filling_color = "#365E30" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/green/New() - ..() - reagents.add_reagent("limejuice", 2) + list_reagents = list("sugar" = 10, "limejuice" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/yellow name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. It's yellow!" icon_state = "jbean_yellow" filling_color = "#863333" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/yellow/New() - ..() - reagents.add_reagent("lemonjuice", 2) + list_reagents = list("sugar" = 10, "lemonjuice" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/orange name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. It's orange!" icon_state = "jbean_orange" filling_color = "#E78108" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/orange/New() - ..() - reagents.add_reagent("orangejuice", 2) + list_reagents = list("sugar" = 10, "orangejuice" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/purple name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. It's purple!" icon_state = "jbean_purple" filling_color = "#993399" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/purple/New() - ..() - reagents.add_reagent("grapejuice", 2) + list_reagents = list("sugar" = 10, "grapejuice" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/chocolate name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. It's chocolate!" icon_state = "jbean_choc" filling_color = "#302000" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/chocolate/New() - ..() - reagents.add_reagent("chocolate",2) + list_reagents = list("sugar" = 10, "chocolate" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/popcorn name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. It's popcorn flavored!" icon_state = "jbean_popcorn" filling_color = "#664330" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/popcorn/New() - ..() - reagents.add_reagent("nutriment", 2) + list_reagents = list("sugar" = 10, "nutriment" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/cola name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. It's Cola flavored!" icon_state = "jbean_cola" filling_color = "#102000" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/cola/New() - ..() - reagents.add_reagent("cola", 2) + list_reagents = list("sugar" = 10, "cola" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/drgibb name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. It's Dr. Gibb flavored!" icon_state = "jbean_cola" filling_color = "#102000" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/drgibb/New() - ..() - reagents.add_reagent("dr_gibb", 2) + list_reagents = list("sugar" = 10, "dr_gibb" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/coffee name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. It's Coffee flavored!" icon_state = "jbean_choc" filling_color = "#482000" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/coffee/New() - ..() - reagents.add_reagent("coffee", 2) + list_reagents = list("sugar" = 10, "coffee" = 2) /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/wtf name = "jelly bean" desc = "A candy bean, guarenteed to not give you gas. You aren't sure what color it is." icon_state = "jbean_wtf" filling_color = "#60A584" - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/wtf/New() - ..() - reagents.add_reagent("space_drugs", 2) + list_reagents = list("sugar" = 10, "space_drugs" = 2) // *********************************************************** // Cotton Candy Flavors @@ -629,11 +433,7 @@ icon_state = "cottoncandy_red" trash = /obj/item/weapon/c_tube filling_color = "#801E28" - bitesize = 4 - -/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/red/New() - ..() - reagents.add_reagent("cherryjelly", 5) + list_reagents = list("sugar" = 15, "cherryjelly" = 5) /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/blue name = "cotton candy" @@ -641,11 +441,7 @@ icon_state = "cottoncandy_blue" trash = /obj/item/weapon/c_tube filling_color = "#863333" - bitesize = 4 - -/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/blue/New() - ..() - reagents.add_reagent("berryjuice", 5) + list_reagents = list("sugar" = 15, "berryjuice" = 5) /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/poison name = "cotton candy" @@ -653,14 +449,7 @@ icon_state = "cottoncandy_blue" trash = /obj/item/weapon/c_tube filling_color = "#863353" - bitesize = 4 - -/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/poison/New() - ..() - reagents.add_reagent("poisonberryjuice", 20) - spawn(1) - reagents.del_reagent("sugar") - reagents.update_total() + list_reagents = list("poisonberryjuice" = 20) /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/green name = "cotton candy" @@ -668,11 +457,7 @@ icon_state = "cottoncandy_green" trash = /obj/item/weapon/c_tube filling_color = "#365E30" - bitesize = 4 - -/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/green/New() - ..() - reagents.add_reagent("limejuice", 5) + list_reagents = list("sugar" = 15, "limejuice" = 5) /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/yellow name = "cotton candy" @@ -680,11 +465,7 @@ icon_state = "cottoncandy_yellow" trash = /obj/item/weapon/c_tube filling_color = "#863333" - bitesize = 4 - -/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/yellow/New() - ..() - reagents.add_reagent("lemonjuice", 5) + list_reagents = list("sugar" = 15, "lemonjuice" = 5) /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/orange name = "cotton candy" @@ -692,11 +473,7 @@ icon_state = "cottoncandy_orange" trash = /obj/item/weapon/c_tube filling_color = "#E78108" - bitesize = 4 - -/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/orange/New() - ..() - reagents.add_reagent("orangejuice", 5) + list_reagents = list("sugar" = 15, "orangejuice" = 5) /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/purple name = "cotton candy" @@ -704,11 +481,7 @@ icon_state = "cottoncandy_purple" trash = /obj/item/weapon/c_tube filling_color = "#993399" - bitesize = 4 - -/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/purple/New() - ..() - reagents.add_reagent("grapejuice", 5) + list_reagents = list("sugar" = 15, "grapejuice" = 5) /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/pink name = "cotton candy" @@ -716,11 +489,7 @@ icon_state = "cottoncandy_pink" trash = /obj/item/weapon/c_tube filling_color = "#863333" - bitesize = 4 - -/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/pink/New() - ..() - reagents.add_reagent("watermelonjuice", 5) + list_reagents = list("sugar" = 15, "watermelonjuice" = 5) /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/rainbow name = "cotton candy" @@ -728,14 +497,7 @@ icon_state = "cottoncandy_rainbow" trash = /obj/item/weapon/c_tube filling_color = "#C8A5DC" - bitesize = 4 - -/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/rainbow/New() - ..() - reagents.add_reagent("omnizine", 20) - spawn(1) - reagents.del_reagent("sugar") - reagents.update_total() + list_reagents = list("omnizine" = 20) /obj/item/weapon/reagent_containers/food/snacks/candy/cotton/bad_rainbow name = "cotton candy" @@ -743,14 +505,7 @@ icon_state = "cottoncandy_rainbow" trash = /obj/item/weapon/c_tube filling_color = "#32127A" - bitesize = 4 - -/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/bad_rainbow/New() - ..() - reagents.add_reagent("sulfonal", 20) - spawn(1) - reagents.del_reagent("sugar") - reagents.update_total() + list_reagents = list("sulfonal" = 20) // *********************************************************** // Candybar Flavors diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm index b0706e89f55..66aee4b2616 100644 --- a/code/modules/food_and_drinks/food/customizables.dm +++ b/code/modules/food_and_drinks/food/customizables.dm @@ -79,11 +79,7 @@ trash = /obj/item/trash/plate bitesize = 2 var/list/ingredients = list() - - New() - ..() - reagents.add_reagent("nutriment", 8) - + list_reagents = list("nutriment" = 8) /obj/item/weapon/reagent_containers/food/snacks/customizable/pizza name = "personal pizza" diff --git a/code/modules/food_and_drinks/food/meat.dm b/code/modules/food_and_drinks/food/meat.dm index 7cf513c2e91..4635f6eb9b1 100644 --- a/code/modules/food_and_drinks/food/meat.dm +++ b/code/modules/food_and_drinks/food/meat.dm @@ -5,10 +5,7 @@ health = 180 filling_color = "#FF1C1C" bitesize = 3 - - New() - ..() - reagents.add_reagent("protein", 3) + list_reagents = list("protein" = 3) /obj/item/weapon/reagent_containers/food/snacks/meat/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/weapon/kitchen/knife) || istype(W, /obj/item/weapon/scalpel)) @@ -47,7 +44,4 @@ /obj/item/weapon/reagent_containers/food/snacks/meat/ham name = "Ham" desc = "Taste like bacon." - - New() - ..() - reagents.add_reagent("porktonium", 10) + list_reagents = list("protein" = 3, "porktonium" = 10) \ No newline at end of file diff --git a/code/modules/food_and_drinks/food/seafood.dm b/code/modules/food_and_drinks/food/seafood.dm index aa6960db3d3..c0a95d39315 100644 --- a/code/modules/food_and_drinks/food/seafood.dm +++ b/code/modules/food_and_drinks/food/seafood.dm @@ -6,11 +6,7 @@ icon_state = "fishfillet" filling_color = "#FFDEFE" bitesize = 6 - - New() - ..() - reagents.add_reagent("protein", 3) - reagents.add_reagent("carpotoxin", 3) + list_reagents = list("protein" = 3, "carpotoxin" = 3) /obj/item/weapon/reagent_containers/food/snacks/salmonmeat name = "raw salmon" @@ -19,10 +15,7 @@ icon_state = "fishfillet" filling_color = "#FFDEFE" bitesize = 3 - - New() - ..() - reagents.add_reagent("protein", 3) + list_reagents = list("protein" = 3) /obj/item/weapon/reagent_containers/food/snacks/salmonsteak name = "Salmon steak" @@ -32,13 +25,7 @@ trash = /obj/item/trash/plate filling_color = "#7A3D11" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("sodiumchloride", 1) - reagents.add_reagent("blackpepper", 1) - + list_reagents = list("nutriment" = 4, "sodiumchloride" = 1, "blackpepper" = 1) /obj/item/weapon/reagent_containers/food/snacks/catfishmeat name = "raw catfish" @@ -47,10 +34,7 @@ icon_state = "fishfillet" filling_color = "#FFDEFE" bitesize = 3 - - New() - ..() - reagents.add_reagent("protein", 3) + list_reagents = list("protein" = 3) /obj/item/weapon/reagent_containers/food/snacks/fishfingers name = "Fish Fingers" @@ -59,14 +43,7 @@ icon_state = "fishfingers" filling_color = "#FFDEFE" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("carpotoxin", 3) - spawn(1) - reagents.del_reagent("egg") - reagents.update_total() + list_reagents = list("nutriment" = 4, "carpotoxin" = 3) /obj/item/weapon/reagent_containers/food/snacks/fishburger name = "Fillet -o- Carp Sandwich" @@ -75,11 +52,7 @@ icon_state = "fishburger" filling_color = "#FFDEFE" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("carpotoxin", 3) + list_reagents = list("nutriment" = 6, "carpotoxin" = 3) /obj/item/weapon/reagent_containers/food/snacks/cubancarp name = "Cuban Carp" @@ -89,12 +62,7 @@ trash = /obj/item/trash/plate filling_color = "#E9ADFF" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("carpotoxin", 3) - reagents.add_reagent("capsaicin", 3) + list_reagents = list("nutriment" = 6, "carpotoxin" = 3, "capsaicin" = 3) /obj/item/weapon/reagent_containers/food/snacks/fishandchips name = "Fish and Chips" @@ -103,11 +71,7 @@ icon_state = "fishandchips" filling_color = "#E3D796" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("carpotoxin", 3) + list_reagents = list("nutriment" = 6, "carpotoxin" = 3) /obj/item/weapon/reagent_containers/food/snacks/sashimi name = "carp sashimi" @@ -115,11 +79,7 @@ icon = 'icons/obj/food/seafood.dmi' icon_state = "sashimi" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("toxin", 5) + list_reagents = list("nutriment" = 6, "toxin" = 5) /obj/item/weapon/reagent_containers/food/snacks/fried_shrimp name = "fried shrimp" @@ -127,10 +87,7 @@ icon = 'icons/obj/food/seafood.dmi' icon_state = "shrimp_fried" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 2) + list_reagents = list("nutriment" = 2) /obj/item/weapon/reagent_containers/food/snacks/boiled_shrimp name = "boiled shrimp" @@ -138,10 +95,7 @@ icon = 'icons/obj/food/seafood.dmi' icon_state = "shrimp_cooked" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 2) + list_reagents = list("nutriment" = 2) /obj/item/weapon/reagent_containers/food/snacks/sushi_Ebi name = "Ebi Sushi" @@ -149,10 +103,7 @@ icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Ebi" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 2) + list_reagents = list("nutriment" = 2) /obj/item/weapon/reagent_containers/food/snacks/sushi_Ikura name = "Ikura Sushi" @@ -160,11 +111,7 @@ icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Ikura" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("protein", 1) + list_reagents = list("nutriment" = 2, "protein" = 1) /obj/item/weapon/reagent_containers/food/snacks/sushi_Sake name = "Sake Sushi" @@ -172,10 +119,7 @@ icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Sake" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 2) + list_reagents = list("nutriment" = 2) /obj/item/weapon/reagent_containers/food/snacks/sushi_SmokedSalmon name = "Smoked Salmon Sushi" @@ -183,10 +127,7 @@ icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_SmokedSalmon" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 2) + list_reagents = list("nutriment" = 2) /obj/item/weapon/reagent_containers/food/snacks/sushi_Tamago name = "Tamago Sushi" @@ -194,10 +135,7 @@ icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Tamago" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 2) + list_reagents = list("nutriment" = 2) /obj/item/weapon/reagent_containers/food/snacks/sushi_Inari name = "Inari Sushi" @@ -205,10 +143,7 @@ icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Inari" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 2) + list_reagents = list("nutriment" = 2) /obj/item/weapon/reagent_containers/food/snacks/sushi_Masago name = "Masago Sushi" @@ -216,11 +151,7 @@ icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Masago" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("protein", 1) + list_reagents = list("nutriment" = 2, "protein" = 1) /obj/item/weapon/reagent_containers/food/snacks/sushi_Tobiko name = "Tobiko Sushi" @@ -228,11 +159,7 @@ icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Masago" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("protein", 1) + list_reagents = list("nutriment" = 2, "protein" = 1) /obj/item/weapon/reagent_containers/food/snacks/sushi_TobikoEgg name = "Tobiko and Egg Sushi" @@ -240,11 +167,7 @@ icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_TobikoEgg" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("protein", 1) + list_reagents = list("nutriment" = 2, "protein" = 1) /obj/item/weapon/reagent_containers/food/snacks/sushi_Tai name = "Tai Sushi" @@ -252,10 +175,7 @@ icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Tai" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 2) + list_reagents = list("nutriment" = 2) /obj/item/weapon/reagent_containers/food/snacks/sushi_Unagi name = "Unagi Sushi" @@ -263,7 +183,4 @@ icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Hokki" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 2) \ No newline at end of file + list_reagents = list("nutriment" = 2) \ No newline at end of file diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index cec68d92108..d11de1b06df 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -255,11 +255,7 @@ trash = /obj/item/trash/snack_bowl filling_color = "#468C00" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("omnizine", 8) + list_reagents = list("nutriment" = 8, "omnizine" = 8) /obj/item/weapon/reagent_containers/food/snacks/chips name = "chips" @@ -267,11 +263,7 @@ icon_state = "chips" trash = /obj/item/trash/chips filling_color = "#E8C31E" - - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sodiumchloride", 1) + list_reagents = list("nutriment" = 3, "sodiumchloride" = 1) /obj/item/weapon/reagent_containers/food/snacks/cornchips name = "corn chips" @@ -279,20 +271,14 @@ icon_state = "chips" trash = /obj/item/trash/chips filling_color = "#E8C31E" - - New() - ..() - reagents.add_reagent("nutriment", 3) + list_reagents = list("nutriment" = 3) /obj/item/weapon/reagent_containers/food/snacks/cookie name = "cookie" desc = "COOKIE!!!" icon_state = "COOKIE!!!" filling_color = "#DBC94F" - - New() - ..() - reagents.add_reagent("nutriment", 5) + list_reagents = list("nutriment" = 5) /obj/item/weapon/reagent_containers/food/snacks/chocolatebar name = "Chocolate Bar" @@ -300,11 +286,7 @@ icon_state = "chocolatebar" filling_color = "#7D5F46" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("chocolate",4) + list_reagents = list("nutriment" = 2, "chocolate" = 4) /obj/item/weapon/reagent_containers/food/snacks/choc_pile //for reagent chocolate being spilled on turfs name = "Pile of Chocolate" @@ -312,10 +294,7 @@ icon_state = "cocoa" filling_color = "#7D5F46" bitesize = 2 - - New() - ..() - reagents.add_reagent("chocolate",5) //no longer can be used to generate the reagent infinitely + list_reagents = list("chocolate" = 5) /obj/item/weapon/reagent_containers/food/snacks/chocolateegg name = "Chocolate Egg" @@ -323,11 +302,7 @@ icon_state = "chocolateegg" filling_color = "#7D5F46" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("chocolate",4) + list_reagents = list("nutriment" = 3, "chocolate" = 4) /obj/item/weapon/reagent_containers/food/snacks/donut name = "donut" @@ -340,23 +315,19 @@ name = "donut" desc = "Goes great with Robust Coffee." icon_state = "donut1" - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sprinkles", 1) - if(prob(30)) - src.icon_state = "donut2" - src.name = "frosted donut" - reagents.add_reagent("sprinkles", 2) + list_reagents = list("nutriment" = 3, "sprinkles" = 1) + +/obj/item/weapon/reagent_containers/food/snacks/donut/normal/New() + ..() + if(prob(30)) + icon_state = "donut2" + name = "frosted donut" + reagents.add_reagent("sprinkles", 2) /obj/item/weapon/reagent_containers/food/snacks/donut/sprinkles name = "frosted donut" icon_state = "donut2" - - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sprinkles", 3) + list_reagents = list("nutriment" = 3, "sprinkles" = 3) /obj/item/weapon/reagent_containers/food/snacks/donut/chaos name = "Chaos Donut" @@ -365,36 +336,14 @@ filling_color = "#ED11E6" bitesize = 10 - New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("sprinkles", 1) - var/chaosselect = pick(1,2,3,4,5,6,7,8,9,10) - switch(chaosselect) - if(1) - reagents.add_reagent("nutriment", 3) - if(2) - reagents.add_reagent("capsaicin", 3) - if(3) - reagents.add_reagent("frostoil", 3) - if(4) - reagents.add_reagent("sprinkles", 3) - if(5) - reagents.add_reagent("plasma", 3) - if(6) - reagents.add_reagent("chocolate", 3) - if(7) - reagents.add_reagent("slimejelly", 3) - if(8) - reagents.add_reagent("banana", 3) - if(9) - reagents.add_reagent("berryjuice", 3) - if(10) - reagents.add_reagent("omnizine", 3) - if(prob(30)) - src.icon_state = "donut2" - src.name = "Frosted Chaos Donut" - reagents.add_reagent("sprinkles", 2) +/obj/item/weapon/reagent_containers/food/snacks/donut/chaos/New() + ..() + var/extra_reagent = pick("nutriment", "capsaicin", "frostoil", "sprinkles", "plasma", "chocolate", "slimejelly", "banana", "berryjuice", "omnizine") + reagents.add_reagent("[extra_reagent]", 3) + if(prob(30)) + icon_state = "donut2" + name = "Frosted Chaos Donut" + reagents.add_reagent("sprinkles", 2) /obj/item/weapon/reagent_containers/food/snacks/donut/jelly @@ -403,16 +352,14 @@ icon_state = "jdonut1" filling_color = "#ED1169" bitesize = 5 + list_reagents = list("nutriment" = 3, "sprinkles" = 1, "berryjuice" = 5) - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sprinkles", 1) - reagents.add_reagent("berryjuice", 5) - if(prob(30)) - src.icon_state = "jdonut2" - src.name = "Frosted Jelly Donut" - reagents.add_reagent("sprinkles", 2) +/obj/item/weapon/reagent_containers/food/snacks/donut/jelly/New() + ..() + if(prob(30)) + icon_state = "jdonut2" + name = "Frosted Jelly Donut" + reagents.add_reagent("sprinkles", 2) /obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly name = "Jelly Donut" @@ -420,16 +367,14 @@ icon_state = "jdonut1" filling_color = "#ED1169" bitesize = 5 + list_reagents = list("nutriment" = 3, "sprinkles" = 1, "slimejelly" = 5) - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sprinkles", 1) - reagents.add_reagent("slimejelly", 5) - if(prob(30)) - src.icon_state = "jdonut2" - src.name = "Frosted Jelly Donut" - reagents.add_reagent("sprinkles", 2) +/obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly/New() + ..() + if(prob(30)) + icon_state = "jdonut2" + name = "Frosted Jelly Donut" + reagents.add_reagent("sprinkles", 2) /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly name = "Jelly Donut" @@ -437,50 +382,44 @@ icon_state = "jdonut1" filling_color = "#ED1169" bitesize = 5 + list_reagents = list("nutriment" = 3, "sprinkles" = 1, "cherryjelly" = 5) - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sprinkles", 1) - reagents.add_reagent("cherryjelly", 5) - if(prob(30)) - src.icon_state = "jdonut2" - src.name = "Frosted Jelly Donut" - reagents.add_reagent("sprinkles", 2) +/obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly/New() + ..() + if(prob(30)) + icon_state = "jdonut2" + name = "Frosted Jelly Donut" + reagents.add_reagent("sprinkles", 2) /obj/item/weapon/reagent_containers/food/snacks/egg name = "egg" desc = "An egg!" icon_state = "egg" filling_color = "#FDFFD1" + list_reagents = list("protein" = 1, "egg" = 5) - New() +/obj/item/weapon/reagent_containers/food/snacks/egg/throw_impact(atom/hit_atom) + ..() + var/turf/T = get_turf(hit_atom) + new/obj/effect/decal/cleanable/egg_smudge(T) + if(reagents) + reagents.reaction(hit_atom, TOUCH) + qdel(src) + +/obj/item/weapon/reagent_containers/food/snacks/egg/attackby(obj/item/weapon/W, mob/user, params) + if(istype( W, /obj/item/toy/crayon )) + var/obj/item/toy/crayon/C = W + var/clr = C.colourName + + if(!(clr in list("blue","green","mime","orange","purple","rainbow","red","yellow"))) + to_chat(usr, "The egg refuses to take on this color!") + return + + to_chat(usr, "You color \the [src] [clr]") + icon_state = "egg-[clr]" + item_color = clr + else ..() - reagents.add_reagent("protein", 1) - reagents.add_reagent("egg", 5) - - throw_impact(atom/hit_atom) - ..() - var/turf/T = get_turf(hit_atom) - new/obj/effect/decal/cleanable/egg_smudge(T) - if(reagents) - reagents.reaction(hit_atom, TOUCH) - qdel(src) - - attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if(istype( W, /obj/item/toy/crayon )) - var/obj/item/toy/crayon/C = W - var/clr = C.colourName - - if(!(clr in list("blue","green","mime","orange","purple","rainbow","red","yellow"))) - to_chat(usr, "\blue The egg refuses to take on this color!") - return - - to_chat(usr, "\blue You color \the [src] [clr]") - icon_state = "egg-[clr]" - item_color = clr - else - ..() /obj/item/weapon/reagent_containers/food/snacks/egg/blue icon_state = "egg-blue" @@ -519,24 +458,14 @@ desc = "A fried egg, with a touch of salt and pepper." icon_state = "friedegg" filling_color = "#FFDF78" - - New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("egg", 5) - reagents.add_reagent("sodiumchloride", 1) - reagents.add_reagent("blackpepper", 1) + list_reagents = list("nutriment" = 2, "egg" = 5, "sodiumchloride" = 1, "blackpepper" = 1) /obj/item/weapon/reagent_containers/food/snacks/boiledegg name = "Boiled egg" desc = "A hard boiled egg." icon_state = "egg" filling_color = "#FFFFFF" - - New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("egg", 5) + list_reagents = list("nutriment" = 2, "egg" = 5) /obj/item/weapon/reagent_containers/food/snacks/organ @@ -546,10 +475,7 @@ icon_state = "appendix" filling_color = "#E00D34" bitesize = 3 - - New() - ..() - reagents.add_reagent("protein", 4) + list_reagents = list("protein" = 4) /obj/item/weapon/reagent_containers/food/snacks/appendix //yes, this is the same as meat. I might do something different in future @@ -559,10 +485,7 @@ icon_state = "appendix" filling_color = "#E00D34" bitesize = 3 - - New() - ..() - reagents.add_reagent("protein", 3) + list_reagents = list("protein" = 3) /obj/item/weapon/reagent_containers/food/snacks/appendix/inflamed name = "inflamed appendix" @@ -576,10 +499,7 @@ desc = "We all love tofu." filling_color = "#FFFEE0" bitesize = 3 - - New() - ..() - reagents.add_reagent("plantmatter", 3) + list_reagents = list("plantmatter" = 3) /obj/item/weapon/reagent_containers/food/snacks/fried_tofu name = "Fried Tofu" @@ -587,10 +507,7 @@ desc = "Proof that even vegetarians crave unhealthy foods." filling_color = "#FFFEE0" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 3) + list_reagents = list("nutriment" = 3) /obj/item/weapon/reagent_containers/food/snacks/tofurkey name = "Tofurkey" @@ -598,21 +515,14 @@ icon_state = "tofurkey" filling_color = "#FFFEE0" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 12) - reagents.add_reagent("ether", 3) + list_reagents = list("nutriment" = 12, "ether" = 3) /obj/item/weapon/reagent_containers/food/snacks/stuffing name = "Stuffing" desc = "Moist, peppery breadcrumbs for filling the body cavities of dead birds. Dig in!" icon_state = "stuffing" filling_color = "#C9AC83" - - New() - ..() - reagents.add_reagent("nutriment", 3) + list_reagents = list("nutriment" = 3) /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice name = "huge mushroom slice" @@ -620,11 +530,7 @@ icon_state = "hugemushroomslice" filling_color = "#E0D7C5" bitesize = 6 - - New() - ..() - reagents.add_reagent("plantmatter", 3) - reagents.add_reagent("psilocybin", 3) + list_reagents = list("plantmatter" = 3, "psilocybin" = 3) /obj/item/weapon/reagent_containers/food/snacks/tomatomeat name = "tomato slice" @@ -632,10 +538,7 @@ icon_state = "tomatomeat" filling_color = "#DB0000" bitesize = 6 - - New() - ..() - reagents.add_reagent("protein", 3) + list_reagents = list("protein" = 3) /obj/item/weapon/reagent_containers/food/snacks/bearmeat name = "bear meat" @@ -643,11 +546,7 @@ icon_state = "bearmeat" filling_color = "#DB0000" bitesize = 3 - - New() - ..() - reagents.add_reagent("protein", 12) - reagents.add_reagent("methamphetamine", 5) + list_reagents = list("protein" = 12, "methamphetamine" = 5) /obj/item/weapon/reagent_containers/food/snacks/xenomeat name = "meat" @@ -655,21 +554,14 @@ icon_state = "xenomeat" filling_color = "#43DE18" bitesize = 6 - - New() - ..() - reagents.add_reagent("protein", 3) + list_reagents = list("protein" = 3) /obj/item/weapon/reagent_containers/food/snacks/spidermeat name = "spider meat" desc = "A slab of spider meat." icon_state = "spidermeat" bitesize = 3 - - New() - ..() - reagents.add_reagent("protein", 3) - reagents.add_reagent("toxin", 3) + list_reagents = list("protein" = 3, "toxin" = 3) /obj/item/weapon/reagent_containers/food/snacks/lizardmeat name = "mutant lizard meat" @@ -677,22 +569,14 @@ icon_state = "xenomeat" filling_color = "#43DE18" bitesize = 3 - - New() - ..() - reagents.add_reagent("protein", 3) - reagents.add_reagent("toxin", 3) + list_reagents = list("protein" = 3, "toxin" = 3) /obj/item/weapon/reagent_containers/food/snacks/spiderleg name = "spider leg" desc = "A still twitching leg of a giant spider... you don't really want to eat this, do you?" icon_state = "spiderleg" bitesize = 2 - - New() - ..() - reagents.add_reagent("protein", 2) - reagents.add_reagent("toxin", 2) + list_reagents = list("protein" = 2, "toxin" = 2) /obj/item/weapon/reagent_containers/food/snacks/meatball name = "Meatball" @@ -700,10 +584,7 @@ icon_state = "meatball" filling_color = "#DB0000" bitesize = 2 - - New() - ..() - reagents.add_reagent("protein", 3) + list_reagents = list("protein" = 3) /obj/item/weapon/reagent_containers/food/snacks/sausage name = "Sausage" @@ -711,45 +592,31 @@ icon_state = "sausage" filling_color = "#DB0000" bitesize = 2 - - New() - ..() - reagents.add_reagent("protein", 6) - reagents.add_reagent("porktonium", 10) + list_reagents = list("protein" = 6, "porktonium" = 10) /obj/item/weapon/reagent_containers/food/snacks/donkpocket name = "Donk-pocket" desc = "The food of choice for the seasoned traitor." icon_state = "donkpocket" filling_color = "#DEDEAB" - - New() - ..() - reagents.add_reagent("nutriment", 4) + list_reagents = list("nutriment" = 4) /obj/item/weapon/reagent_containers/food/snacks/warmdonkpocket name = "Warm Donk-pocket" desc = "The food of choice for the seasoned traitor." icon_state = "donkpocket" filling_color = "#DEDEAB" + list_reagents = list("nutriment" = 4) - New() - ..() - reagents.add_reagent("nutriment", 4) - - Post_Consume(mob/living/M) - M.reagents.add_reagent("omnizine", 15) +/obj/item/weapon/reagent_containers/food/snacks/warmdonkpocket/Post_Consume(mob/living/M) + M.reagents.add_reagent("omnizine", 15) /obj/item/weapon/reagent_containers/food/snacks/warmdonkpocket_weak name = "Lightly Warm Donk-pocket" desc = "The food of choice for the seasoned traitor. This one is lukewarm." icon_state = "donkpocket" filling_color = "#DEDEAB" - -/obj/item/weapon/reagent_containers/food/snacks/warmdonkpocket_weak/New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("weak_omnizine", 3) + list_reagents = list("nutriment" = 4, "weak_omnizine" = 3) /obj/item/weapon/reagent_containers/food/snacks/syndidonkpocket name = "Donk-pocket" @@ -757,18 +624,15 @@ icon_state = "donkpocket" filling_color = "#DEDEAB" bitesize = 100 //nom the whole thing at once. + list_reagents = list("nutriment" = 1) - New() - ..() - reagents.add_reagent("nutriment", 1) - - Post_Consume(mob/living/M) - M.reagents.add_reagent("omnizine", 15) - M.reagents.add_reagent("teporone", 15) - M.reagents.add_reagent("synaptizine", 15) - M.reagents.add_reagent("salglu_solution", 15) - M.reagents.add_reagent("salbutamol", 15) - M.reagents.add_reagent("methamphetamine", 15) +/obj/item/weapon/reagent_containers/food/snacks/syndidonkpocket/Post_Consume(mob/living/M) + M.reagents.add_reagent("omnizine", 15) + M.reagents.add_reagent("teporone", 15) + M.reagents.add_reagent("synaptizine", 15) + M.reagents.add_reagent("salglu_solution", 15) + M.reagents.add_reagent("salbutamol", 15) + M.reagents.add_reagent("methamphetamine", 15) /obj/item/weapon/reagent_containers/food/snacks/brainburger name = "brainburger" @@ -776,11 +640,7 @@ icon_state = "brainburger" filling_color = "#F2B6EA" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("prions", 10) + list_reagents = list("nutriment" = 6, "prions" = 10) /obj/item/weapon/reagent_containers/food/snacks/ghostburger name = "Ghost Burger" @@ -788,11 +648,7 @@ icon_state = "ghostburger" filling_color = "#FFF2FF" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 2) - + list_reagents = list("nutriment" = 2) /obj/item/weapon/reagent_containers/food/snacks/human var/hname = "" @@ -804,19 +660,13 @@ desc = "A bloody burger." icon_state = "hburger" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 6) + list_reagents = list("nutriment" = 6) /obj/item/weapon/reagent_containers/food/snacks/cheeseburger name = "cheeseburger" desc = "The cheese adds a good flavor." icon_state = "cheeseburger" - - New() - ..() - reagents.add_reagent("nutriment", 2) + list_reagents = list("nutriment" = 2) /obj/item/weapon/reagent_containers/food/snacks/monkeyburger name = "burger" @@ -824,10 +674,7 @@ icon_state = "hburger" filling_color = "#D63C3C" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 6) + list_reagents = list("nutriment" = 6) /obj/item/weapon/reagent_containers/food/snacks/tofuburger name = "Tofu Burger" @@ -835,10 +682,7 @@ icon_state = "tofuburger" filling_color = "#FFFEE0" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 6) + list_reagents = list("nutriment" = 6) /obj/item/weapon/reagent_containers/food/snacks/roburger name = "roburger" @@ -846,11 +690,7 @@ icon_state = "roburger" filling_color = "#CCCCCC" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("nanomachines", 10) + list_reagents = list("nutriment" = 2, "nanomachines" = 10) /obj/item/weapon/reagent_containers/food/snacks/roburgerbig name = "roburger" @@ -859,10 +699,7 @@ filling_color = "#CCCCCC" volume = 100 bitesize = 0.1 - - New() - ..() - reagents.add_reagent("nanomachines", 100) + list_reagents = list("nanomachines" = 100) /obj/item/weapon/reagent_containers/food/snacks/xenoburger name = "xenoburger" @@ -870,10 +707,7 @@ icon_state = "xburger" filling_color = "#43DE18" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 8) + list_reagents = list("nutriment" = 8) /obj/item/weapon/reagent_containers/food/snacks/clownburger name = "Clown Burger" @@ -881,15 +715,7 @@ icon_state = "clownburger" filling_color = "#FF00FF" bitesize = 2 - - New() - ..() -/* - var/datum/disease/F = new /datum/disease/pierrot_throat(0) - var/list/data = list("viruses"= list(F)) - reagents.add_reagent("blood", 4, data) -*/ - reagents.add_reagent("nutriment", 6) + list_reagents = list("nutriment" = 6) /obj/item/weapon/reagent_containers/food/snacks/mimeburger name = "Mime Burger" @@ -897,10 +723,7 @@ icon_state = "mimeburger" filling_color = "#FFFFFF" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 6) + list_reagents = list("nutriment" = 6) /obj/item/weapon/reagent_containers/food/snacks/omelette name = "Omelette Du Fromage" @@ -908,10 +731,7 @@ icon_state = "omelette" trash = /obj/item/trash/plate filling_color = "#FFF9A8" - - New() - ..() - reagents.add_reagent("nutriment", 8) + list_reagents = list("nutriment" = 8) /obj/item/weapon/reagent_containers/food/snacks/muffin name = "Muffin" @@ -919,10 +739,7 @@ icon_state = "muffin" filling_color = "#E0CF9B" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 6) + list_reagents = list("nutriment" = 6) /obj/item/weapon/reagent_containers/food/snacks/pie name = "Banana Cream Pie" @@ -931,11 +748,7 @@ trash = /obj/item/trash/plate filling_color = "#FBFFB8" bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/pie/New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("banana",5) + list_reagents = list("nutriment" = 4, "banana" = 5) /obj/item/weapon/reagent_containers/food/snacks/pie/throw_impact(atom/hit_atom) ..() @@ -949,11 +762,7 @@ icon_state = "berryclafoutis" trash = /obj/item/trash/plate bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("berryjuice", 5) + list_reagents = list("nutriment" = 4, "berryjuice" = 5) /obj/item/weapon/reagent_containers/food/snacks/waffles name = "waffles" @@ -962,10 +771,7 @@ trash = /obj/item/trash/waffles filling_color = "#E6DEB5" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 8) + list_reagents = list("nutriment" = 8) /obj/item/weapon/reagent_containers/food/snacks/eggplantparm name = "Eggplant Parmigiana" @@ -974,10 +780,7 @@ trash = /obj/item/trash/plate filling_color = "#4D2F5E" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 6) + list_reagents = list("nutriment" = 6) /obj/item/weapon/reagent_containers/food/snacks/soylentgreen name = "Soylent Green" @@ -986,10 +789,7 @@ trash = /obj/item/trash/waffles filling_color = "#B8E6B5" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 10) + list_reagents = list("nutriment" = 10) /obj/item/weapon/reagent_containers/food/snacks/soylenviridians name = "Soylen Virdians" @@ -998,11 +798,7 @@ trash = /obj/item/trash/waffles filling_color = "#E6FA61" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 10) - + list_reagents = list("nutriment" = 10) /obj/item/weapon/reagent_containers/food/snacks/meatpie name = "Meat-pie" @@ -1011,10 +807,7 @@ trash = /obj/item/trash/plate filling_color = "#948051" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 10) + list_reagents = list("nutriment" = 10) /obj/item/weapon/reagent_containers/food/snacks/tofupie name = "Tofu-pie" @@ -1023,10 +816,7 @@ trash = /obj/item/trash/plate filling_color = "#FFFEE0" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 10) + list_reagents = list("nutriment" = 10) /obj/item/weapon/reagent_containers/food/snacks/amanita_pie name = "amanita pie" @@ -1034,12 +824,7 @@ icon_state = "amanita_pie" filling_color = "#FFCCCC" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 5) - reagents.add_reagent("amanitin", 3) - reagents.add_reagent("psilocybin", 1) + list_reagents = list("nutriment" = 5, "amanitin" = 3, "psilocybin" = 1) /obj/item/weapon/reagent_containers/food/snacks/plump_pie name = "plump pie" @@ -1047,16 +832,14 @@ icon_state = "plump_pie" filling_color = "#B8279B" bitesize = 2 + list_reagents = list("nutriment" = 8) - New() - ..() - if(prob(10)) - name = "exceptional plump pie" - desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump pie!" - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("omnizine", 5) - else - reagents.add_reagent("nutriment", 8) +/obj/item/weapon/reagent_containers/food/snacks/plump_pie/New() + ..() + if(prob(10)) + name = "exceptional plump pie" + desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump pie!" // What + reagents.add_reagent("omnizine", 5) /obj/item/weapon/reagent_containers/food/snacks/xemeatpie name = "Xeno-pie" @@ -1065,10 +848,7 @@ trash = /obj/item/trash/plate filling_color = "#43DE18" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 10) + list_reagents = list("nutriment" = 10) /obj/item/weapon/reagent_containers/food/snacks/wingfangchu name = "Wing Fang Chu" @@ -1077,11 +857,7 @@ trash = /obj/item/trash/snack_bowl filling_color = "#43DE18" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 6) - + list_reagents = list("nutriment" = 6) /obj/item/weapon/reagent_containers/food/snacks/human/kabob name = "-kabob" @@ -1090,10 +866,7 @@ trash = /obj/item/stack/rods filling_color = "#A85340" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 8) + list_reagents = list("nutriment" = 8) /obj/item/weapon/reagent_containers/food/snacks/monkeykabob name = "Meat-kabob" @@ -1102,10 +875,7 @@ trash = /obj/item/stack/rods filling_color = "#A85340" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 8) + list_reagents = list("nutriment" = 8) /obj/item/weapon/reagent_containers/food/snacks/tofukabob name = "Tofu-kabob" @@ -1114,10 +884,7 @@ trash = /obj/item/stack/rods filling_color = "#FFFEE0" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 8) + list_reagents = list("nutriment" = 8) /obj/item/weapon/reagent_containers/food/snacks/popcorn name = "Popcorn" @@ -1127,18 +894,17 @@ var/unpopped = 0 filling_color = "#FFFAD4" bitesize = 0.1 //this snack is supposed to be eating during looooong time. And this it not dinner food! --rastaf0 + list_reagents = list("nutriment" = 2) - New() - ..() - unpopped = rand(1,10) - reagents.add_reagent("nutriment", 2) - - On_Consume(mob/M, mob/user) - if(prob(unpopped)) //lol ...what's the point? - to_chat(user, "\red You bite down on an un-popped kernel!") - unpopped = max(0, unpopped-1) - ..() +/obj/item/weapon/reagent_containers/food/snacks/popcorn/New() + ..() + unpopped = rand(1,10) +/obj/item/weapon/reagent_containers/food/snacks/popcorn/On_Consume(mob/M, mob/user) + if(prob(unpopped)) //lol ...what's the point? + to_chat(user, "\red You bite down on an un-popped kernel!") + unpopped = max(0, unpopped-1) + ..() /obj/item/weapon/reagent_containers/food/snacks/sosjerky name = "Scaredy's Private Reserve Beef Jerky" @@ -1147,10 +913,7 @@ trash = /obj/item/trash/sosjerky filling_color = "#631212" bitesize = 2 - - New() - ..() - reagents.add_reagent("protein", 4) + list_reagents = list("protein" = 4) /obj/item/weapon/reagent_containers/food/snacks/pistachios name = "Pistachios" @@ -1158,11 +921,7 @@ desc = "A snack of deliciously salted pistachios. A perfectly valid choice..." trash = /obj/item/trash/pistachios filling_color = "#BAD145" - - New() - ..() - reagents.add_reagent("plantmatter", 6) - reagents.add_reagent("sodiumchloride", 1) + list_reagents = list("plantmatter" = 6, "sodiumchloride" = 1) /obj/item/weapon/reagent_containers/food/snacks/no_raisin name = "4no Raisins" @@ -1170,10 +929,7 @@ desc = "Best raisins in the universe. Not sure why." trash = /obj/item/trash/raisins filling_color = "#343834" - - New() - ..() - reagents.add_reagent("plantmatter", 6) + list_reagents = list("plantmatter" = 6) /obj/item/weapon/reagent_containers/food/snacks/spacetwinkie name = "Space Twinkie" @@ -1181,10 +937,7 @@ desc = "Guaranteed to survive longer then you will." filling_color = "#FFE591" bitesize = 2 - - New() - ..() - reagents.add_reagent("sugar", 4) + list_reagents = list("sugar" = 4) /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers name = "Cheesie Honkers" @@ -1193,58 +946,35 @@ trash = /obj/item/trash/cheesie filling_color = "#FFA305" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("fake_cheese", 2) + list_reagents = list("nutriment" = 4, "fake_cheese" = 2) /obj/item/weapon/reagent_containers/food/snacks/chinese/chowmein name = "chow mein" desc = "What is in this anyways?" icon_state = "chinese1" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("beans", 3) - reagents.add_reagent("msg",4) + list_reagents = list("nutriment" = 6, "beans" = 3, "msg" = 4) /obj/item/weapon/reagent_containers/food/snacks/chinese/tao name = "Admiral Yamamoto carp" desc = "Tastes like chicken." icon_state = "chinese2" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("protein", 2) - reagents.add_reagent("msg",4) + list_reagents = list("nutriment" = 4, "protein" = 2, "msg" = 4) /obj/item/weapon/reagent_containers/food/snacks/chinese/newdles name = "chinese newdles" desc = "Made fresh, weekly!" icon_state = "chinese3" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("msg",4) + list_reagents = list("nutriment" = 6, "msg" = 4) /obj/item/weapon/reagent_containers/food/snacks/chinese/rice name = "fried rice" desc = "A timeless classic." icon_state = "chinese4" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("rice", 3) - reagents.add_reagent("msg",4) + list_reagents = list("nutriment" = 3, "rice" = 3, "msg" = 4) /obj/item/weapon/reagent_containers/food/snacks/syndicake name = "Syndi-Cakes" @@ -1253,11 +983,7 @@ filling_color = "#FF5D05" trash = /obj/item/trash/syndi_cakes bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("salglu_solution", 5) + list_reagents = list("nutriment" = 4, "salglu_solution" = 5) /obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato name = "Loaded Baked Potato" @@ -1265,10 +991,7 @@ icon_state = "loadedbakedpotato" filling_color = "#9C7A68" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 6) + list_reagents = list("nutriment" = 6) /obj/item/weapon/reagent_containers/food/snacks/fries name = "Space Fries" @@ -1277,10 +1000,7 @@ trash = /obj/item/trash/plate filling_color = "#EDDD00" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 4) + list_reagents = list("nutriment" = 4) /obj/item/weapon/reagent_containers/food/snacks/soydope name = "Soy Dope" @@ -1289,20 +1009,14 @@ trash = /obj/item/trash/plate filling_color = "#C4BF76" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 2) + list_reagents = list("nutriment" = 2) /obj/item/weapon/reagent_containers/food/snacks/spagetti name = "Spagetti" desc = "A bundle of raw spaghetti." icon_state = "spagetti" filling_color = "#EDDD00" - - New() - ..() - reagents.add_reagent("nutriment", 1) + list_reagents = list("nutriment" = 1) /obj/item/weapon/reagent_containers/food/snacks/cheesyfries name = "Cheesy Fries" @@ -1311,10 +1025,7 @@ trash = /obj/item/trash/plate filling_color = "#EDDD00" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 6) + list_reagents = list("nutriment" = 6) /obj/item/weapon/reagent_containers/food/snacks/fortunecookie name = "Fortune cookie" @@ -1322,10 +1033,7 @@ icon_state = "fortune_cookie" filling_color = "#E8E79E" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 3) + list_reagents = list("nutriment" = 3) /obj/item/weapon/reagent_containers/food/snacks/badrecipe name = "Burned mess" @@ -1333,14 +1041,13 @@ icon_state = "badrecipe" filling_color = "#211F02" bitesize = 2 + list_reagents = list("????" = 5, "carbon" = 3) - New() - ..() - reagents.add_reagent("????", 5) - reagents.add_reagent("carbon", 3) - // it's burned! it should start off being classed as any cooktype that burns - cooktype["grilled"] = 1 - cooktype["deep fried"] = 1 +/obj/item/weapon/reagent_containers/food/snacks/badrecipe/New() + ..() + // it's burned! it should start off being classed as any cooktype that burns + cooktype["grilled"] = 1 + cooktype["deep fried"] = 1 /obj/item/weapon/reagent_containers/food/snacks/meatsteak name = "Meat steak" @@ -1349,12 +1056,7 @@ trash = /obj/item/trash/plate filling_color = "#7A3D11" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("sodiumchloride", 1) - reagents.add_reagent("blackpepper", 1) + list_reagents = list("nutriment" = 4, "sodiumchloride" = 1, "blackpepper" = 1) /obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff name = "Spacy Liberty Duff" @@ -1363,11 +1065,7 @@ trash = /obj/item/trash/snack_bowl filling_color = "#42B873" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("psilocybin", 6) + list_reagents = list("nutriment" = 6, "psilocybin" = 6) /obj/item/weapon/reagent_containers/food/snacks/amanitajelly name = "Amanita Jelly" @@ -1376,12 +1074,7 @@ trash = /obj/item/trash/snack_bowl filling_color = "#ED0758" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("amanitin", 6) - reagents.add_reagent("psilocybin", 3) + list_reagents = list("nutriment" = 6, "amanitin" = 6, "psilocybin" = 3) /obj/item/weapon/reagent_containers/food/snacks/poppypretzel name = "Poppy pretzel" @@ -1389,11 +1082,7 @@ icon_state = "poppypretzel" bitesize = 2 filling_color = "#916E36" - - New() - ..() - reagents.add_reagent("nutriment", 5) - + list_reagents = list("nutriment" = 5) /obj/item/weapon/reagent_containers/food/snacks/meatballsoup name = "Meatball soup" @@ -1402,11 +1091,7 @@ trash = /obj/item/trash/snack_bowl filling_color = "#785210" bitesize = 5 - - New() - ..() - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("water", 5) + list_reagents = list("nutriment" = 8, "water" = 5) /obj/item/weapon/reagent_containers/food/snacks/slimesoup name = "slime soup" @@ -1414,11 +1099,7 @@ icon_state = "slimesoup" filling_color = "#C4DBA0" bitesize = 5 - - New() - ..() - reagents.add_reagent("slimejelly", 5) - reagents.add_reagent("water", 10) + list_reagents = list("slimejelly" = 5, "water" = 10) /obj/item/weapon/reagent_containers/food/snacks/bloodsoup name = "Tomato soup" @@ -1426,12 +1107,7 @@ icon_state = "tomatosoup" filling_color = "#FF0000" bitesize = 5 - - New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("blood", 10) - reagents.add_reagent("water", 5) + list_reagents = list("nutriment" = 2, "blood" = 10, "water" = 5) /obj/item/weapon/reagent_containers/food/snacks/clownstears name = "Clown's Tears" @@ -1439,12 +1115,7 @@ icon_state = "clownstears" filling_color = "#C4FBFF" bitesize = 5 - - New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("banana", 5) - reagents.add_reagent("water", 10) + list_reagents = list("nutriment" = 4, "banana" = 5, "water" = 10) /obj/item/weapon/reagent_containers/food/snacks/vegetablesoup name = "Vegetable soup" @@ -1453,11 +1124,7 @@ trash = /obj/item/trash/snack_bowl filling_color = "#AFC4B5" bitesize = 5 - - New() - ..() - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("water", 5) + list_reagents = list("nutriment" = 8, "water" = 5) /obj/item/weapon/reagent_containers/food/snacks/nettlesoup name = "Nettle soup" @@ -1466,12 +1133,7 @@ trash = /obj/item/trash/snack_bowl filling_color = "#AFC4B5" bitesize = 5 - - New() - ..() - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("water", 5) - reagents.add_reagent("omnizine", 5) + list_reagents = list("nutriment" = 8, "water" = 5, "omnizine" = 5) /obj/item/weapon/reagent_containers/food/snacks/mysterysoup name = "Mystery soup" @@ -1481,44 +1143,44 @@ filling_color = "#F082FF" bitesize = 5 - New() - ..() - var/mysteryselect = pick(1,2,3,4,5,6,7,8,9,10) - switch(mysteryselect) - if(1) - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("capsaicin", 3) - reagents.add_reagent("tomatojuice", 2) - if(2) - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("frostoil", 3) - reagents.add_reagent("tomatojuice", 2) - if(3) - reagents.add_reagent("nutriment", 5) - reagents.add_reagent("water", 5) - reagents.add_reagent("omnizine", 5) - if(4) - reagents.add_reagent("nutriment", 5) - reagents.add_reagent("water", 10) - if(5) - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("banana", 10) - if(6) - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("blood", 10) - if(7) - reagents.add_reagent("slimejelly", 10) - reagents.add_reagent("water", 10) - if(8) - reagents.add_reagent("carbon", 10) - reagents.add_reagent("toxin", 10) - if(9) - reagents.add_reagent("nutriment", 5) - reagents.add_reagent("tomatojuice", 10) - if(10) - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("tomatojuice", 5) - reagents.add_reagent("oculine", 5) +/obj/item/weapon/reagent_containers/food/snacks/mysterysoup/New() + ..() + var/mysteryselect = pick(1,2,3,4,5,6,7,8,9,10) + switch(mysteryselect) + if(1) + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("capsaicin", 3) + reagents.add_reagent("tomatojuice", 2) + if(2) + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("frostoil", 3) + reagents.add_reagent("tomatojuice", 2) + if(3) + reagents.add_reagent("nutriment", 5) + reagents.add_reagent("water", 5) + reagents.add_reagent("omnizine", 5) + if(4) + reagents.add_reagent("nutriment", 5) + reagents.add_reagent("water", 10) + if(5) + reagents.add_reagent("nutriment", 2) + reagents.add_reagent("banana", 10) + if(6) + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("blood", 10) + if(7) + reagents.add_reagent("slimejelly", 10) + reagents.add_reagent("water", 10) + if(8) + reagents.add_reagent("carbon", 10) + reagents.add_reagent("toxin", 10) + if(9) + reagents.add_reagent("nutriment", 5) + reagents.add_reagent("tomatojuice", 10) + if(10) + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("tomatojuice", 5) + reagents.add_reagent("oculine", 5) /obj/item/weapon/reagent_containers/food/snacks/wishsoup name = "Wish Soup" @@ -1527,13 +1189,13 @@ trash = /obj/item/trash/snack_bowl filling_color = "#D1F4FF" bitesize = 5 + list_reagents = list("water" = 10) - New() - ..() - reagents.add_reagent("water", 10) - if(prob(25)) - src.desc = "A wish come true!" - reagents.add_reagent("nutriment", 8) +/obj/item/weapon/reagent_containers/food/snacks/wishsoup/New() + ..() + if(prob(25)) + desc = "A wish come true!" // hue + reagents.add_reagent("nutriment", 8) /obj/item/weapon/reagent_containers/food/snacks/hotchili name = "Hot Chili" @@ -1542,12 +1204,7 @@ trash = /obj/item/trash/snack_bowl filling_color = "#FF3C00" bitesize = 5 - - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("capsaicin", 3) - reagents.add_reagent("tomatojuice", 2) + list_reagents = list("nutriment" = 6, "capsaicin" = 3, "tomatojuice" = 2) /obj/item/weapon/reagent_containers/food/snacks/coldchili name = "Cold Chili" @@ -1556,36 +1213,21 @@ filling_color = "#2B00FF" trash = /obj/item/trash/snack_bowl bitesize = 5 - - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("frostoil", 3) - reagents.add_reagent("tomatojuice", 2) + list_reagents = list("nutriment" = 6, "frostoil" = 3, "tomatojuice" = 2) /obj/item/weapon/reagent_containers/food/snacks/raw_bacon name = "raw bacon" desc = "It's fleshy and pink!" icon_state = "raw_bacon" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 1) - reagents.add_reagent("porktonium", 10) + list_reagents = list("nutriment" = 1, "porktonium" = 10) /obj/item/weapon/reagent_containers/food/snacks/bacon name = "bacon" desc = "It looks juicy and tastes amazing!" icon_state = "bacon2" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("porktonium", 10) - reagents.add_reagent("msg", 4) - + list_reagents = list("nutriment" = 4, "porktonium" = 10, "msg" = 4) /obj/item/weapon/reagent_containers/food/snacks/telebacon name = "Tele Bacon" @@ -1593,17 +1235,16 @@ icon_state = "bacon" var/obj/item/device/radio/beacon/bacon/baconbeacon bitesize = 2 + list_reagents = list("nutriment" = 4, "porktonium" = 10) - New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("porktonium", 10) - baconbeacon = new /obj/item/device/radio/beacon/bacon(src) +/obj/item/weapon/reagent_containers/food/snacks/telebacon/New() + ..() + baconbeacon = new /obj/item/device/radio/beacon/bacon(src) - On_Consume(mob/M, mob/user) - if(!reagents.total_volume) - baconbeacon.loc = user - baconbeacon.digest_delay() +/obj/item/weapon/reagent_containers/food/snacks/telebacon/On_Consume(mob/M, mob/user) + if(!reagents.total_volume) + baconbeacon.loc = user + baconbeacon.digest_delay() /obj/item/weapon/reagent_containers/food/snacks/monkeycube @@ -1613,13 +1254,11 @@ bitesize = 12 filling_color = "#ADAC7F" var/monkey_type = "Monkey" - -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/New() - ..() - reagents.add_reagent("protein",10) + list_reagents = list("protein" = 10) /obj/item/weapon/reagent_containers/food/snacks/monkeycube/afterattack(obj/O, mob/user, proximity) - if(!proximity) return + if(!proximity) + return if(istype(O,/obj/structure/sink) && !wrapped) to_chat(user, "You place [src] under a stream of water...") user.drop_item() @@ -1704,10 +1343,7 @@ icon_state = "spellburger" filling_color = "#D505FF" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 6) + list_reagents = list("nutriment" = 6) /obj/item/weapon/reagent_containers/food/snacks/bigbiteburger name = "Big Bite Burger" @@ -1715,10 +1351,7 @@ icon_state = "bigbiteburger" filling_color = "#E3D681" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 14) + list_reagents = list("nutriment" = 14) /obj/item/weapon/reagent_containers/food/snacks/enchiladas name = "Enchiladas" @@ -1727,11 +1360,7 @@ trash = /obj/item/trash/tray filling_color = "#A36A1F" bitesize = 4 - - New() - ..() - reagents.add_reagent("nutriment",8) - reagents.add_reagent("capsaicin", 6) + list_reagents = list("nutriment" = 8, "capsaicin" = 6) /obj/item/weapon/reagent_containers/food/snacks/burrito name = "Burrito" @@ -1739,10 +1368,7 @@ icon_state = "burrito" trash = /obj/item/trash/plate filling_color = "#A36A1F" - -/obj/item/weapon/reagent_containers/food/snacks/burrito/New() - ..() - reagents.add_reagent("nutriment", 5) + list_reagents = list("nutriment" = 5) /obj/item/weapon/reagent_containers/food/snacks/chimichanga name = "Chimichanga" @@ -1750,11 +1376,7 @@ icon_state = "chimichanga" trash = /obj/item/trash/plate filling_color = "#A36A1F" - -/obj/item/weapon/reagent_containers/food/snacks/chimichanga/New() - ..() - reagents.add_reagent("omnizine", 4) //Deadpool reference. Deal with it. - reagents.add_reagent("cheese", 2) + list_reagents = list("omnizine" = 4, "cheese" = 2) //Deadpool reference. Deal with it. /obj/item/weapon/reagent_containers/food/snacks/monkeysdelight name = "monkey's Delight" @@ -1763,13 +1385,7 @@ trash = /obj/item/trash/tray filling_color = "#5C3C11" bitesize = 6 - - New() - ..() - reagents.add_reagent("nutriment", 10) - reagents.add_reagent("banana", 5) - reagents.add_reagent("blackpepper", 1) - reagents.add_reagent("sodiumchloride", 1) + list_reagents = list("nutriment" = 10, "banana" = 5, "blackpepper" = 1, "sodiumchloride" = 1) /obj/item/weapon/reagent_containers/food/snacks/baguette name = "Baguette" @@ -1777,12 +1393,7 @@ icon_state = "baguette" filling_color = "#E3D796" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("blackpepper", 1) - reagents.add_reagent("sodiumchloride", 1) + list_reagents = list("nutriment" = 6, "blackpepper" = 1, "sodiumchloride" = 1) /obj/item/weapon/reagent_containers/food/snacks/sandwich name = "Sandwich" @@ -1791,10 +1402,7 @@ trash = /obj/item/trash/plate filling_color = "#D9BE29" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 6) + list_reagents = list("nutriment" = 6) /obj/item/weapon/reagent_containers/food/snacks/toastedsandwich name = "Toasted Sandwich" @@ -1803,11 +1411,7 @@ trash = /obj/item/trash/plate filling_color = "#D9BE29" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("carbon", 2) + list_reagents = list("nutriment" = 6, "carbon" = 2) /obj/item/weapon/reagent_containers/food/snacks/grilledcheese name = "Grilled Cheese Sandwich" @@ -1816,10 +1420,7 @@ trash = /obj/item/trash/plate filling_color = "#D9BE29" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 7) + list_reagents = list("nutriment" = 7) //why make a regualr sandwhich when you can make grilled cheese, with this nutriment value? /obj/item/weapon/reagent_containers/food/snacks/tomatosoup name = "Tomato Soup" @@ -1828,11 +1429,7 @@ trash = /obj/item/trash/snack_bowl filling_color = "#D92929" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 5) - reagents.add_reagent("tomatojuice", 10) + list_reagents = list("nutriment" = 5, "tomatojuice" = 10) /obj/item/weapon/reagent_containers/food/snacks/rofflewaffles name = "Roffle Waffles" @@ -1841,11 +1438,7 @@ trash = /obj/item/trash/waffles filling_color = "#FF00F7" bitesize = 4 - - New() - ..() - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("psilocybin", 8) + list_reagents = list("nutriment" = 8, "psilocybin" = 8) /obj/item/weapon/reagent_containers/food/snacks/stew name = "Stew" @@ -1853,13 +1446,7 @@ icon_state = "stew" filling_color = "#9E673A" bitesize = 10 - - New() - ..() - reagents.add_reagent("nutriment", 10) - reagents.add_reagent("tomatojuice", 5) - reagents.add_reagent("oculine", 5) - reagents.add_reagent("water", 5) + list_reagents = list("nutriment" = 10, "tomatojuice" = 5, "oculine" = 5, "water" = 5) /obj/item/weapon/reagent_containers/food/snacks/jelliedtoast name = "Jellied Toast" @@ -1868,20 +1455,13 @@ trash = /obj/item/trash/plate filling_color = "#B572AB" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 1) + list_reagents = list("nutriment" = 1) /obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/cherry - New() - ..() - reagents.add_reagent("cherryjelly", 5) + list_reagents = list("nutriment" = 1, "cherryjelly" = 5) /obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/slime - New() - ..() - reagents.add_reagent("slimejelly", 5) + list_reagents = list("nutriment" = 1, "slimejelly" = 5) /obj/item/weapon/reagent_containers/food/snacks/jellyburger name = "Jelly Burger" @@ -1889,20 +1469,13 @@ icon_state = "jellyburger" filling_color = "#B572AB" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 5) + list_reagents = list("nutriment" = 5) /obj/item/weapon/reagent_containers/food/snacks/jellyburger/slime - New() - ..() - reagents.add_reagent("slimejelly", 5) + list_reagents = list("nutriment" = 5, "slimejelly" = 5) /obj/item/weapon/reagent_containers/food/snacks/jellyburger/cherry - New() - ..() - reagents.add_reagent("cherryjelly", 5) + list_reagents = list("nutriment" = 5, "cherryjelly" = 5) /obj/item/weapon/reagent_containers/food/snacks/milosoup name = "Milosoup" @@ -1910,11 +1483,7 @@ icon_state = "milosoup" trash = /obj/item/trash/snack_bowl bitesize = 4 - - New() - ..() - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("water", 5) + list_reagents = list("nutriment" = 8, "water" = 5) /obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat name = "Stewed Soy Meat" @@ -1922,10 +1491,7 @@ icon_state = "stewedsoymeat" trash = /obj/item/trash/plate bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 8) + list_reagents = list("nutriment" = 8) /obj/item/weapon/reagent_containers/food/snacks/boiledspagetti name = "Boiled Spagetti" @@ -1934,10 +1500,7 @@ trash = /obj/item/trash/plate filling_color = "#FCEE81" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 2) + list_reagents = list("nutriment" = 2) /obj/item/weapon/reagent_containers/food/snacks/boiledrice name = "Boiled Rice" @@ -1946,10 +1509,7 @@ trash = /obj/item/trash/snack_bowl filling_color = "#FFFBDB" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 2) + list_reagents = list("nutriment" = 2) /obj/item/weapon/reagent_containers/food/snacks/ricepudding name = "Rice Pudding" @@ -1958,10 +1518,7 @@ trash = /obj/item/trash/snack_bowl filling_color = "#FFFBDB" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 4) + list_reagents = list("nutriment" = 4) /obj/item/weapon/reagent_containers/food/snacks/pastatomato name = "Spagetti" @@ -1970,11 +1527,7 @@ trash = /obj/item/trash/plate filling_color = "#DE4545" bitesize = 4 - - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("tomatojuice", 10) + list_reagents = list("nutriment" = 6, "tomatojuice" = 10) /obj/item/weapon/reagent_containers/food/snacks/meatballspagetti name = "Spagetti & Meatballs" @@ -1983,11 +1536,7 @@ trash = /obj/item/trash/plate filling_color = "#DE4545" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("synaptizine", 5) + list_reagents = list("nutriment" = 8, "synaptizine" = 5) /obj/item/weapon/reagent_containers/food/snacks/spesslaw name = "Spesslaw" @@ -1995,11 +1544,7 @@ icon_state = "spesslaw" filling_color = "#DE4545" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("synaptizine", 10) + list_reagents = list("nutriment" = 8, "synaptizine" = 10) /obj/item/weapon/reagent_containers/food/snacks/poppypretzel name = "Poppy Pretzel" @@ -2007,10 +1552,7 @@ icon_state = "poppypretzel" filling_color = "#AB7D2E" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 5) + list_reagents = list("nutriment" = 5) /obj/item/weapon/reagent_containers/food/snacks/carrotfries name = "Carrot Fries" @@ -2019,11 +1561,7 @@ trash = /obj/item/trash/plate filling_color = "#FAA005" bitesize = 2 - - New() - ..() - reagents.add_reagent("plantmatter", 3) - reagents.add_reagent("oculine", 3) + list_reagents = list("plantmatter" = 3, "oculine" = 3) /obj/item/weapon/reagent_containers/food/snacks/superbiteburger name = "Super Bite Burger" @@ -2031,10 +1569,7 @@ icon_state = "superbiteburger" filling_color = "#CCA26A" bitesize = 10 - - New() - ..() - reagents.add_reagent("nutriment", 50) + list_reagents = list("nutriment" = 50) /obj/item/weapon/reagent_containers/food/snacks/candiedapple name = "Candied Apple" @@ -2042,10 +1577,7 @@ icon_state = "candiedapple" filling_color = "#F21873" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 3) + list_reagents = list("nutriment" = 3) // A candy apple without sugar... /obj/item/weapon/reagent_containers/food/snacks/applepie name = "Apple Pie" @@ -2053,10 +1585,7 @@ icon_state = "applepie" filling_color = "#E0EDC5" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 4) + list_reagents = list("nutriment" = 4) /obj/item/weapon/reagent_containers/food/snacks/cherrypie name = "Cherry Pie" @@ -2064,10 +1593,7 @@ icon_state = "cherrypie" filling_color = "#FF525A" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 4) + list_reagents = list("nutriment" = 4) /obj/item/weapon/reagent_containers/food/snacks/twobread name = "Two Bread" @@ -2075,10 +1601,7 @@ icon_state = "twobread" filling_color = "#DBCC9A" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 2) + list_reagents = list("nutriment" = 2) /obj/item/weapon/reagent_containers/food/snacks/jellysandwich name = "Jelly Sandwich" @@ -2087,40 +1610,27 @@ trash = /obj/item/trash/plate filling_color = "#9E3A78" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 2) + list_reagents = list("nutriment" = 2) /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/slime - New() - ..() - reagents.add_reagent("slimejelly", 5) + list_reagents = list("nutriment" = 2, "slimejelly" = 5) /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry - New() - ..() - reagents.add_reagent("cherryjelly", 5) + list_reagents = list("nutriment" = 2, "cherryjelly" = 5) /obj/item/weapon/reagent_containers/food/snacks/boiledslimecore name = "Boiled Slime Core" desc = "A boiled red thing." icon_state = "boiledrorocore" bitesize = 3 - - New() - ..() - reagents.add_reagent("slimejelly", 5) + list_reagents = list("slimejelly" = 5) /obj/item/weapon/reagent_containers/food/snacks/mint name = "mint" desc = "it is only wafer thin." icon_state = "mint" filling_color = "#F2F2F2" - - New() - ..() - reagents.add_reagent("minttoxin", 1) + list_reagents = list("minttoxin" = 2) /obj/item/weapon/reagent_containers/food/snacks/mushroomsoup name = "chantrelle soup" @@ -2129,10 +1639,7 @@ trash = /obj/item/trash/snack_bowl filling_color = "#E386BF" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 8) + list_reagents = list("nutriment" = 8) /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit name = "plump helmet biscuit" @@ -2140,16 +1647,15 @@ icon_state = "phelmbiscuit" filling_color = "#CFB4C4" bitesize = 2 + list_reagents = list("nutriment" = 5) - New() - ..() - if(prob(10)) - name = "exceptional plump helmet biscuit" - desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!" - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("omnizine", 5) - else - reagents.add_reagent("nutriment", 5) +/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit/New() + ..() + if(prob(10)) + name = "exceptional plump helmet biscuit" + desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!" // Is this a reference? + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("omnizine", 5) /obj/item/weapon/reagent_containers/food/snacks/chawanmushi name = "chawanmushi" @@ -2157,10 +1663,7 @@ icon_state = "chawanmushi" trash = /obj/item/trash/snack_bowl filling_color = "#F0F2E4" - - New() - ..() - reagents.add_reagent("nutriment", 5) + list_reagents = list("nutriment" = 5) /obj/item/weapon/reagent_containers/food/snacks/beetsoup name = "beet soup" @@ -2169,23 +1672,23 @@ trash = /obj/item/trash/snack_bowl filling_color = "#FAC9FF" bitesize = 2 + list_reagents = list("nutriment" = 8) - New() - ..() - switch(rand(1,6)) - if(1) - name = "borsch" - if(2) - name = "bortsch" - if(3) - name = "borstch" - if(4) - name = "borsh" - if(5) - name = "borshch" - if(6) - name = "borscht" - reagents.add_reagent("nutriment", 8) +/obj/item/weapon/reagent_containers/food/snacks/beetsoup/New() + ..() + switch(rand(1,6)) + if(1) + name = "borsch" + if(2) + name = "bortsch" + if(3) + name = "borstch" + if(4) + name = "borsh" + if(5) + name = "borshch" + if(6) + name = "borscht" /obj/item/weapon/reagent_containers/food/snacks/herbsalad name = "herb salad" @@ -2194,10 +1697,7 @@ trash = /obj/item/trash/snack_bowl filling_color = "#76B87F" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 8) + list_reagents = list("nutriment" = 8) /obj/item/weapon/reagent_containers/food/snacks/validsalad name = "valid salad" @@ -2206,11 +1706,7 @@ trash = /obj/item/trash/snack_bowl filling_color = "#76B87F" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("omnizine", 5) + list_reagents = list("nutriment" = 8, "omnizine" = 5) /obj/item/weapon/reagent_containers/food/snacks/appletart name = "golden apple streusel tart" @@ -2219,33 +1715,23 @@ trash = /obj/item/trash/plate filling_color = "#FFFF00" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("gold", 5) - spawn(1) - reagents.del_reagent("egg") - reagents.update_total() + list_reagents = list("nutriment" = 8, "gold" = 5) /obj/item/weapon/reagent_containers/food/snacks/dough_ball name = "ball of raw dough" desc = "A ball of raw dough, ready to be molded into new recipes." icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "dough" + list_reagents = list("nutriment" = 3) - New() - ..() - reagents.add_reagent("nutriment", 3) - - attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if(istype(W,/obj/item/weapon/kitchen/rollingpin)) - user.visible_message( \ - "[user] flattens the dough with the rolling pin!", \ - "\blue You flatten the dough with your rolling pin!" \ - ) - new /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough(src.loc) - qdel(src) +/obj/item/weapon/reagent_containers/food/snacks/dough_ball/attackby(obj/item/weapon/W, mob/user, params) + if(istype(W,/obj/item/weapon/kitchen/rollingpin)) + user.visible_message( \ + "[user] flattens the dough with the rolling pin!", \ + "\blue You flatten the dough with your rolling pin!" \ + ) + new /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough(src.loc) + qdel(src) /////////////////////////////////////////////////Sliceable//////////////////////////////////////// // All the food items that can be sliced into smaller bits like Meatbread and Cheesewheels @@ -2259,10 +1745,7 @@ icon_state = "flatdough" slice_path = /obj/item/weapon/reagent_containers/food/snacks/doughslice slices_num = 3 - - New() - ..() - reagents.add_reagent("nutriment", 3) + list_reagents = list("nutriment" = 3) /obj/item/weapon/reagent_containers/food/snacks/doughslice name = "slice of dough" @@ -2279,11 +1762,7 @@ slices_num = 5 filling_color = "#FF7575" bitesize = 2 - - New() - ..() - reagents.add_reagent("protein", 20) - reagents.add_reagent("nutriment", 10) + list_reagents = list("protein" = 20, "nutriment" = 10) /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice name = "meatbread slice" @@ -2301,11 +1780,7 @@ slices_num = 5 filling_color = "#8AFF75" bitesize = 2 - - New() - ..() - reagents.add_reagent("protein", 20) - reagents.add_reagent("nutriment", 10) + list_reagents = list("protein" = 20, "nutriment" = 10) /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice name = "xenomeatbread slice" @@ -2322,12 +1797,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/spidermeatbreadslice slices_num = 5 bitesize = 2 - - New() - ..() - reagents.add_reagent("protein", 20) - reagents.add_reagent("nutriment", 10) - reagents.add_reagent("toxin", 15) + list_reagents = list("protein" = 20, "nutriment" = 10, "toxin" = 15) /obj/item/weapon/reagent_containers/food/snacks/spidermeatbreadslice name = "spider meat bread slice" @@ -2335,10 +1805,7 @@ icon_state = "xenobreadslice" trash = /obj/item/trash/plate bitesize = 2 - - New() - ..() - reagents.add_reagent("toxin", 2) + list_reagents = list("toxin" = 2) /obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread name = "Banana-nut bread" @@ -2348,11 +1815,7 @@ slices_num = 5 filling_color = "#EDE5AD" bitesize = 2 - - New() - ..() - reagents.add_reagent("banana", 20) - reagents.add_reagent("nutriment", 20) + list_reagents = list("banana" = 20, "nutriment" = 20) /obj/item/weapon/reagent_containers/food/snacks/bananabreadslice name = "Banana-nut bread slice" @@ -2370,10 +1833,7 @@ slices_num = 5 filling_color = "#F7FFE0" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 30) + list_reagents = list("nutriment" = 30) /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice name = "Tofubread slice" @@ -2383,7 +1843,6 @@ filling_color = "#F7FFE0" bitesize = 2 - /obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake name = "Carrot Cake" desc = "A favorite desert of a certain wascally wabbit. Not a lie." @@ -2392,11 +1851,7 @@ slices_num = 5 filling_color = "#FFD675" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 25) - reagents.add_reagent("oculine", 10) + list_reagents = list("nutriment" = 25, "oculine" = 10) /obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice name = "Carrot Cake slice" @@ -2414,12 +1869,7 @@ slices_num = 5 filling_color = "#E6AEDB" bitesize = 2 - - New() - ..() - reagents.add_reagent("protein", 15) - reagents.add_reagent("nutriment", 10) - reagents.add_reagent("mannitol", 10) + list_reagents = list("protein" = 15, "nutriment" = 10, "mannitol" = 10) /obj/item/weapon/reagent_containers/food/snacks/braincakeslice name = "Brain Cake slice" @@ -2437,10 +1887,7 @@ slices_num = 5 filling_color = "#FAF7AF" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 25) + list_reagents = list("nutriment" = 25) /obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice name = "Cheese Cake slice" @@ -2457,10 +1904,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/plaincakeslice slices_num = 5 filling_color = "#F7EDD5" - - New() - ..() - reagents.add_reagent("nutriment", 20) + list_reagents = list("nutriment" = 20) /obj/item/weapon/reagent_containers/food/snacks/plaincakeslice name = "Vanilla Cake slice" @@ -2477,10 +1921,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/orangecakeslice slices_num = 5 filling_color = "#FADA8E" - - New() - ..() - reagents.add_reagent("nutriment", 20) + list_reagents = list("nutriment" = 20) /obj/item/weapon/reagent_containers/food/snacks/orangecakeslice name = "Orange Cake slice" @@ -2497,10 +1938,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/limecakeslice slices_num = 5 filling_color = "#CBFA8E" - - New() - ..() - reagents.add_reagent("nutriment", 20) + list_reagents = list("nutriment" = 20) /obj/item/weapon/reagent_containers/food/snacks/limecakeslice name = "Lime Cake slice" @@ -2517,10 +1955,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice slices_num = 5 filling_color = "#FAFA8E" - - New() - ..() - reagents.add_reagent("nutriment", 20) + list_reagents = list("nutriment" = 20) /obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice name = "Lemon Cake slice" @@ -2537,11 +1972,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice slices_num = 5 filling_color = "#805930" - - New() - ..() - reagents.add_reagent("nutriment", 20) - reagents.add_reagent("chocolate",20) + list_reagents = list("nutriment" = 20, "chocolate" = 20) /obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice name = "Chocolate Cake slice" @@ -2559,11 +1990,7 @@ slices_num = 5 filling_color = "#FFF700" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 20) - reagents.add_reagent("cheese", 20) + list_reagents = list("nutriment" = 20, "cheese" = 20) /obj/item/weapon/reagent_containers/food/snacks/cheesewedge name = "Cheese wedge" @@ -2578,13 +2005,7 @@ icon_state = "weirdcheesewedge" filling_color = "#00FF33" bitesize = 2 - - New() - ..() - reagents.add_reagent("mercury", 5) - reagents.add_reagent("lsd", 5) - reagents.add_reagent("ethanol", 5) - reagents.add_reagent("weird_cheese", 5) + list_reagents = list("mercury" = 5, "lsd" = 5, "ethanol" = 5, "weird_cheese" = 5) /obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake name = "Birthday Cake" @@ -2594,11 +2015,7 @@ slices_num = 5 filling_color = "#FFD6D6" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 20) - reagents.add_reagent("sprinkles", 10) + list_reagents = list("nutriment" = 20, "sprinkles" = 10) /obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice name = "Birthday Cake slice" @@ -2616,13 +2033,7 @@ slices_num = 6 filling_color = "#FFE396" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 6) - spawn(1) - reagents.del_reagent("egg") - reagents.update_total() + list_reagents = list("nutriment" = 6) /obj/item/weapon/reagent_containers/food/snacks/breadslice name = "Bread slice" @@ -2631,10 +2042,7 @@ trash = /obj/item/trash/plate filling_color = "#D27332" bitesize = 2 - - New() - ..() - reagents.add_reagent("bread", 5) + list_reagents = list("bread" = 5) /obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread name = "Cream Cheese Bread" @@ -2644,10 +2052,7 @@ slices_num = 5 filling_color = "#FFF896" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 20) + list_reagents = list("nutriment" = 20) /obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice name = "Cream Cheese Bread slice" @@ -2657,7 +2062,6 @@ filling_color = "#FFF896" bitesize = 2 - /obj/item/weapon/reagent_containers/food/snacks/watermelonslice name = "Watermelon Slice" desc = "A slice of watery goodness." @@ -2665,7 +2069,6 @@ filling_color = "#FF3867" bitesize = 2 - /obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake name = "Apple Cake" desc = "A cake centred with Apple" @@ -2673,10 +2076,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/applecakeslice slices_num = 5 filling_color = "#EBF5B8" - - New() - ..() - reagents.add_reagent("nutriment", 15) + list_reagents = list("nutriment" = 15) /obj/item/weapon/reagent_containers/food/snacks/applecakeslice name = "Apple Cake slice" @@ -2693,10 +2093,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice slices_num = 5 filling_color = "#F5B951" - - New() - ..() - reagents.add_reagent("nutriment", 15) + list_reagents = list("nutriment" = 15) /obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice name = "Pumpkin Pie slice" @@ -2711,10 +2108,7 @@ desc = "It's a salted cracker." icon_state = "cracker" filling_color = "#F5DEB8" - - New() - ..() - reagents.add_reagent("nutriment", 1) + list_reagents = list("nutriment" = 1) /obj/item/weapon/reagent_containers/food/snacks/rawcutlet name = "raw cutlet" @@ -2722,19 +2116,16 @@ icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "rawcutlet" bitesize = 1 + list_reagents = list("protein" = 1) - New() - ..() - reagents.add_reagent("protein", 1) - - attackby(obj/item/weapon/W, mob/user, params) - if(istype(W,/obj/item/weapon/kitchen/knife)) - user.visible_message( \ - "[user] cuts the raw cutlet with the knife!", \ - "You cut the raw cutlet with your knife!" \ - ) - new /obj/item/weapon/reagent_containers/food/snacks/raw_bacon(src.loc) - qdel(src) +/obj/item/weapon/reagent_containers/food/snacks/rawcutlet/attackby(obj/item/weapon/W, mob/user, params) + if(istype(W,/obj/item/weapon/kitchen/knife)) + user.visible_message( \ + "[user] cuts the raw cutlet with the knife!", \ + "You cut the raw cutlet with your knife!" \ + ) + new /obj/item/weapon/reagent_containers/food/snacks/raw_bacon(src.loc) + qdel(src) /////////////////////////////////////////////////PIZZA//////////////////////////////////////// @@ -2750,11 +2141,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/margheritaslice slices_num = 6 bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 40) - reagents.add_reagent("tomatojuice", 6) + list_reagents = list("nutriment" = 40, "tomatojuice" = 6) /obj/item/weapon/reagent_containers/food/snacks/margheritaslice name = "Margherita slice" @@ -2770,12 +2157,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice slices_num = 6 bitesize = 2 - - New() - ..() - reagents.add_reagent("protein", 30) - reagents.add_reagent("nutriment", 20) - reagents.add_reagent("tomatojuice", 6) + list_reagents = list("protein" = 30, "nutriment" = 20, "tomatojuice" = 6) /obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice name = "Meatpizza slice" @@ -2791,11 +2173,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice slices_num = 6 bitesize = 2 - - New() - ..() - reagents.add_reagent("plantmatter", 25) - reagents.add_reagent("nutriment", 10) + list_reagents = list("plantmatter" = 25, "nutriment" = 10) /obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice name = "Mushroompizza slice" @@ -2811,13 +2189,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice slices_num = 6 bitesize = 2 - - New() - ..() - reagents.add_reagent("plantmatter", 20) - reagents.add_reagent("nutriment", 10) - reagents.add_reagent("tomatojuice", 6) - reagents.add_reagent("oculine", 12) + list_reagents = list("plantmatter" = 20, "nutriment" = 10, "tomatojuice" = 6, "oculine" = 12) /obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice name = "Vegetable pizza slice" @@ -2889,18 +2261,16 @@ icon_state = "pizzabox[boxes.len+1]" -/obj/item/pizzabox/attack_hand( mob/user as mob ) - - if( open && pizza ) - user.put_in_hands( pizza ) - +/obj/item/pizzabox/attack_hand(mob/user) + if(open && pizza) + user.put_in_hands(pizza) to_chat(user, "\red You take the [src.pizza] out of the [src].") src.pizza = null update_icon() return - if( boxes.len > 0 ) - if( user.get_inactive_hand() != src ) + if(boxes.len > 0) + if(user.get_inactive_hand() != src) ..() return @@ -2914,9 +2284,8 @@ return ..() -/obj/item/pizzabox/attack_self( mob/user as mob ) - - if( boxes.len > 0 ) +/obj/item/pizzabox/attack_self(mob/user) + if(boxes.len > 0) return open = !open @@ -2926,11 +2295,11 @@ update_icon() -/obj/item/pizzabox/attackby( obj/item/I as obj, mob/user as mob , params) - if( istype(I, /obj/item/pizzabox/) ) +/obj/item/pizzabox/attackby( obj/item/I, mob/user, params) + if(istype(I, /obj/item/pizzabox/)) var/obj/item/pizzabox/box = I - if( !box.open && !src.open ) + if(!box.open && !open) // Make a list of all boxes to be added var/list/boxestoadd = list() boxestoadd += box @@ -2955,9 +2324,9 @@ return - if( istype(I, /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/) ) // Long ass fucking object name + if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/)) // Long ass fucking object name - if( src.open ) + if(open) user.drop_item() I.loc = src src.pizza = I @@ -2969,7 +2338,7 @@ to_chat(user, "\red You try to push the [I] through the lid but it doesn't work!") return - if( istype(I, /obj/item/weapon/pen/) ) + if(istype(I, /obj/item/weapon/pen/)) if( src.open ) return @@ -3009,119 +2378,62 @@ desc = "The precursor to Pigs in a Blanket." icon_state = "wrap" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 5) + list_reagents = list("nutriment" = 5) /obj/item/weapon/reagent_containers/food/snacks/beans name = "tin of beans" desc = "Musical fruit in a slightly less musical container." icon_state = "beans" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 10) - reagents.add_reagent("beans",10) + list_reagents = list("nutriment" = 10, "beans" = 10) /obj/item/weapon/reagent_containers/food/snacks/benedict name = "eggs benedict" desc = "There is only one egg on this, how rude." icon_state = "benedict" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("egg", 3) + list_reagents = list("nutriment" = 3, "egg" = 3) /obj/item/weapon/reagent_containers/food/snacks/hotdog name = "hotdog" desc = "Fresh footlong ready to go down on." icon_state = "hotdog" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("ketchup", 3) + list_reagents = list("nutriment" = 3, "ketchup" = 3) /obj/item/weapon/reagent_containers/food/snacks/meatbun name = "meat bun" desc = "Has the potential to not be Dog." icon_state = "meatbun" bitesize = 6 - - New() - ..() - reagents.add_reagent("nutriment", 6) + list_reagents = list("nutriment" = 6) /obj/item/weapon/reagent_containers/food/snacks/icecreamsandwich name = "icecream sandwich" desc = "Portable Ice-cream in it's own packaging." icon_state = "icecreamsandwich" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("ice", 2) + list_reagents = list("nutriment" = 2, "ice" = 2) /obj/item/weapon/reagent_containers/food/snacks/notasandwich name = "not-a-sandwich" desc = "Something seems to be wrong with this, you can't quite figure what. Maybe it's his moustache." icon_state = "notasandwich" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 6) + list_reagents = list("nutriment" = 6) /obj/item/weapon/reagent_containers/food/snacks/sugarcookie name = "sugar cookie" desc = "Just like your little sister used to make." icon_state = "sugarcookie" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("sugar", 5) - spawn(1) - reagents.del_reagent("egg") - reagents.update_total() + list_reagents = list("nutriment" = 2, "sugar" = 5) /obj/item/weapon/reagent_containers/food/snacks/friedbanana name = "Fried Banana" desc = "Goreng Pisang, also known as fried bananas." icon_state = "friedbanana" - - New() - ..() - reagents.add_reagent("sugar", 5) - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("cornoil", 4) - -/obj/item/weapon/reagent_containers/food/snacks/tofurkey - name = "Tofurkey" - desc = "A fake turkey made from tofu." - icon_state = "tofurkey" - bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 12) - reagents.add_reagent("ether", 3) - -/obj/item/weapon/reagent_containers/food/snacks/stuffing - name = "Stuffing" - desc = "Moist, peppery breadcrumbs for filling the body cavities of dead birds. Dig in!" - icon_state = "stuffing" - - New() - ..() - reagents.add_reagent("nutriment", 3) + list_reagents = list("sugar" = 5, "nutriment" = 8, "cornoil" = 4) /obj/item/weapon/reagent_containers/food/snacks/dionaroast name = "roast diona" @@ -3130,12 +2442,7 @@ trash = /obj/item/trash/plate filling_color = "#75754B" bitesize = 2 - - New() - ..() - reagents.add_reagent("plantmatter", 4) - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("radium", 2) + list_reagents = list("plantmatter" = 4, "nutriment" = 2, "radium" = 2) /obj/item/weapon/reagent_containers/food/snacks/boiledspiderleg name = "boiled spider leg" @@ -3143,22 +2450,14 @@ icon_state = "spiderlegcooked" trash = /obj/item/trash/plate bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("toxin", 2) + list_reagents = list("nutriment" = 3, "toxin" = 2) /obj/item/weapon/reagent_containers/food/snacks/spidereggs name = "spider eggs" desc = "A cluster of juicy spider eggs. A great side dish for when you care not for your health." icon_state = "spidereggs" bitesize = 2 - - New() - ..() - reagents.add_reagent("protein", 2) - reagents.add_reagent("toxin", 3) + list_reagents = list("protein" = 2, "toxin" = 3) /obj/item/weapon/reagent_containers/food/snacks/spidereggsham name = "green eggs and ham" @@ -3166,12 +2465,7 @@ icon_state = "spidereggsham" trash = /obj/item/trash/plate bitesize = 4 - - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("sodiumchloride", 1) - reagents.add_reagent("toxin", 3) + list_reagents = list("nutriment" = 6, "sodiumchloride" = 1, "toxin" = 3) /obj/item/weapon/reagent_containers/food/snacks/sliceable/turkey name = "Turkey" @@ -3180,11 +2474,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/turkeyslice slices_num = 6 bitesize = 2 - - New() - ..() - reagents.add_reagent("protein", 24) - reagents.add_reagent("nutriment", 18) + list_reagents = list("protein" = 24, "nutriment" = 18) /obj/item/weapon/reagent_containers/food/snacks/turkeyslice name = "turkey serving" @@ -3201,57 +2491,41 @@ trash = /obj/item/trash/plate filling_color = "#D6D9C1" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 5) - reagents.add_reagent("gravy", 5) - reagents.add_reagent("mashedpotatoes", 10) + list_reagents = list("nutriment" = 5, "gravy" = 5, "mashedpotatoes" = 10) ////////////////////////////////ICE CREAM/////////////////////////////////// /obj/item/weapon/reagent_containers/food/snacks/icecream - name = "ice cream" - desc = "Delicious ice cream." - icon = 'icons/obj/kitchen.dmi' - icon_state = "icecream_cone" + name = "ice cream" + desc = "Delicious ice cream." + icon = 'icons/obj/kitchen.dmi' + icon_state = "icecream_cone" + list_reagents = list("nutriment" = 1, "sugar" = 1) - New() - ..() - reagents.add_reagent("nutriment", 1) - reagents.add_reagent("sugar",1) - update_icon() +/obj/item/weapon/reagent_containers/food/snacks/icecream/New() + ..() + update_icon() - update_icon() - overlays.Cut() - var/image/filling = image('icons/obj/kitchen.dmi', src, "icecream_color") - filling.icon += mix_color_from_reagents(reagents.reagent_list) - overlays += filling +/obj/item/weapon/reagent_containers/food/snacks/icecream/update_icon() + overlays.Cut() + var/image/filling = image('icons/obj/kitchen.dmi', src, "icecream_color") + filling.icon += mix_color_from_reagents(reagents.reagent_list) + overlays += filling /obj/item/weapon/reagent_containers/food/snacks/icecream/icecreamcone - name = "ice cream cone" - desc = "Delicious ice cream." - icon_state = "icecream_cone" - volume = 50 - bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("sugar",6) - reagents.add_reagent("ice",2) + name = "ice cream cone" + desc = "Delicious ice cream." + icon_state = "icecream_cone" + volume = 50 + bitesize = 3 + list_reagents = list("nutriment" = 3, "sugar" = 7, "ice" = 2) /obj/item/weapon/reagent_containers/food/snacks/icecream/icecreamcup - name = "chocolate ice cream cone" - desc = "Delicious ice cream." - icon_state = "icecream_cup" - volume = 50 - bitesize = 6 - - New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("chocolate",8) - reagents.add_reagent("ice",2) + name = "chocolate ice cream cone" + desc = "Delicious ice cream." + icon_state = "icecream_cup" + volume = 50 + bitesize = 6 + list_reagents = list("nutriment" = 5, "chocolate" = 8, "ice" = 2) /obj/item/weapon/reagent_containers/food/snacks/cereal name = "box of cereal" @@ -3259,10 +2533,7 @@ icon = 'icons/obj/food/food.dmi' icon_state = "cereal_box" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 3) + list_reagents = list("nutriment" = 3) /obj/item/weapon/reagent_containers/food/snacks/deepfryholder name = "Deep Fried Foods Holder Obj" @@ -3270,10 +2541,7 @@ icon = 'icons/obj/food/food.dmi' icon_state = "deepfried_holder_icon" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 3) + list_reagents = list("nutriment" = 3) /obj/item/weapon/reagent_containers/food/snacks/dough name = "dough" @@ -3281,10 +2549,7 @@ icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "dough" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 3) + list_reagents = list("nutriment" = 3) // Dough + rolling pin = flat dough /obj/item/weapon/reagent_containers/food/snacks/dough/attackby(obj/item/I, mob/user, params) @@ -3306,10 +2571,7 @@ icon_state = "flat dough" slice_path = /obj/item/weapon/reagent_containers/food/snacks/doughslice slices_num = 3 - - New() - ..() - reagents.add_reagent("nutriment", 3) + list_reagents = list("nutriment" = 3) /obj/item/weapon/reagent_containers/food/snacks/doughslice name = "dough slice" @@ -3317,10 +2579,7 @@ icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "doughslice" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 1) + list_reagents = list("nutriment" = 1) /obj/item/weapon/reagent_containers/food/snacks/bun name = "bun" @@ -3328,20 +2587,14 @@ icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "bun" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 4) + list_reagents = list("nutriment" = 4) /obj/item/weapon/reagent_containers/food/snacks/taco name = "taco" desc = "Take a bite!" icon_state = "taco" bitesize = 3 - - New() - ..() - reagents.add_reagent("nutriment", 7) + list_reagents = list("nutriment" = 7) /obj/item/weapon/reagent_containers/food/snacks/cutlet name = "cutlet" @@ -3349,10 +2602,7 @@ icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "cutlet" bitesize = 2 - - New() - ..() - reagents.add_reagent("protein", 2) + list_reagents = list("protein" = 2) /obj/item/weapon/reagent_containers/food/snacks/rawmeatball name = "raw meatball" @@ -3360,20 +2610,14 @@ icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "rawmeatball" bitesize = 2 - - New() - ..() - reagents.add_reagent("protein", 2) + list_reagents = list("protein" = 2) /obj/item/weapon/reagent_containers/food/snacks/hotdog name = "hotdog" desc = "Unrelated to dogs, maybe." icon_state = "hotdog" bitesize = 2 - - New() - ..() - reagents.add_reagent("protein", 6) + list_reagents = list("protein" = 6) /obj/item/weapon/reagent_containers/food/snacks/flatbread name = "flatbread" @@ -3381,10 +2625,7 @@ icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "flatbread" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 3) + list_reagents = list("nutriment" = 3) /obj/item/weapon/reagent_containers/food/snacks/rawsticks name = "raw potato sticks" @@ -3392,20 +2633,14 @@ icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "rawsticks" bitesize = 2 - - New() - ..() - reagents.add_reagent("plantmatter", 3) + list_reagents = list("plantmatter" = 3) /obj/item/weapon/reagent_containers/food/snacks/ectoplasm name = "ectoplasm" desc = "A luminescent blob of what scientists refer to as 'ghost goo'." icon = 'icons/obj/wizard.dmi' icon_state = "ectoplasm" - - New() - ..() - reagents.add_reagent("ectoplasm", 10) + list_reagents = list("ectoplasm" = 10) /obj/item/weapon/reagent_containers/food/snacks/liquidfood name = "\improper LiquidFood Ration" @@ -3414,11 +2649,7 @@ trash = /obj/item/trash/liquidfood filling_color = "#A8A8A8" bitesize = 4 - - New() - ..() - reagents.add_reagent("nutriment", 20) - reagents.add_reagent("iron", 3) + list_reagents = list("nutriment" = 20, "iron" = 3) /obj/item/weapon/reagent_containers/food/snacks/tastybread @@ -3428,7 +2659,4 @@ trash = /obj/item/trash/tastybread filling_color = "#A66829" bitesize = 2 - - New() - ..() - reagents.add_reagent("nutriment", 6) \ No newline at end of file + list_reagents = list("nutriment" = 6) \ No newline at end of file diff --git a/code/modules/food_and_drinks/recipes/recipes_candy.dm b/code/modules/food_and_drinks/recipes/recipes_candy.dm index 2ab54fc0e27..55c5df55328 100644 --- a/code/modules/food_and_drinks/recipes/recipes_candy.dm +++ b/code/modules/food_and_drinks/recipes/recipes_candy.dm @@ -78,6 +78,11 @@ items = list(/obj/item/weapon/reagent_containers/food/snacks/egg) result = /obj/item/weapon/reagent_containers/food/snacks/candy/nougat +/datum/recipe/candy/nougat/make_food(obj/container) + var/obj/item/weapon/reagent_containers/food/snacks/candy/nougat/being_cooked = ..(container) + being_cooked.reagents.del_reagent("egg") + return being_cooked + // *********************************************************** // Base Candy Recipes (unflavored / plain) // *********************************************************** diff --git a/code/modules/food_and_drinks/recipes/recipes_grill.dm b/code/modules/food_and_drinks/recipes/recipes_grill.dm index 4c459b737ff..52be26f37b5 100644 --- a/code/modules/food_and_drinks/recipes/recipes_grill.dm +++ b/code/modules/food_and_drinks/recipes/recipes_grill.dm @@ -89,6 +89,11 @@ ) result = /obj/item/weapon/reagent_containers/food/snacks/fishfingers +/datum/recipe/grill/fishfingers/make_food(obj/container) + var/obj/item/weapon/reagent_containers/food/snacks/fishfingers/being_cooked = ..(container) + being_cooked.reagents.del_reagent("egg") + return being_cooked + /datum/recipe/grill/cutlet items = list( /obj/item/weapon/reagent_containers/food/snacks/rawcutlet diff --git a/code/modules/food_and_drinks/recipes/recipes_oven.dm b/code/modules/food_and_drinks/recipes/recipes_oven.dm index 9ee3ff3343e..37af56e8ad4 100644 --- a/code/modules/food_and_drinks/recipes/recipes_oven.dm +++ b/code/modules/food_and_drinks/recipes/recipes_oven.dm @@ -293,6 +293,11 @@ ) result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/bread +/datum/recipe/oven/bread/make_food(obj/container) + var/obj/item/weapon/reagent_containers/food/snacks/sliceable/bread/being_cooked = ..(container) + being_cooked.reagents.del_reagent("egg") + return being_cooked + /datum/recipe/oven/applepie fruit = list("apple" = 1) items = list( @@ -377,6 +382,11 @@ ) result = /obj/item/weapon/reagent_containers/food/snacks/appletart +/datum/recipe/oven/appletart/make_food(obj/container) + var/obj/item/weapon/reagent_containers/food/snacks/appletart/being_cooked = ..(container) + being_cooked.reagents.del_reagent("egg") + return being_cooked + /datum/recipe/oven/cracker reagents = list("sodiumchloride" = 1) items = list( @@ -392,6 +402,11 @@ ) result = /obj/item/weapon/reagent_containers/food/snacks/sugarcookie +/datum/recipe/oven/sugarcookie/make_food(obj/container) + var/obj/item/weapon/reagent_containers/food/snacks/sugarcookie/being_cooked = ..(container) + being_cooked.reagents.del_reagent("egg") + return being_cooked + /datum/recipe/oven/flatbread items = list( /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 1da5f07b2e5..a6fd792e795 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -80,12 +80,6 @@ icon_state = "pill8" list_reagents = list("haloperidol" = 15) -/obj/item/weapon/reagent_containers/food/pill/paroxetine - name = "Paroxetine pill" - desc = "Heavy anti-depressant." - icon_state = "pill8" - list_reagents = list("paroxetine" = 15) - /obj/item/weapon/reagent_containers/food/pill/happy name = "Happy pill" desc = "Happy happy joy joy!" From 1c89bcb28e94a9be0f1c311debf1cbaf0e9afbe9 Mon Sep 17 00:00:00 2001 From: Markolie Date: Tue, 25 Oct 2016 18:43:06 +0200 Subject: [PATCH 13/30] Fix spiderling remains being draggable --- code/game/objects/effects/spiders.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 79b09f48835..9d1fb75d25e 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -215,6 +215,7 @@ desc = "Green squishy mess." icon = 'icons/effects/effects.dmi' icon_state = "greenshatter" + anchored = 1 /obj/effect/spider/cocoon name = "cocoon" From effda79a2ffb6aa43877a54001a8506407bcc1c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20J=C4=99drzejczak?= Date: Tue, 25 Oct 2016 03:18:18 +0200 Subject: [PATCH 14/30] adds muh shirt --- code/modules/customitems/item_defines.dm | 9 +++++++++ icons/mob/inhands/clothing_lefthand.dmi | Bin 75101 -> 75505 bytes icons/mob/inhands/clothing_righthand.dmi | Bin 73759 -> 74197 bytes icons/mob/uniform.dmi | Bin 343511 -> 345081 bytes icons/obj/custom_items.dmi | Bin 47062 -> 47369 bytes 5 files changed, 9 insertions(+) diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index c7126795143..ee2d17ba98e 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -433,6 +433,15 @@ item_state = "castile_dress" item_color = "castile_dress" +/obj/item/clothing/under/fluff/elishirt // FlattestGuitar9: Eli Randolph + name = "casual dress shirt" + desc = "A soft, white dress shirt paired up with black suit pants. The set looks comfortable." + icon = 'icons/obj/custom_items.dmi' + icon_state = "elishirt" + item_state = "elishirt" + item_color = "elishirt" + displays_id = 0 + /obj/item/clothing/under/psysuit/fluff/isaca_sirius_1 // Xilia: Isaca Sirius name = "Isaca's suit" desc = "Black, comfortable and nicely fitting suit. Made not to hinder the wearer in any way. Made of some exotic fabric. And some strange glowing jewel at the waist. Name labels says; Property of Isaca Sirius; The Seeder." diff --git a/icons/mob/inhands/clothing_lefthand.dmi b/icons/mob/inhands/clothing_lefthand.dmi index 3fe35fe765155f32f4e05efb8e2eb884264ddfbd..9aed5172330e3d6f6290e39f967a940214b919b7 100644 GIT binary patch delta 16728 zcmchg#pAWJ z69nRunwHcTwJd-SAL!DeYMA&w`TDjjPaRnW`&ua)7n@~>gfxKa8{M9WqfLVfH!74arYI4Q9#XJAjYu)`KW(lo3Ti{ z4&j}V-)1ZhI6l)2^Fsd#Y@o)K9e0|aomCH5WGa2#%KvKDgs}QV`=_d=UYASgJ($}W zIj3|X!?}Vl)?-u>`Knv#9b9S!b{ka|>X)1`ei=_+X0C`+Dn&7oRXoXz!sisFR$sMJ z^^JL#8M70_k)hw@Qu=_j)FtZUQ+rxI4+}LE9_}1;0oZ`z5kv~dm=7>LiIOIM%%>Z3 zbG0DLf~ZcAYA1l!x^a%GBP?=JTcty=6Z4aWtD6|ZBUsI*7Q?IvQDC@tXF7(`eJMDJ zotr4g&Q+*M?XqrGpU`9Tcy^XY;$qHF+wJ_ehhgX8?H^7B3O+Na&? z#aOWGfJS8k-XqBUQ!IBoy_H*@sngl5zt6+Ds6VjOXn8-6@6*ot-8}fBT#EO1^~QYz z1M@+Hpnxawf&|iNK36v%`Q??;gpMwpgwE8|$J$JQV4Y6D?uU;%R5?HI-F9tuLwEDV zT`8>H)W=KrlV>Wt{Ue8Em*XDZLtUvfe3ayF_BK`lGd9I{T$RS+$9XsIzxec6-(8dp zJL*%zOQ#dMC8yVnRQPj#Eyl+}p}9T!HzM;Tj%1@sosPqHM9Fs)A$PJM~dUdUSL zR1|t%)&zW0$B&xI8|7}*`w6d9J6@)8l5b>GS9(@cVgHig}t&jeu z$jrUDPrzis&m7axmD4~ZS#80-khU%h*%Zga_l##(9ItG#VJNrs^~K%wx$hfuyeguy zi^HiRTjuA1T|$I6AwWd;<1h*D1B5*tG2)nhBLPTcc{M|&z#^;E6FL+qTo-SP-qgW* zs>st(qh*`A+S-4iO3!)OB00g)lxKw~d)Q=SN11}PX8g-otMglCj&wRAHE6y5j$je_ zzV-&UqAH z5e)+Gw7&ShO^)*oi%_Y=6}N6>IY5Z$l_XlVt2^rDOcYKSW^HdLXh-d8X0cF5kx;MN zGr2Z@t9g=^^V=P!syS3=mKSUq=ka~I!Ry&*lHJ~0d8V|2V_dq=NiBMXiFfu&Umu6e zKeya1`pnt8`(;BHHz~}_dVI^}gV64ycz*GHJGv!1coS|BYL2$63gO36-yfYWeIev% zFIK;V?tO|eH^5k;=e&bXuz$S8M|TNvH?cm^>E8`)>~4&n!^opk{8I4F@J9(P*o5y> zyFnRt-{oU6oKrFyO6D2sueAUGt%yokBdsJ|s0h00y8_%1`b^3yMJUM{qaYJ%m`&zk z`8^j^FGF0Fp!Pwkhlv+k{U%rK_Q%o4x4JHRB!t924K*DF0>d0Uowv=IsUA|vXfW|g zJyy6UDW$rygTCbbY5pXM^=YhUGXKe5{k<;3rvvET!+zGo-iB9^Q|u>4yM5D=!7w+K`e#IWAiDHvG`1msNHf*Zey5CAm@3KAQ92%PX)Y2lk zGhK!E>({T#usrNU0$W|(gwF1668E*A3R})+~eUH2iX2ujBC! zNMecEf=Me*m2o4Ey7Mj?_8=a>qCx>>=1Rt@>qXiy>NvsjDc>LTvdJ;ml}k}4{ntee zEmi>DL;v+{J7e*#Tbk=U<44%DETst}4kdntKW#{PL^b5CeDq?EC9JKQYu3I3wPf8a zdi>%hgV^^eT=thDR$j+DQ~FK5{JJHkk!uMQWP4NZ!5zAKs=_Aw+qZ9K$kD+fXdg%> z92^`41qDf4TlRy4gSM@)!uDVsQf);^K=I9+H_Uu|WNue>eD9)AU*KdE;Z5RpQM0u7 zX}?v3Z?$Ob#^4na+=ZXQ2f(^HC{)FF!CD?3H-> zDr)jr0=}=%Le35oAkVnk!$x*+0%VA*b*dvnVii>-sXvDUc#8E$3G{W;-2qo`qTOP6 z_9m4TV}fVaGbp
+V15OF`f0U-hD3H&+_!)P_r3%ZQapF8D!vp(Ryjg2R8&YISx z00(6Q5*P<0a6mg!?+|$M_6&5s$C!tloY2YSf|BNQTsGCz7Cp0oTtgD2 zv#r9Cok(+Q>-z$Z(>bTKw)ESiG&EtSr#||RsgOt{$euc$J3u=7(A_bf`g_-`se@N2 z+h8lZzfN)U-re1A)J^&4^=VWg=C!`I4~q#E+aKdgqdZ0U2c$R2 zh4OqXM)NhWAQU{N5uZreevkOPdTQB$&mkg0+uq*JeL_h|$pRi5riUtg3fY*+c+yrU zVI6ulFvkKoU2Tp*f__PtlHWTccI zPa8#d%Jkb9!e#O2Yl&N*Imsv+ry^7|!08G9S}WK&5pUVPzRL7~TXi>OK`So5hNSrp zPP-PA_!RxMtadqU-h3kU*3ukhR46Q(Iy?`H8Q7Oq$e%#|30MrB^g6Ky+9LfrW0A?q_Mq9| zY(#LYKULPykY*0R1k8A$cOgLtCm8)63?n`~Jgn}$_6UM7aB7Oo3t=$(K`jdSJl@*c zdK`G+Gls3FX=<8IB@rlkeZ^=0Wv9wFLvU`teEuBt#p@a?e%VE&$FYJ-nSkQ|LuX}fE`3Jq$3vETh7z0Pwt2O3vad98J zuPL)Wcz_jDdpg!^vgh;ai6zj1UjXVFZEfvN6cmDH;`U9wlFI?*14+`_lfi zdQ5a=La~kAE~l!7#)PY1n5EKdY6Z@+0Q6+dYPB;fgp&3Q9_)w^#ZkDS9+Lo#TPaK) z{`~>3fxniCiAm7N9U$D4KvQ#9@>$v*S#y^prlcSoo6o~)UXOg|Mz0NI@X*lG@_KBj z*M_Y}G0>{leYp{IxISRn`I%|1Z6YEydq%KO#YrHIwja3+N4MFPRdf<$4HJbwY$wXU zDGaUjfc3&&gqOX&Z4H4~5URqj?62NA_cLHYQh!m;`0PXDfZXCCzUXjHH>{wZj?&s% zDo|dWp2;e~pJvB%>V=uzM5J4Fs^nepH~aJG7GD_tG^|ppIAzKN;>)Rf4Z< z;)K&2o#AP~yugB4ep|E(ipr&tgcRo3Vzj%fz$+EcisBstY)7M4%~j4G*H~Qal^H_m=Fqun!?=yPa*Fm)OUErLU-iM+2K00B>L;d;elq<{^yU2d{LI^Tdnx<_s|y;L`=b!;j4FPay~fMxCMIDY?L!ac zlBHsD&FQb4`x$BQ{kBb>&ll}XD@%Skk#$()-bI7EWxTet!aI&t{L(s8Q^$L^i;VJK z&{aHDN>fVN;^ljMx80g6lv6w^u2i9ooDqRY5M4yPOm`wDlBW7Z37! z(3{#ti}!JFV`!hKyCMAv?o(Ggo@rtShT->e){`eqrVL!fnGZ`t-DvQ<@7v^jx7?Z)s|{npSj;qRWUuO2y4()AfC9t z*wD#(OeL6bwh>MSB;^62C zG;m%>b>l0qrYfV?3B9DK$IQ-QT~_?&ELa3HiW`pA?o22Sf7hr(1*1u4y9` zIAD`Ba~H^^2rnTFSk|Sh`?a&lIn{~sdDTKXxqqRH1EJtb=Mi{W=v4Law3&JgR(FFp zD=|593(xU%eM+^hL+;p3#c?UA>xWKZ&TU42^-fsaZ9=-xs3<}Y50A+c`!ua~6V9Aa z9{09i*%0Qpp+l1G{0`z{M{E3?tY6^^ z(p-)shKEF)DPTNc7^>Pxh=YE>0pBcx#3`}Zk{etjsy0opByUmtj-x&0`Th`xnKk(r-=$I;Od5>#C+Kt@h( z{tI|_%f~&@hON_sT#aCsW>6(XKoNx0#H0_DCFT7ZnhJ)O0^%=q^z=SP9eY7q`qM;^ z2R%H6ZWPAr=bdbBa0Y3S|6(6KqUO&nwFOEGt7gcj!|5#ApL@^;RNkf6L3r6h}_gs?u04_`I?l z18^U^pSMl};WRu>BNd7n5`Z{lp^Gh}Es9o$P2)DQjliEG1-`*+0m>;JbS z0DR+rd)=ZI!A7i_ILBzCC^$y&QvlDS8SLngt4Zl*%kbCa6A<{3M)L1g-RsOb9G@TG zzG0ordS^g_CQSWQ+~#=p@Q8@Oi3%Ry{MSr_$o~h_(biT{NeTD6N=is-D&57O8W=eX zDaqqE2Y}ViToWzmV?rUEx<6Y$vZ?Fna6R$Mf3u$%fH+5O zdv+Cq6l64_1c+l8@ zL49M7CwTAoe2RMR_N-Y{-`#h=8+IB{D-!J$jF&yx-xYwUlO1`??;JHEFREGCkl!Xoiw+I)KZ~xTwe-J!T$3flm z(@nR8LI^0-!-Hp_dT(#|n(e5$zZyl?Dig;SO(TV|us=xlfB=p_19Z5f7$uzMz2+}ZK>r^LGu@!qM#MO` zo1@s&{$_VfZ+AjbS@|ZUX8CK9W|eN3|7K_Kr1i_tSdL5om>xA6dSM3w};DfU$j?jkJnwI6`C(f0#Te_0C8(v)4(%p z*j2z@m}SvOo-%P{WTem8YNA+i70t@`A-k$$PNKrGhX#)*vb3MtQ@EKN^|!|7Qs9jn z6dmtHlJq#NysF48D(V>!D%1-n$6W2zi(h%~PFrK<5c5#E=IEZd+BETzAa3K@QiN4- zaPWddpHL2F$EJ30I3jBZNUUo#1^M@ZcV}Ch4CsbsHq{xV78SJ*=Cgxm_jq}UK_X5p z3rc5yQ};Z`*%ydP;?S|b@4=TU)7PcOYvF?xg1!6ey_)~SVUlP|bp&kjV{AMXpJ>+J zJ+U@FCg44L0o8}fw&e}meeQHH0JayHgcc1O8NO!mO0^82qmS`|d|jF>?id!SP~~aQF3oCLtke>(zM+<%4*3 z9v=8~l|Ap{$9LDax9;A(o2jT8_3?cmvYiqVwDr{HF*_fbnLqLt81eySHAh@;EiTOR zmE2DaX+Jhd=HW*>kG7e2o#wk6wlp95x3q#hfY&fn5DMC&h<_h9F2LAAULFQ)KMoWt zJ=^p=-3zkZ;(70VGVRdsVB(PG&D)0}VhsNy`jSNXym zlvat4H*alzC4SRwLo)~hM@7?HVt&VuV&w4QpP8i9O--YqpRcz$IjoQtZ*XJ+fWUa5 zSdp7QC>x6|r;om?Wq`Po&Gk`-dDpCstTE{fG-@k{A3NSEjyzt**m8q+%(*)TP3_S&x zmp{qL%ge5)Anohx+t}HW@%0t%?(Y5^7iR_gsatpd!2{;q5ZcdQzlNrXcz-+ZrQVsT zBZcfB#6I1~d_f04y;8mI{8g{wO#)na-QoOF#GU6WrHg_rQZ9ckfSNlrWPgxo;=fp{ zaNw=sJ#PHdjAw7{iFB9F*%1?%HzU=Tl10tP-VhWM^MM%$(a%^-#PKxI3+_v_=9lT} zM3shUWC6CeE(p5tC>}{_Xb?|xH{;Y56%okF%IcTCgxYNn*e9!9>@N=6mo$gP42a)= zC})V%^R|Xe=>e-s;%NMmrt^pA!mQc_g0Egx(s*LGTO2;^$?eb7kDy8q`c<%*FX2w| zUTXxDHmSr*-?pc;*<)W$(8D<6oQW?Aba@Jge4(gakwn>{2hr-oPka zdwUi5eHRPn74g!~3pakE2_b_Tmj;O?X`b`uzq9~y9#ND?jhm)$`V>`>IB!ppCWn)Lgb?X23b!} z{;T5}m?G?~&sj!U8DB1%Au{QyjRhFvNS^1Qmta^qThD+mwTG`p-$LedXg-WeqArq) zmN*F$L`L=6zL(%i+I1BNfi_4Pn}wFQOKIM7o7DkZqXioq8~cKcpkqt0EiEIn z(%@eXZ31oeEr{sZO6+7AV0rr*9=_fj&b0tz$v)?sc~A&w!Uk6r6~?+^ui44iZ?|fg z(#)U9B81@Z2h;WY%jEvzqvm!tT6N~Xp93-RGlu^7CWq z&$ae2lFW4gpsn0;?8er1dIw^p&lu4EDjHbpM7kYFzimV5ay=gp=SBJ@)-w+GU=acsz~40~R57BXl$Y1V zDa?W-Tg)kJ#V1MtIE|nZc+l|=)S-dvo)Pm3;xB3tgUy(+Kfaj(;S-%$;{_8j1Nq|h zv&-kc+e@yl*-TfyHn{@BN`(_^3QppyJwjLR5ibP#JrhtmHn~Dqy!dzSY?Skeh!{cA zFEu>;517o%DDK{c007B1kEX~3qIH;eD)6_1&T(hn4k5xzG!4Lx(Is5!OSwch2*#ok z%O!9NG5V9M!t}0@|FGCeqUF=z=V>O#)~`gFrD(Cl?7&fE5xni}^~u@x#PU5zUu~SQEHp zb`j188)UECCKx!id`iaPx!L(4YuRyE#mD^)%~rB#__Ib*>9m@xk?~;W-`OB^wrWzD z3c}hLe_U_(Xsosv#w%3>hA=d=wBB!Q*z)o7n}giNEGS52Zf<_a+DWR`E!-+}~js`x2u{HUEb8|7sj)w#||!NxypHVJ>l3kgW23&>v9{T=)?0s)1n zsHjkh`aA}8$91F~q=M&Ei5?jAG!5WBN(Q1E&0wHW{dvBREaA!?lW(p;#YKBZ2d*w% z$LHL$nkXRZp3IQ-y)YSN3%>q&@=rfVp(g(cR%b-@>p~>8v_!C@@TJ=p9^=zdhkXBj z%>5TfD2>B;bR}0$?%TPV0G4rvRaI3?!ooD3o}RXjj;pad8LyoO(|^X;Wx zy4<7bAI*}s1LQ!mc_{SR3ToLP{w$*TuT2<8IS+#TF}rv#5L`nM}-6*Ev#o=JjIl8t$Yeu9=YUOA(^8;}T z`m`e3eEaey9^QLYV>)@nB;*m437Wi7j1R!>-CPXo${Xj8TWxV z7d=wfTvmBLT`a9_`IW^NAKMW>&SJU5Oy$N825wd zf7|TgV1S`h`L89HNw&P9^q-@bH)1(YWMUal)WI(qK$Y)}_3zGTh2D2%Vu;J11RVYH zC-QDp&d0YI6^e`P`HZ3W|Du2=`P1_fOlvAlc+s<8Beqq?y%Ctn$gZ!?P~4+eS2$VH zz6@GFp?&@R<15(q{82;HMTDt<F~!N30`pU zTUTi$d$_Ohy&7N{FE*Up_9;H*91j{FAIE|)`0bQ&zZb;p6sIqBE}x3zZvS7F9RU5> z#2XM?JiLa8y^D$l-!PWw<-KbqI5s*8QO6*8{+`y6GJ|8f86C{hFdmejae-mS5cAM*A=l5=OWETKobDqK%FDT(d-E(Z}-QCWMZT;gfrf za*H+Np0xEDvB`ml0}y6%xuZ~q&G+yju7QC8HzR&O0?lkTclHa6e%}Xk{O2h@IM@xG zs}9Qan|CKJdM3PQ`p;@Wqiwg^3WxdnFCsBT?ZYK!i6wirX@}0BIg0Im=Xbz_ z`Z!A+^>nHEd-=1@L~n=htct%w2xw*8+{&e>(E|6ki-G}Ard0wl^78U0&vdlZ%jf3Y zs+emq4SW01V?q{FGiOV?$GSfC%!!}<$>}V)Q$)-jfnPy^>L+5lXGh0{#O5Y*CvSF? zJ!^U%86>e>+R1$V{-!HcuXweiHjmt~%dYC-6BjS9YA_ux`}+0kngB4^56W;G7^*w> zw{*}2z(NipqCMXJ4|tTH6BE}-olA9MHBkbF;;F!i%he_A`aF!<@#>lL+@o*V*~pS{ z?}ptJDt}tl4Dm?Wa0*n?!1aI}92}xu?dKxHKvi(G`u zzjSSvFD(}%%Pe>H(tjb(nwpwrv!cDF<6bi_#L01jx9hE9ZxP)R*Xh}4%U4R{MmT9{ zX@X-uSbB3lvNZwoeXgDLI9gUhKCLL4pzzD8LBJ1_OL2LYJ){R{cM>c}*GqxRCs_ z9}GjwES}MpUUG#aUBI5|4M?&b_q|8L+9!gq^1RbbFmnx?U5_55J*}i`LTuCYH5)B68w@Ci>5biH50_^EpU7<<;o{L`_S7D(wcW;|K z=EM06FpXO&+}G&KWY_#dzE2PJmF&sb)n#uX<-gzOmEjcF{-_K3o{SfY$M_l(=pglj z+qGA9Pq^=D;fA8=YY{@X0OQ)e?KoQGffpwr_wXW$up{Dx5V`V}?p}Bi?mE4aAtOp8|U}A!TkjB=|PD)>& z3e*nj1_ql$$c?{AxiJn-&KKHx^B)otVr}h|Z)W2eSoLiiNG!O=j#5Od{(NIY1*haQ6W1g!(zcsr5Z{Ap`TR2M=4i zwRP}(5zS46r&|fVWt{Q0C*}70>(rU8=hB6J&;Q)Id1C82Co}!)O&c6!JI%anDZI8( z^V;6iHJ4luAi$j29~7E6%@XvFWt=2eLq^VQ#N3S<0J}N`I>E^+cUgJ*K$u%(Pb!)7 zKkv5lVpRW&dsKl(e{(Ogf`1iz6loJsUT?MgWA)hI*G?Qtt}6AZfYHufC57n zshBAEEJ@B*m>xCmA*^}C`me=`MF04+qw@+9-Y#RGJKX;=7q8!OX38YC(nFPjPj7wM zB)5`;+`qeA)MaK$YAy>a4g2}ur(Ue~Nq#>kv@O;=eAFzK3IuEh_z7appCERbm^H&d zV1(*_t9@N};(GQ$71A;{t@V|R+y*meSLKCfu`SaNUbbG@gAox7u0(&ITjuN=IWLTF z{e)u^Q~;TSI+e@afP`VR-vi$`=eJ{|&uePJQW#*h^O}~h{?33_z5>|Xa$!~;I;ilx zkpBw&nM*7`O?v_jT2J{y&spLgOH|^R+ZBq=j6m)y;0^cozt}{g_4bfsnI{*dpzBKX zi@&anl4i#YZfe^yv+!8|Q37{Kx8WlS-e-cnfz!Mou|kcbWT+;Zmwwt{nI)~OnQb);CY z#7jT7M@>T^*RSKz&sPDT`+fbQ;c4LYpuk`4MoXNP8xHyTS8a-6WMt&pq+L}0w2wdN zB_P}`2UMKiflejsGoT-B=HU1{XYkJ0;Rx6kr2|yKVVg+Xog%SYuHJ*WkrK}n<$Ro6 zsP<#MI#nPL1-xm8lF5%hQZfRrJZa1vuZN)1(&&v<=4dCfPl`AOUyZaVJU@B6Brzsw zI2cm*%lvE2V6~%>Q$x>LMh(|ppW9z)0lH91qm+AY2;PGNbGz>o)>kMhGspS?fN}Xo z?GbvDt);qPH<6px?EM!J{$wDnLoa3SQ0*$a`H@)!ZOXguevkG&EgYzn{fe*M&)h&-AH6Z)2l*rBC>>CPd(W_$$wy_~YJ%$}Uz3N;O*tg) z$(csGS!IFnY$*7SjDSZ!iprmwgwe$^#s4W87a`C1E$wpI22>|>a7)aS(a$e8zhPQT zUa^WpRt*|m@>5IH(0`rx-CY0ia>lCZ^m5ee-axf8EyRJKLnYe&YfAre;rFfKiMg#3 z9fp3P&XZr_ zs0|XMITWCaE%tsG;EcvxfbX;){ zE<(4ou_V6H=m<{fJqAJEMdh04FY52Xegd*!NBu5*JTOgUL}YzFYBY6f?@wNCi8U*M z9X*i9ZI}o@FZaKmqVooeO`pq}aUM#YJX*ho+WDpK(vw=OEqOXU8eb#mSn}MmeQw^l zeR`|dFR{ImFW}Qxzw2dd;3L8zi0{)h&x>@u!WaV83|&tGqymY5j|B|Axdo7vuBIM# z*pu+tLQo85j=udcqh&oIhuc8|JmWx!91hr%?(3c~Mtz)bb~fSBeBcMOI72OJM$qDE zOeJxjb$6#Tu)Xk|H+*+GsX3+!$xQ^O8woa$iRx0{6>z;Z8r*0QFycq9xrdCm${ACG z9Fr2E_?rV@tvGKhfuEqF<1B!qTSVR_s@}<6JtaJWIuKMp^M&k4h)ggH=3f&PtF;dl z$R30z`m*HkRB6QTs!KwsxC3?4lsS$O4?8KkpU=}n>0D&?hcx?=nsV>~n5 zN@36FMW%OJs-ER`&p}f+8&jsj%H^4fcAAs6=T#ln7Ql9HXyP_g0{44-J$yO+Sx_5S zk38JK*jF`ShR4LYK%P+=#&afbr$BUh`WC^$!npX4Peweu7LnnF`;_x3)sEsjA8ja& z?9_8~-hrKEZd#u&LM}I8uDH?-Z;;JB413j>cg1=B?^Z^yv+UX5V>|ql7ximt+_*!_8ip#}CS@ZFB zT1Ls!-@7j`Jw?Bf@!oK{)I$UyP(?3GWPj48w)a==s^|d3sMpIMyY9O5>t>C2Z#KGb z9^zJ|17h%rcN%N+W2e3nS4RwHc!vG3i?e2>HoYeaQ&d?3oKI|~Qo@I4w`J7|)1wj( zSs5U7eY4?1cx)&?SslD`4hXwS(jH6RM85`nb zXZ!;LYRL}#0>@G@rbNF?1iYKUsPRE0jY?QpD>x8{18|xu0sJhv^j%-yj&MPP<_Iwl ztfaoT3`BgdMo84Ca)NaJ0ICJl>F~R1r$Zht+Z&nl7u!P36cKzF{|kGy=(9vx)~4bT zO0EL|CBV_G+96Tbs-FZL!KWcj>6*&}aWEeS_d%8|QgQL$vsS-j+%E8KNb|-I)o1my zE`EhIr)~seG>9>Mu|CWT1X1m*e>W0>=q{i*oVUDj-W|t*1sNADm#LjrowaA0P#T~? z9R((V#>c0u3MZ|D$T|s7zH5ISqN(XOzsR7y^B1WP|A0uj&^?0duo~$ z*No4nwp}uI`V|*6w{?v~{RD*XkK||{kF|cq1?}m5YR{{)(}|F|!xFHT*W0WjV2q?Rtxk7t-AQ_d%6Vpzj1S(%VjlP;*)jr{UON^mlyL`?MFY(h zwVH6^mTUG5tQoVxdC{nc8KTxEzK9%R5C#*iv1b_2Y*Z!#;L?B#IGWda%cOSglvf5H zw^c%SJ@gtyPS8n&ywTc|0&nXmb|eapvpcslwq4&1eQy5PBGPTnM@5*9<}FACK{^_9 zk%pYxXjK2e1oa|tyxNFNwvxE9EFw7+pGfG+S$`mgvp3m1FHmK2cyY~XO=D(-Na$q7 zhRC>nze?lX(baOpweRbvhL3+=93o2?i`M7us+7Q(^g%UKh5jR{s4NdByRE%lua95s zSe^-A&#MTd2}?UXMEZ&<;rj5+IfFXfCq8ZS_yJ%Ak_F`yEVUxaDKf$@a^dAs-#+dm z%ok`_64ZTmB!J;em|N0q+%=+{)caiZ6~mw>InOEbu16%j?f-ZS?W^=^OHJi0KUkN- zBXn8xZ02ISRMgdg8T53?@zfnqv*277z$k>s#4gf3V)>_6(S^Q<+xccd69Cr>t3gdz zU2x9FI{7vxo&louaJG)*URcyJXZzsc035ajs$ZKqK1;Xvxw@)`>V-J`7LIf&MWDd2 zfM(W8@^YkvpB)-67Q2HuSnYX9+AWO7&qGXJ?IIiT-B z%qIEwB!@h_{hK##U?gYaFM8|RcGDmISBZXo(in~jmczy5ARh#V)N|{ z>^-C(&SOX2eDr^enhe-sANxzU3?B>l*`6?FPT+1TFrTw>0R+^>9jbw8%1p2(J}x1_ z3!S2`ufIVGuyx5Hu}9tDwvAPRb^2d~UL=Z01sDL$g9kdN1nVL%|*4`Voi7OgYZdN3;7Vc!zK2yKfWpNcQ|yfFifM#qHZ z6%>(*62SZ!Z$*}az-9MvkMqLwstacQ>Q$I^Pl9K|Jb2{mY3AYC1fJqJgN4GwDB!`o zhQ2;~anrFOose4&qS?NrDM2NlNTU%NpYdqjVT!xplC@3e0yLIi`7yWp2ycOA)FcK| z=liYJVw1~M0(#4#X5IFWX~r9pEkTTsQT2-evsMwYG3|7q=x1l@{T0M{b5#!FYQDdI zE|AgX+1zmv-aZIga%QNOM-KM@qG;eOaB?KTBpvW(#Jm3e!A0VqlIj7VJCe8iK`}{o zFU*wS@mWT1uQJF3Z<(Y+TIx8$LPPg!IbxQD467ZIz^da=y}#)!&gWopq22^17Znfb}e# zf#34LdX+6RI~O|#ANOtHq}+-i#!eh(r|5e+pTE+|5aI$>c^PymzThO<;syH@O>nY# zcJdJp^OrCNr_?{7wh|He=1S}h6sxpP0@4odxkzyMD;B@Z?vf`(rS zJkfwif(t#&COQ+@r-Q2Z4DKgeE+O$=ByW`j^&k-^Kg**v>iwG7XU!b#0~6-HjStQq ze8x02lu(2C0CD&RWLzX@ar~OFfaJ?bN86}R^1m;vK%-UYNlLaXiZT2dRG$o}(TLwa z*l@gZ2MzZMI;a8JEN&c@%7w^vwbb(Wy}DdP?tzZjvh$EA=y3jh^O}Us zEZhb4E-0ChUYIrT>@b6Kj;w%uVuCuCI|@{w%U@$-S-`TW6dxfWA>g;`e_PR1(kW!- zyxyN?aelOEyx5Qr))#=QebGs}GGH4EjT=)k0Fw~CqSuq$^Y@74GqiIN z!lcJ6yIz@WyI=A9LX{poleV4@EL6HEcZPi+PUgy1ZEKg-zDlKbb#0_%L2Q_+=48Ql;OOlS92B(swWO{C&YL(ORv&e^rQM&McXllr zzOT{H=($!7nC)Wt;oe>}rUfwCbi0}rqji#!{PKAZ*35^2yv#Y9V8yvzP*5-|A#rin zvba$*{uJDjU@rEhbH0D4xeCm@RkgkQ39MHR+|?5S(}`u`N+q4HA4+W8+&N&t9i~{| z)#0WH89^S6#+%y3KQc*N08~H?d=Ph!0FJ~%03FC(>pz{c3V|)UD{uV zaPy}fOptz*fOp4p5@2d#9LVe?J>M)1^(e9*`5Y|%eOWsFMA~-2=O{bSitq;I{) z#+nt)W9~<9*ZS_JW{VJnE(f#=rQ>pNhD2lLx?s0ci70Qq1SG6Z0_<^CD7E~*jPs-( zjh|lY+}yujbI^cp90USgzfNkq6udflKRT+dSoBJvZ?d`j4*yiSb@(WlA6!^?36Zq1 zu}LfeMFlJoZ%N=Xn(5ZMPRq5Ovo|rr$(x(wb;gz!>xewidb&D=*TMtlEVk0#gM9@K zK3t@;iXF1gHktYitB)tH;+gp|+f}B5#SRcOj-Bx=B{(2iP-$lPE&l3^I5=fvc1Q0z z1DxQh94I6{J|0|?34z2VCNAeDnjV~1cC=3gEN7d!6VU9)9=v^Ib5}`K_*wx~#0sX##FhmY>RndIeTU z=XV{?aRj)#nC`lKbR_TfA<%XPeFSE=h&cl)Bj>){-GKLouPg)Qd@e}8oZZ64#)5#$ zf1EMG;1U(ISJU4GF)SsWb<+&Aw1s}6PYtT<;*Y>AO4!=kD*)2c^7h8i(9m0O(E~bA z?2zRosUFIY<*Zxj?@HclD}>fO1S`#(?b||$1p_Yx!M;K#=d!_)`;Wvda#YNJ`8j^w zsJ^I^nj<~QVXiT0U{ASa^y9+c67Pc5U$+@|kP6S7lkev)f3X+6sb}_|dZJF}Qs`JB kvmImWe*nwM2Ihu%MV-OXI~njV6Ce;pSyh>0sh98m7gCRw-~a#s delta 16418 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 diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index 95a1a902aa0b8bbef67d3e2313dd1d9fd168ab4a..568fcce444332796dbb266e4ed105a9358779e65 100644 GIT binary patch delta 8781 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 delta 7199 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 Date: Tue, 25 Oct 2016 21:49:17 +0200 Subject: [PATCH 15/30] Fix SNPC runtimes --- .../mob/living/carbon/human/interactive/interactive.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/human/interactive/interactive.dm b/code/modules/mob/living/carbon/human/interactive/interactive.dm index 1862062e4cf..2dfc4f8d24e 100644 --- a/code/modules/mob/living/carbon/human/interactive/interactive.dm +++ b/code/modules/mob/living/carbon/human/interactive/interactive.dm @@ -167,7 +167,7 @@ /client/proc/customiseSNPC(mob/living/carbon/human/interactive/T in npc_master.botPool_l) set name = "Customize SNPC" - set desc = "Customise the SNPC" + set desc = "Customize the SNPC" set category = "Debug" if(!holder) @@ -403,7 +403,7 @@ if(!hud_used) hud_used = new /datum/hud/human(src) -/mob/living/carbon/human/interactive/New() +/mob/living/carbon/human/interactive/New(var/new_loc, var/new_species = null) ..() snpc_list += src @@ -916,7 +916,7 @@ TARGET = null return 1 - if(!(get_turf(src) in validHome)) + if(!(get_turf(src) in validHome) && validHome.len) tryWalk(pick(get_area_turfs(job2area(myjob)))) return 1 return 0 From 7ca1330749605122166f020e42d46b56b0d42e3d Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 25 Oct 2016 16:46:41 -0400 Subject: [PATCH 16/30] further tweaks --- code/datums/recipe.dm | 12 +- code/modules/food_and_drinks/drinks/drinks.dm | 16 +-- .../food_and_drinks/drinks/drinks/bottle.dm | 12 +- .../food_and_drinks/drinks/drinks/cans.dm | 4 +- .../modules/food_and_drinks/food/condiment.dm | 4 +- .../food_and_drinks/food/customizables.dm | 39 ++----- code/modules/food_and_drinks/food/snacks.dm | 76 ++++++------ .../kitchen_machinery/gibber.dm | 16 +-- .../kitchen_machinery/icecream_vat_2.dm | 20 ++-- .../kitchen_machinery/juicer.dm | 18 +-- .../kitchen_machinery/kitchen_machine.dm | 108 +++++++++--------- .../kitchen_machinery/monkeyrecycler.dm | 12 +- .../food_and_drinks/kitchen_machinery/oven.dm | 4 +- .../kitchen_machinery/processor.dm | 24 ++-- .../kitchen_machinery/smartfridge.dm | 20 ++-- .../food_and_drinks/recipes/recipes_candy.dm | 2 +- .../food_and_drinks/recipes/recipes_grill.dm | 2 +- .../recipes/recipes_microwave.dm | 27 +++-- .../food_and_drinks/recipes/recipes_oven.dm | 34 +++--- 19 files changed, 218 insertions(+), 232 deletions(-) diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm index 645af5e8aea..2e953f3ec91 100644 --- a/code/datums/recipe.dm +++ b/code/datums/recipe.dm @@ -42,7 +42,7 @@ var/byproduct // example: = /obj/item/weapon/kitchen/mould // byproduct to return, such as a mould or trash -/datum/recipe/proc/check_reagents(var/datum/reagents/avail_reagents) //1=precisely, 0=insufficiently, -1=superfluous +/datum/recipe/proc/check_reagents(datum/reagents/avail_reagents) //1=precisely, 0=insufficiently, -1=superfluous . = 1 for(var/r_r in reagents) var/aval_r_amnt = avail_reagents.get_reagent_amount(r_r) @@ -55,7 +55,7 @@ return -1 return . -/datum/recipe/proc/check_fruit(var/obj/container) +/datum/recipe/proc/check_fruit(obj/container) . = 1 if(fruit && fruit.len) var/list/checklist = list() @@ -74,7 +74,7 @@ break return . -/datum/recipe/proc/check_items(var/obj/container as obj) +/datum/recipe/proc/check_items(obj/container) . = 1 if(items && items.len) var/list/checklist = list() @@ -96,7 +96,7 @@ return . //general version -/datum/recipe/proc/make(var/obj/container as obj) +/datum/recipe/proc/make(obj/container) var/obj/result_obj = new result(container) for(var/obj/O in (container.contents-result_obj)) O.reagents.trans_to(result_obj, O.reagents.total_volume) @@ -106,7 +106,7 @@ return result_obj // food-related -/datum/recipe/proc/make_food(var/obj/container as obj) +/datum/recipe/proc/make_food(obj/container) var/obj/result_obj = new result(container) for(var/obj/O in (container.contents-result_obj)) if(O.reagents) @@ -118,7 +118,7 @@ score_meals++ return result_obj -/proc/select_recipe(var/list/datum/recipe/avaiable_recipes, var/obj/obj as obj, var/exact = 1 as num) +/proc/select_recipe(list/datum/recipe/avaiable_recipes, obj/obj, exact = 1) if(!exact) exact = -1 var/list/datum/recipe/possible_recipes = new diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index 15ce27b7d5c..0814bf988f4 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -81,7 +81,7 @@ refill = reagents.get_master_reagent_id() refillName = reagents.get_master_reagent_name() - var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) + var/trans = reagents.trans_to(target, amount_per_transfer_from_this) to_chat(user, " 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 @@ -102,22 +102,22 @@ if(istype(I, /obj/item/clothing/mask/cigarette)) //ciggies are weird return if(is_hot(I)) - if(src.reagents) - src.reagents.chem_temp += 15 + if(reagents) + reagents.chem_temp += 15 to_chat(user, "You heat [src] with [I].") - src.reagents.handle_reactions() + reagents.handle_reactions() /obj/item/weapon/reagent_containers/food/drinks/examine(mob/user) if(!..(user, 1)) return - if(!reagents || reagents.total_volume==0) + if(!reagents || reagents.total_volume == 0) to_chat(user, " \The [src] is empty!") - else if(reagents.total_volume<=src.volume/4) + else if(reagents.total_volume <= volume/4) to_chat(user, " \The [src] is almost empty!") - else if(reagents.total_volume<=src.volume*0.66) + else if(reagents.total_volume <= volume*0.66) to_chat(user, " \The [src] is half full!")// We're all optimistic, right?! - else if(reagents.total_volume<=src.volume*0.90) + else if(reagents.total_volume <= volume*0.90) to_chat(user, " \The [src] is almost full!") else to_chat(user, " \The [src] is full!") diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index 8928c5e8c57..7ee7509d8f1 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -22,9 +22,9 @@ else user.drop_item() user.put_in_active_hand(B) - B.icon_state = src.icon_state + B.icon_state = icon_state - var/icon/I = new('icons/obj/drinks.dmi', src.icon_state) + var/icon/I = new('icons/obj/drinks.dmi', icon_state) I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1) I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0)) B.icon = I @@ -99,11 +99,11 @@ //Display an attack message. if(target != user) - target.visible_message("[user] has hit [target][head_attack_message] with a bottle of [src.name]!", \ - "[user] has hit [target][head_attack_message] with a bottle of [src.name]!") + target.visible_message("[user] has hit [target][head_attack_message] with a bottle of [name]!", \ + "[user] has hit [target][head_attack_message] with a bottle of [name]!") else - user.visible_message("[target] hits \himself with a bottle of [src.name][head_attack_message]!", \ - "[target] hits \himself with a bottle of [src.name][head_attack_message]!") + user.visible_message("[target] hits \himself with a bottle of [name][head_attack_message]!", \ + "[target] hits \himself with a bottle of [name][head_attack_message]!") //Attack logs add_logs(user, target, "attacked", src) diff --git a/code/modules/food_and_drinks/drinks/drinks/cans.dm b/code/modules/food_and_drinks/drinks/drinks/cans.dm index 6d72ec2221c..89deed5dedd 100644 --- a/code/modules/food_and_drinks/drinks/drinks/cans.dm +++ b/code/modules/food_and_drinks/drinks/drinks/cans.dm @@ -9,7 +9,7 @@ /obj/item/weapon/reagent_containers/food/drinks/cans/attack_self(mob/user) if(canopened == 0) - playsound(src.loc,'sound/effects/canopen.ogg', rand(10,50), 1) + playsound(loc,'sound/effects/canopen.ogg', rand(10,50), 1) to_chat(user, "You open the drink with an audible pop!") canopened = 1 flags |= OPENCONTAINER @@ -32,7 +32,7 @@ if(canopened == 0) to_chat(user, "You need to open the drink!") return - else if(M == user && !src.reagents.total_volume && user.a_intent == "harm" && user.zone_sel.selecting == "head") + else if(M == user && !reagents.total_volume && user.a_intent == "harm" && user.zone_sel.selecting == "head") user.visible_message("[user] crushes ["\the [src]"] on \his forehead!", "You crush \the [src] on your forehead.") crush(user) return diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm index 931e84b892b..d7ffca96843 100644 --- a/code/modules/food_and_drinks/food/condiment.dm +++ b/code/modules/food_and_drinks/food/condiment.dm @@ -82,7 +82,7 @@ if(target.reagents.total_volume >= target.reagents.maximum_volume) to_chat(user, "you can't add anymore to [target]!") return - var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) + var/trans = reagents.trans_to(target, amount_per_transfer_from_this) to_chat(user, "You transfer [trans] units of the condiment to [target].") /obj/item/weapon/reagent_containers/food/condiment/on_reagent_change() @@ -223,7 +223,7 @@ return else to_chat(user, "You tear open [src] above [target] and the condiments drip onto it.") - src.reagents.trans_to(target, amount_per_transfer_from_this) + reagents.trans_to(target, amount_per_transfer_from_this) qdel(src) /obj/item/weapon/reagent_containers/food/condiment/pack/on_reagent_change() diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm index 66aee4b2616..77e3f22a1e8 100644 --- a/code/modules/food_and_drinks/food/customizables.dm +++ b/code/modules/food_and_drinks/food/customizables.dm @@ -1,4 +1,4 @@ -/obj/item/weapon/reagent_containers/food/snacks/breadslice/attackby(obj/item/W as obj, mob/user as mob, params) +/obj/item/weapon/reagent_containers/food/snacks/breadslice/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/weapon/reagent_containers/food/snacks) && !(W.flags & NODROP)) var/obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich/S = new(get_turf(user)) S.attackby(W,user, params) @@ -6,13 +6,13 @@ else ..() -/obj/item/weapon/reagent_containers/food/snacks/bun/attackby(obj/item/W as obj, mob/user as mob, params) +/obj/item/weapon/reagent_containers/food/snacks/bun/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/weapon/reagent_containers/food/snacks) && !(W.flags & NODROP)) var/obj/item/weapon/reagent_containers/food/snacks/customizable/burger/S = new(get_turf(user)) S.attackby(W,user, params) qdel(src) -/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough/attackby(obj/item/W as obj, mob/user as mob, params) +/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/weapon/reagent_containers/food/snacks) && !(W.flags & NODROP)) var/obj/item/weapon/reagent_containers/food/snacks/customizable/pizza/S = new(get_turf(user)) S.attackby(W,user, params) @@ -21,7 +21,7 @@ ..() -/obj/item/weapon/reagent_containers/food/snacks/boiledspagetti/attackby(obj/item/W as obj, mob/user as mob, params) +/obj/item/weapon/reagent_containers/food/snacks/boiledspagetti/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/weapon/reagent_containers/food/snacks) && !(W.flags & NODROP)) var/obj/item/weapon/reagent_containers/food/snacks/customizable/pasta/S = new(get_turf(user)) S.attackby(W,user, params) @@ -30,7 +30,7 @@ ..() -/obj/item/trash/plate/attackby(obj/item/W as obj, mob/user as mob, params) +/obj/item/trash/plate/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/weapon/reagent_containers/food/snacks) && !(W.flags & NODROP)) var/obj/item/weapon/reagent_containers/food/snacks/customizable/fullycustom/S = new(get_turf(user)) S.attackby(W,user, params) @@ -44,7 +44,7 @@ icon = 'icons/obj/food/food.dmi' icon_state = "soup" -/obj/item/trash/bowl/attackby(obj/item/W as obj, mob/user as mob, params) +/obj/item/trash/bowl/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/weapon/reagent_containers/food/snacks) && !(W.flags & NODROP)) var/obj/item/weapon/reagent_containers/food/snacks/customizable/soup/S = new(get_turf(user)) @@ -54,7 +54,6 @@ ..() /obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich - /obj/item/weapon/reagent_containers/food/snacks/customizable name = "sandwich" desc = "A sandwich! A timeless classic." icon_state = "breadslice" @@ -318,7 +317,7 @@ toptype = new /obj/item/weapon/reagent_containers/food/snacks/bun() /obj/item/weapon/reagent_containers/food/snacks/customizable/attackby(obj/item/I, mob/user, params) - if(src.contents.len > sandwich_limit) + if(contents.len > sandwich_limit) to_chat(user, "If you put anything else in or on [src] it's going to make a mess.") return if(!istype(I, /obj/item/weapon/reagent_containers/food/snacks)) @@ -346,7 +345,7 @@ for(var/obj/item/O in ingredients) i++ if(!fullycustom) - var/image/I = new(src.icon, "[baseicon]_filling") + var/image/I = new(icon, "[baseicon]_filling") if(istype(O, /obj/item/weapon/reagent_containers/food/snacks)) var/obj/item/weapon/reagent_containers/food/snacks/food = O if(!food.filling_color == "#FFFFFF") @@ -367,7 +366,7 @@ overlays += O.overlays if(top) - var/image/T = new(src.icon, "[baseicon]_top") + var/image/T = new(icon, "[baseicon]_top") T.pixel_x = pick(list(-1,0,1)) T.pixel_y = (ingredients.len * 2)+1 overlays += T @@ -383,24 +382,6 @@ to_chat(user, " You think you can see [whatsinside] in there.") -/* -/obj/item/weapon/reagent_containers/food/snacks/customizable/attack(mob/M as mob, mob/user as mob, def_zone) //SNOOOOOOOWFLAAAAAAAAAAAAAAAAAKES - - var/obj/item/shard - for(var/obj/item/O in contents) - if(istype(O,/obj/item/weapon/shard)) - shard = O - break - - var/mob/living/H - if(istype(M,/mob/living)) - H = M - - if(H && shard && M == user) //This needs a check for feeding the food to other people, but that could be abusable. - to_chat(H, "\red You lacerate your mouth on a [shard.name] in the sandwich!") - H.adjustBruteLoss(5) //TODO: Target head if human. - ..() -*/ /obj/item/weapon/reagent_containers/food/snacks/customizable/proc/newname() var/unsorteditems[0] @@ -482,7 +463,7 @@ sendback = "[pick(list("absurd","colossal","enormous","ridiculous","massive","oversized","cardiac-arresting","pipe-clogging","edible but sickening","sickening","gargantuan","mega","belly-burster","chest-burster"))] [basename]" return sendback -/obj/item/weapon/reagent_containers/food/snacks/customizable/proc/sortlist(var/list/unsorted, var/highest) +/obj/item/weapon/reagent_containers/food/snacks/customizable/proc/sortlist(list/unsorted, highest) var/sorted[0] for(var/i = 1, i<= highest, i++) for(var/it in unsorted) diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index d11de1b06df..2bc089abaf1 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -63,11 +63,11 @@ if(bitecount==0) return else if(bitecount==1) - to_chat(user, "\blue \The [src] was bitten by someone!") + to_chat(user, "[src] was bitten by someone!") else if(bitecount<=3) - to_chat(user, "\blue \The [src] was bitten [bitecount] times!") + to_chat(user, "[src] was bitten [bitecount] times!") else - to_chat(user, "\blue \The [src] was bitten multiple times!") + to_chat(user, "[src] was bitten multiple times!") /obj/item/weapon/reagent_containers/food/snacks/attackby(obj/item/weapon/W, mob/user, params) @@ -92,10 +92,10 @@ "You scoop up some [src] with \the [U]!" \ ) - src.bitecount++ + bitecount++ U.overlays.Cut() var/image/I = new(U.icon, "loadedfood") - I.color = src.filling_color + I.color = filling_color U.overlays += I var/obj/item/weapon/reagent_containers/food/snacks/collected = new type @@ -135,7 +135,7 @@ else if(W.w_class <= 2 && istype(src,/obj/item/weapon/reagent_containers/food/snacks/sliceable)) if(!iscarbon(user)) return 1 - to_chat(user, "\red You slip [W] inside [src].") + to_chat(user, "You slip [W] inside [src].") user.unEquip(W) if((user.client && user.s_active != src)) user.client.screen -= W @@ -146,28 +146,28 @@ 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/storage/bag/tray) in src.loc) \ + !isturf(loc) || \ + !(locate(/obj/structure/table) in loc) && \ + !(locate(/obj/machinery/optable) in loc) && \ + !(locate(/obj/item/weapon/storage/bag/tray) in loc) \ ) - to_chat(user, "\red You cannot slice [src] here! You need a table or at least a tray to do it.") + to_chat(user, "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]!" \ + "[user] slices [src]!", \ + "You slice [src]!" \ ) else user.visible_message( \ - "\blue [user] crudely slices \the [src] with [W]!", \ - "\blue You crudely slice \the [src] with your [W]!" \ + "[user] crudely slices [src] with [W]!", \ + "You crudely slice [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) + var/obj/slice = new slice_path (loc) reagents.trans_to(slice,reagents_per_slice) qdel(src) @@ -184,19 +184,19 @@ M.changeNext_move(CLICK_CD_MELEE) if(iscorgi(M)) if(bitecount >= 4) - M.visible_message("[M] [pick("burps from enjoyment", "yaps for more", "woofs twice", "looks at the area where \the [src] was")].","You swallow up the last part of \the [src].") - playsound(src.loc,'sound/items/eatfood.ogg', rand(10,50), 1) + M.visible_message("[M] [pick("burps from enjoyment", "yaps for more", "woofs twice", "looks at the area where [src] was")].","You swallow up the last part of [src].") + playsound(loc,'sound/items/eatfood.ogg', rand(10,50), 1) var/mob/living/simple_animal/pet/corgi/C = M C.adjustBruteLoss(-5) C.adjustFireLoss(-5) qdel(src) else - M.visible_message("[M] takes a bite of \the [src].","You take a bite of \the [src].") - playsound(src.loc,'sound/items/eatfood.ogg', rand(10,50), 1) + M.visible_message("[M] takes a bite of [src].","You take a bite of [src].") + playsound(loc,'sound/items/eatfood.ogg', rand(10,50), 1) bitecount++ else if(ismouse(M)) var/mob/living/simple_animal/mouse/N = M - to_chat(N, text("\blue You nibble away at [src].")) + to_chat(N, text("You nibble away at [src].")) if(prob(50)) N.visible_message("[N] nibbles away at [src].", "") //N.emote("nibbles away at the [src]") @@ -752,8 +752,8 @@ /obj/item/weapon/reagent_containers/food/snacks/pie/throw_impact(atom/hit_atom) ..() - new/obj/effect/decal/cleanable/pie_smudge(src.loc) - src.visible_message("\red [src.name] splats.","\red You hear a splat.") + new/obj/effect/decal/cleanable/pie_smudge(loc) + visible_message("[src] splats.","You hear a splat.") qdel(src) /obj/item/weapon/reagent_containers/food/snacks/berryclafoutis @@ -902,7 +902,7 @@ /obj/item/weapon/reagent_containers/food/snacks/popcorn/On_Consume(mob/M, mob/user) if(prob(unpopped)) //lol ...what's the point? - to_chat(user, "\red You bite down on an un-popped kernel!") + to_chat(user, "You bite down on an un-popped kernel!") unpopped = max(0, unpopped-1) ..() @@ -1728,9 +1728,9 @@ if(istype(W,/obj/item/weapon/kitchen/rollingpin)) user.visible_message( \ "[user] flattens the dough with the rolling pin!", \ - "\blue You flatten the dough with your rolling pin!" \ + "You flatten the dough with your rolling pin!" \ ) - new /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough(src.loc) + new /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough(loc) qdel(src) /////////////////////////////////////////////////Sliceable//////////////////////////////////////// @@ -2124,7 +2124,7 @@ "[user] cuts the raw cutlet with the knife!", \ "You cut the raw cutlet with your knife!" \ ) - new /obj/item/weapon/reagent_containers/food/snacks/raw_bacon(src.loc) + new /obj/item/weapon/reagent_containers/food/snacks/raw_bacon(loc) qdel(src) @@ -2264,8 +2264,8 @@ /obj/item/pizzabox/attack_hand(mob/user) if(open && pizza) user.put_in_hands(pizza) - to_chat(user, "\red You take the [src.pizza] out of the [src].") - src.pizza = null + to_chat(user, "You take the [pizza] out of the [src].") + pizza = null update_icon() return @@ -2278,7 +2278,7 @@ boxes -= box user.put_in_hands( box ) - to_chat(user, "\red You remove the topmost [src] from your hand.") + to_chat(user, "You remove the topmost [src] from your hand.") box.update_icon() update_icon() return @@ -2311,16 +2311,16 @@ box.loc = src box.boxes = list() // Clear the box boxes so we don't have boxes inside boxes. - Xzibit - src.boxes.Add( boxestoadd ) + boxes.Add( boxestoadd ) box.update_icon() update_icon() - to_chat(user, "\red You put the [box] ontop of the [src]!") + to_chat(user, "You put the [box] ontop of the [src]!") else - to_chat(user, "\red The stack is too high!") + to_chat(user, "The stack is too high!") else - to_chat(user, "\red Close the [box] first!") + to_chat(user, "Close the [box] first!") return @@ -2329,18 +2329,18 @@ if(open) user.drop_item() I.loc = src - src.pizza = I + pizza = I update_icon() - to_chat(user, "\red You put the [I] in the [src]!") + to_chat(user, "You put the [I] in the [src]!") else - to_chat(user, "\red You try to push the [I] through the lid but it doesn't work!") + to_chat(user, "You try to push the [I] through the lid but it doesn't work!") return if(istype(I, /obj/item/weapon/pen/)) - if( src.open ) + if(open) return var/t = input("Enter what you want to add to the tag:", "Write", null, null) as text diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index b71bb0be2d4..b95f85bf03b 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -126,7 +126,7 @@ return user.visible_message("[user] starts to put [victim] into the gibber!") - src.add_fingerprint(user) + add_fingerprint(user) if(do_after(user, 30, target = victim) && user.Adjacent(src) && victim.Adjacent(user) && !occupant) user.visible_message("[user] stuffs [victim] into the gibber!") @@ -155,7 +155,7 @@ return for(var/obj/O in src) - O.loc = src.loc + O.loc = loc occupant.forceMove(get_turf(src)) occupant = null @@ -212,11 +212,11 @@ /obj/machinery/gibber/proc/startgibbing(var/mob/user, var/UserOverride=0) if(!istype(user) && !UserOverride) - log_debug("Some shit just went down with the gibber at X[x], Y[y], Z[z] with an invalid user. (JMP)") + log_debug("Some shit just went down with the gibber at X[x], Y[y], Z[z] with an invalid user. (JMP)") return if(UserOverride) - msg_admin_attack("[key_name_admin(occupant)] was gibbed by an autogibber (\the [src]) (JMP)") + msg_admin_attack("[key_name_admin(occupant)] was gibbed by an autogibber (\the [src]) (JMP)") if(operating) return @@ -236,7 +236,7 @@ var/slab_name = occupant.name var/slab_count = 3 var/slab_type = /obj/item/weapon/reagent_containers/food/snacks/meat/human //gibber can only gib humans on paracode, no need to check meat type - var/slab_nutrition = src.occupant.nutrition / 15 + var/slab_nutrition = occupant.nutrition / 15 slab_nutrition /= slab_count @@ -367,7 +367,7 @@ if(O.flags & NODROP) qdel(O) //they are already dead by now H.unEquip(O) - O.loc = src.loc + O.loc = loc O.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(1,5),15) sleep(1) @@ -375,7 +375,7 @@ if(C.flags & NODROP) qdel(C) H.unEquip(C) - C.loc = src.loc + C.loc = loc C.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(1,5),15) sleep(1) @@ -385,7 +385,7 @@ var/spats = 0 //keeps track of how many items get spit out. Don't show a message if none are found. for(var/obj/O in src) if(istype(O)) - O.loc = src.loc + O.loc = loc O.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(1,5),15) spats++ sleep(1) diff --git a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat_2.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat_2.dm index f0fb01efad2..ac79371f06e 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat_2.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat_2.dm @@ -99,7 +99,7 @@ var/list/ingredients_source = list( if(ingredients[ICECREAM_VANILLA] > 0) var/flavour_name = get_icecream_flavour_string(dispense_flavour) if(dispense_flavour < 11 && ingredients[dispense_flavour] > 0) - src.visible_message("[bicon(src)] [user] scoops delicious [flavour_name] flavoured icecream into [I].") + visible_message("[bicon(src)] [user] scoops delicious [flavour_name] flavoured icecream into [I].") ingredients[dispense_flavour] -= 1 ingredients[ICECREAM_VANILLA] -= 1 @@ -127,7 +127,7 @@ var/list/ingredients_source = list( else var/obj/item/weapon/reagent_containers/R = O if(R.reagents) - src.visible_message("[user] has emptied all of [R] into [src].") + visible_message("[user] has emptied all of [R] into [src].") for(var/datum/reagent/current_reagent in R.reagents.reagent_list) if(ingredients_source[current_reagent.id]) add(ingredients_source[current_reagent.id], current_reagent.volume / 2) @@ -151,7 +151,7 @@ var/list/ingredients_source = list( ingredients[INGR_FLOUR] -= amount ingredients[INGR_SUGAR] -= amount ingredients[CONE_WAFFLE] += amount - src.visible_message("[user] cooks up some waffle cones.") + visible_message("[user] cooks up some waffle cones.") else to_chat(user, "You require sugar and flour to make waffle cones.") if(CONE_CHOC) @@ -160,7 +160,7 @@ var/list/ingredients_source = list( ingredients[CONE_WAFFLE] -= amount ingredients[FLAVOUR_CHOCOLATE] -= amount ingredients[CONE_CHOC] += amount - src.visible_message("[user] cooks up some chocolate cones.") + visible_message("[user] cooks up some chocolate cones.") else to_chat(user, "You require waffle cones and chocolate flavouring to make chocolate cones.") if(ICECREAM_VANILLA) @@ -169,7 +169,7 @@ var/list/ingredients_source = list( ingredients[INGR_ICE] -= amount ingredients[INGR_MILK] -= amount ingredients[ICECREAM_VANILLA] += amount - src.visible_message("[user] whips up some vanilla icecream.") + visible_message("[user] whips up some vanilla icecream.") else to_chat(user, "You require milk and ice to make vanilla icecream.") updateDialog() @@ -179,7 +179,7 @@ var/list/ingredients_source = list( return if(href_list["dispense"]) dispense_flavour = text2num(href_list["dispense"]) - src.visible_message("\blue[usr] sets [src] to dispense [get_icecream_flavour_string(dispense_flavour)] flavoured icecream.") + visible_message("\blue[usr] sets [src] to dispense [get_icecream_flavour_string(dispense_flavour)] flavoured icecream.") if(href_list["cone"]) var/dispense_cone = text2num(href_list["cone"]) @@ -187,11 +187,11 @@ var/list/ingredients_source = list( var/cone_name = get_icecream_flavour_string(dispense_cone) if(ingredients[dispense_cone] >= 1) ingredients[dispense_cone] -= 1 - var/obj/item/weapon/reagent_containers/food/snacks/icecream/I = new(src.loc) + var/obj/item/weapon/reagent_containers/food/snacks/icecream/I = new(loc) I.cone_type = cone_name I.icon_state = "icecream_cone_[cone_name]" I.desc = "Delicious [cone_name] cone, but no ice cream." - src.visible_message("[usr] dispenses a crunchy [cone_name] cone from [src].") + visible_message("[usr] dispenses a crunchy [cone_name] cone from [src].") else to_chat(usr, "There are no [cone_name] cones left!") updateDialog() @@ -202,7 +202,7 @@ var/list/ingredients_source = list( if(href_list["eject"]) if(held_container) - held_container.forceMove(src.loc) + held_container.forceMove(loc) held_container = null updateDialog() @@ -231,7 +231,7 @@ var/list/ingredients_source = list( /obj/item/weapon/reagent_containers/food/snacks/icecream/proc/add_ice_cream(var/flavour) var/flavour_name = get_icecream_flavour_string(flavour) name = "[flavour_name] icecream" - src.overlays += "icecream_[flavour_name]" + overlays += "icecream_[flavour_name]" desc = "Delicious [cone_type] cone with a dollop of [flavour_name] ice cream." ice_creamed = 1 diff --git a/code/modules/food_and_drinks/kitchen_machinery/juicer.dm b/code/modules/food_and_drinks/kitchen_machinery/juicer.dm index e1cb054690f..ba791d3f28f 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/juicer.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/juicer.dm @@ -46,9 +46,9 @@ return 0 O.forceMove(src) beaker = O - src.verbs += /obj/machinery/juicer/verb/detach + verbs += /obj/machinery/juicer/verb/detach update_icon() - src.updateUsrDialog() + updateUsrDialog() return 0 if(!is_type_in_list(O, allowed_items)) to_chat(user, "It doesn't look like that contains any juice.") @@ -57,7 +57,7 @@ to_chat(user, "\the [O] is stuck to your hand, you cannot put it in \the [src]") return 0 O.forceMove(src) - src.updateUsrDialog() + updateUsrDialog() return 0 /obj/machinery/juicer/attack_ai(mob/user as mob) @@ -74,7 +74,7 @@ var/beaker_contents = "" for(var/i in allowed_items) - for(var/obj/item/O in src.contents) + for(var/obj/item/O in contents) if(!istype(O,i)) continue processing_chamber+= "some [O]
" @@ -119,7 +119,7 @@ if("detach") detach() - src.updateUsrDialog() + updateUsrDialog() return /obj/machinery/juicer/verb/detach() @@ -130,8 +130,8 @@ return if(!beaker) return - src.verbs -= /obj/machinery/juicer/verb/detach - beaker.forceMove(src.loc) + verbs -= /obj/machinery/juicer/verb/detach + beaker.forceMove(loc) beaker = null update_icon() @@ -159,8 +159,8 @@ return if(!beaker || beaker.reagents.total_volume >= beaker.reagents.maximum_volume) return - playsound(src.loc, 'sound/machines/juicer.ogg', 50, 1) - for(var/obj/item/weapon/reagent_containers/food/snacks/O in src.contents) + playsound(loc, 'sound/machines/juicer.ogg', 50, 1) + for(var/obj/item/weapon/reagent_containers/food/snacks/O in contents) var/r_id = get_juice_id(O) beaker.reagents.add_reagent(r_id,get_juice_amount(O)) qdel(O) diff --git a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm index 648f228bb54..ed9e1b2117b 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm @@ -77,8 +77,8 @@ default_deconstruction_crowbar(O) - if(src.broken > 0) - if(src.broken == 2 && istype(O, /obj/item/weapon/screwdriver)) // If it's broken and they're using a screwdriver + if(broken > 0) + if(broken == 2 && istype(O, /obj/item/weapon/screwdriver)) // If it's broken and they're using a screwdriver user.visible_message( \ "[user] starts to fix part of \the [src].", \ "You start to fix part of \the [src]." \ @@ -88,8 +88,8 @@ "[user] fixes part of \the [src].", \ "You have fixed part of \the [src]." \ ) - src.broken = 1 // Fix it a bit - else if(src.broken == 1 && istype(O, /obj/item/weapon/wrench)) // If it's broken and they're doing the wrench + broken = 1 // Fix it a bit + else if(broken == 1 && istype(O, /obj/item/weapon/wrench)) // If it's broken and they're doing the wrench user.visible_message( \ "[user] starts to fix part of \the [src].", \ "You start to fix part of \the [src]." \ @@ -99,14 +99,14 @@ "[user] fixes \the [src].", \ "You have fixed \the [src]." \ ) - src.icon_state = off_icon - src.broken = 0 // Fix it! - src.dirty = 0 // just to be sure - src.flags = OPENCONTAINER + icon_state = off_icon + broken = 0 // Fix it! + dirty = 0 // just to be sure + flags = OPENCONTAINER else to_chat(user, "It's broken!") return 1 - else if(src.dirty==100) // The machine is all dirty so can't be used! + else if(dirty==100) // The machine is all dirty so can't be used! if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them user.visible_message( \ "[user] starts to clean \the [src].", \ @@ -117,10 +117,10 @@ "[user] has cleaned \the [src].", \ "You have cleaned \the [src]." \ ) - src.dirty = 0 // It's clean! - src.broken = 0 // just to be sure - src.icon_state = off_icon - src.flags = OPENCONTAINER + dirty = 0 // It's clean! + broken = 0 // just to be sure + icon_state = off_icon + flags = OPENCONTAINER else //Otherwise bad luck!! to_chat(user, "It's dirty!") return 1 @@ -161,7 +161,7 @@ else to_chat(user, "You have no idea what you can cook with this [O].") return 1 - src.updateUsrDialog() + updateUsrDialog() /obj/machinery/kitchen_machine/attack_ai(mob/user as mob) return 0 @@ -178,11 +178,11 @@ if(panel_open || !anchored) return var/dat = "" - if(src.broken > 0) + if(broken > 0) dat = {"Bzzzzttttt"} - else if(src.operating) - dat = {"[pick(src.cook_verbs)] in progress!
Please wait...!
"} - else if(src.dirty==100) + else if(operating) + dat = {"[pick(cook_verbs)] in progress!
Please wait...!
"} + else if(dirty==100) dat = {"This [src] is dirty!
Please clean it before use!
"} else var/list/items_counts = new @@ -237,7 +237,7 @@ var/datum/browser/popup = new(user, name, name, 400, 400) popup.set_content(dat) popup.open(0) - onclose(user, "[src.name]") + onclose(user, "[name]") return @@ -298,7 +298,7 @@ byproduct = recipe.get_byproduct() stop() if(cooked) - cooked.forceMove(src.loc) + cooked.forceMove(loc) for(var/i=1,i\The [src] turns on.", "You hear \a [src].") - src.operating = 1 - src.icon_state = on_icon - src.updateUsrDialog() + visible_message("\The [src] turns on.", "You hear \a [src].") + operating = 1 + icon_state = on_icon + updateUsrDialog() /obj/machinery/kitchen_machine/proc/abort() - src.operating = 0 // Turn it off again aferwards - src.icon_state = off_icon - src.updateUsrDialog() + operating = 0 // Turn it off again aferwards + icon_state = off_icon + updateUsrDialog() /obj/machinery/kitchen_machine/proc/stop() - playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) - src.operating = 0 // Turn it off again aferwards - src.icon_state = off_icon - src.updateUsrDialog() + playsound(loc, 'sound/machines/ding.ogg', 50, 1) + operating = 0 // Turn it off again aferwards + icon_state = off_icon + updateUsrDialog() /obj/machinery/kitchen_machine/proc/dispose() for(var/obj/O in contents) - O.forceMove(src.loc) - if(src.reagents.total_volume) - src.dirty++ - src.reagents.clear_reagents() + O.forceMove(loc) + if(reagents.total_volume) + dirty++ + reagents.clear_reagents() to_chat(usr, "You dispose of \the [src]'s contents.") - src.updateUsrDialog() + updateUsrDialog() /obj/machinery/kitchen_machine/proc/muck_start() - playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) // Play a splat sound - src.icon_state = dirty_icon // Make it look dirty!! + playsound(loc, 'sound/effects/splat.ogg', 50, 1) // Play a splat sound + icon_state = dirty_icon // Make it look dirty!! /obj/machinery/kitchen_machine/proc/muck_finish() - playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) - src.visible_message("\The [src] gets covered in muck!") - src.dirty = 100 // Make it dirty so it can't be used util cleaned - src.flags = null //So you can't add condiments - src.icon_state = dirty_icon // Make it look dirty too - src.operating = 0 // Turn it off again aferwards - src.updateUsrDialog() + playsound(loc, 'sound/machines/ding.ogg', 50, 1) + visible_message("\The [src] gets covered in muck!") + dirty = 100 // Make it dirty so it can't be used util cleaned + flags = null //So you can't add condiments + icon_state = dirty_icon // Make it look dirty too + operating = 0 // Turn it off again aferwards + updateUsrDialog() /obj/machinery/kitchen_machine/proc/broke() var/datum/effect/system/spark_spread/s = new s.set_up(2, 1, src) s.start() - src.icon_state = broken_icon // Make it look all busted up and shit - src.visible_message("The [src] breaks!") //Let them know they're stupid - src.broken = 2 // Make it broken so it can't be used util fixed - src.flags = null //So you can't add condiments - src.operating = 0 // Turn it off again aferwards - src.updateUsrDialog() + icon_state = broken_icon // Make it look all busted up and shit + visible_message("The [src] breaks!") //Let them know they're stupid + broken = 2 // Make it broken so it can't be used util fixed + flags = null //So you can't add condiments + operating = 0 // Turn it off again aferwards + updateUsrDialog() /obj/machinery/kitchen_machine/proc/fail() var/obj/item/weapon/reagent_containers/food/snacks/badrecipe/ffuu = new(src) @@ -382,7 +382,7 @@ if(id) amount+=O.reagents.get_reagent_amount(id) qdel(O) - src.reagents.clear_reagents() + reagents.clear_reagents() ffuu.reagents.add_reagent("carbon", amount) ffuu.reagents.add_reagent("????", amount/10) ffuu.forceMove(get_turf(src)) @@ -392,8 +392,8 @@ return usr.set_machine(src) - if(src.operating) - src.updateUsrDialog() + if(operating) + updateUsrDialog() return switch(href_list["action"]) diff --git a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm index dc283e65d6c..edf4963c607 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm @@ -62,7 +62,7 @@ cycle_through = 0 to_chat(user, "You change the monkeycube type to [initial(cube_type.name)].") - if(src.stat != 0) //NOPOWER etc + if(stat != 0) //NOPOWER etc return if(istype(O, /obj/item/weapon/grab)) var/obj/item/weapon/grab/G = O @@ -76,11 +76,11 @@ user.drop_item() qdel(target) to_chat(user, "You stuff the monkey in the machine.") - playsound(src.loc, 'sound/machines/juicer.ogg', 50, 1) + playsound(loc, 'sound/machines/juicer.ogg', 50, 1) var/offset = prob(50) ? -2 : 2 animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 200) //start shaking use_power(500) - src.grinded++ + grinded++ sleep(50) pixel_x = initial(pixel_x) to_chat(user, "The machine now has [grinded] monkey\s worth of material stored.") @@ -91,14 +91,14 @@ return /obj/machinery/monkey_recycler/attack_hand(var/mob/user as mob) - if(src.stat != 0) //NOPOWER etc + if(stat != 0) //NOPOWER etc return if(grinded >= required_grind) to_chat(user, "The machine hisses loudly as it condenses the grinded monkey meat. After a moment, it dispenses a brand new monkey cube.") - playsound(src.loc, 'sound/machines/hiss.ogg', 50, 1) + playsound(loc, 'sound/machines/hiss.ogg', 50, 1) grinded -= required_grind for(var/i = 0, i < cube_production, i++) // Forgot to fix this bit the first time through - new cube_type(src.loc) + new cube_type(loc) to_chat(user, "The machine's display flashes that it has [grinded] monkey\s worth of material left.") else // I'm not sure if the \s macro works with a word in between; I'll play it safe to_chat(user, "The machine needs at least [required_grind] monkey\s worth of material to compress [cube_production] monkey\s. It only has [grinded].") diff --git a/code/modules/food_and_drinks/kitchen_machinery/oven.dm b/code/modules/food_and_drinks/kitchen_machinery/oven.dm index 796e8c4bd4b..6a47eb94ff5 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/oven.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/oven.dm @@ -60,7 +60,7 @@ food_choices.Remove(U) for(var/U in subtypesof(/obj/item/weapon/reagent_containers/food/snacks/customizable/cook)) var/obj/item/weapon/reagent_containers/food/snacks/customizable/cook/V = new U - src.food_choices += V + food_choices += V return /obj/machinery/cooking/candy @@ -75,5 +75,5 @@ food_choices.Remove(U) for(var/U in subtypesof(/obj/item/weapon/reagent_containers/food/snacks/customizable/candy)) var/obj/item/weapon/reagent_containers/food/snacks/customizable/candy/V = new U - src.food_choices += V + food_choices += V return diff --git a/code/modules/food_and_drinks/kitchen_machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm index d2b810dc7bb..2075524c3d2 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/processor.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/processor.dm @@ -58,9 +58,9 @@ var/time = 40 /datum/food_processor_process/proc/process_food(loc, what, obj/machinery/processor/processor) - if(src.output && loc && processor) + if(output && loc && processor) for(var/i = 0, i < processor.rating_amount, i++) - new src.output(loc) + new output(loc) if(what) qdel(what) @@ -156,7 +156,7 @@ /obj/machinery/processor/attackby(var/obj/item/O as obj, var/mob/user as mob, params) - if(src.processing) + if(processing) to_chat(user, "\the [src] is already processing something!") return 1 @@ -195,21 +195,21 @@ if(stat & (NOPOWER|BROKEN)) //no power or broken return - if(src.processing) + if(processing) to_chat(user, "\the [src] is already processing something!") return 1 - if(src.contents.len == 0) + if(contents.len == 0) to_chat(user, "\the [src] is empty.") return 1 - src.processing = 1 + processing = 1 user.visible_message("[user] turns on [src].", \ "You turn on [src].", \ "You hear a food processor.") - playsound(src.loc, 'sound/machines/blender.ogg', 50, 1) + playsound(loc, 'sound/machines/blender.ogg', 50, 1) use_power(500) var/total_time = 0 - for(var/O in src.contents) + for(var/O in contents) var/datum/food_processor_process/P = select_recipe(O) if(!P) log_debug("The [O] in processor([src]) does not have a suitable recipe, but it was somehow put inside of the processor anyways.") @@ -217,14 +217,14 @@ total_time += P.time sleep(total_time / rating_speed) - for(var/O in src.contents) + for(var/O in contents) var/datum/food_processor_process/P = select_recipe(O) if(!P) log_debug("The [O] in processor([src]) does not have a suitable recipe, but it was somehow put inside of the processor anyways.") continue - P.process_food(src.loc, O, src) - src.processing = 0 + P.process_food(loc, O, src) + processing = 0 - src.visible_message("\the [src] has finished processing.", \ + visible_message("\the [src] has finished processing.", \ "\the [src] has finished processing.", \ "You hear a food processor stopping.") diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index c6f7e54a003..0a2a357ea92 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -170,10 +170,10 @@ /obj/machinery/smartfridge/process() if(stat & (BROKEN|NOPOWER)) return - if(src.seconds_electrified > 0) - src.seconds_electrified-- - if(src.shoot_inventory && prob(2)) - src.throw_item() + if(seconds_electrified > 0) + seconds_electrified-- + if(shoot_inventory && prob(2)) + throw_item() /obj/machinery/smartfridge/power_change() var/old_stat = stat @@ -194,7 +194,7 @@ /obj/machinery/smartfridge/attackby(var/obj/item/O as obj, var/mob/user as mob) if(istype(O, /obj/item/weapon/screwdriver) && anchored) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) panel_open = !panel_open to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.") overlays.Cut() @@ -275,7 +275,7 @@ return 0 /obj/machinery/smartfridge/attack_ghost(mob/user as mob) - return src.attack_hand(user) + return attack_hand(user) /obj/machinery/smartfridge/attack_hand(mob/user as mob) if(stat & (NOPOWER|BROKEN)) @@ -336,7 +336,7 @@ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) - ui = new(user, src, ui_key, "smartfridge.tmpl", src.name, 400, 500) + ui = new(user, src, ui_key, "smartfridge.tmpl", name, 400, 500) ui.set_initial_data(data) ui.open() @@ -346,7 +346,7 @@ var/mob/user = usr var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main") - src.add_fingerprint(user) + add_fingerprint(user) if(href_list["close"]) user.unset_machine() @@ -387,7 +387,7 @@ item_quants[O]-- for(var/obj/T in contents) if(T.name == O) - T.forceMove(src.loc) + T.forceMove(loc) throw_item = T break break @@ -395,7 +395,7 @@ return 0 spawn(0) throw_item.throw_at(target,16,3,src) - src.visible_message("[src] launches [throw_item.name] at [target.name]!") + visible_message("[src] launches [throw_item.name] at [target.name]!") return 1 /************************ diff --git a/code/modules/food_and_drinks/recipes/recipes_candy.dm b/code/modules/food_and_drinks/recipes/recipes_candy.dm index 55c5df55328..98f969a17ec 100644 --- a/code/modules/food_and_drinks/recipes/recipes_candy.dm +++ b/code/modules/food_and_drinks/recipes/recipes_candy.dm @@ -79,7 +79,7 @@ result = /obj/item/weapon/reagent_containers/food/snacks/candy/nougat /datum/recipe/candy/nougat/make_food(obj/container) - var/obj/item/weapon/reagent_containers/food/snacks/candy/nougat/being_cooked = ..(container) + var/obj/item/weapon/reagent_containers/food/snacks/candy/nougat/being_cooked = ..() being_cooked.reagents.del_reagent("egg") return being_cooked diff --git a/code/modules/food_and_drinks/recipes/recipes_grill.dm b/code/modules/food_and_drinks/recipes/recipes_grill.dm index 52be26f37b5..5845e860c9d 100644 --- a/code/modules/food_and_drinks/recipes/recipes_grill.dm +++ b/code/modules/food_and_drinks/recipes/recipes_grill.dm @@ -90,7 +90,7 @@ result = /obj/item/weapon/reagent_containers/food/snacks/fishfingers /datum/recipe/grill/fishfingers/make_food(obj/container) - var/obj/item/weapon/reagent_containers/food/snacks/fishfingers/being_cooked = ..(container) + var/obj/item/weapon/reagent_containers/food/snacks/fishfingers/being_cooked = ..() being_cooked.reagents.del_reagent("egg") return being_cooked diff --git a/code/modules/food_and_drinks/recipes/recipes_microwave.dm b/code/modules/food_and_drinks/recipes/recipes_microwave.dm index 0f58955a2bf..5903e191b4e 100644 --- a/code/modules/food_and_drinks/recipes/recipes_microwave.dm +++ b/code/modules/food_and_drinks/recipes/recipes_microwave.dm @@ -205,10 +205,11 @@ reagents = list("water" = 5, "vodka" = 5) fruit = list("amanita" = 3) result = /obj/item/weapon/reagent_containers/food/snacks/amanitajelly - make_food(var/obj/container as obj) - var/obj/item/weapon/reagent_containers/food/snacks/amanitajelly/being_cooked = ..(container) - being_cooked.reagents.del_reagent("amanitin") - return being_cooked + +/datum/recipe/microwave/amanitajelly/make_food(obj/container) + var/obj/item/weapon/reagent_containers/food/snacks/amanitajelly/being_cooked = ..() + being_cooked.reagents.del_reagent("amanitin") + return being_cooked /datum/recipe/microwave/meatballsoup reagents = list("water" = 10) @@ -538,10 +539,11 @@ datum/recipe/microwave/slimesandwich /datum/recipe/microwave/herbsalad fruit = list("ambrosia" = 3, "apple" = 1) result = /obj/item/weapon/reagent_containers/food/snacks/herbsalad - make_food(var/obj/container as obj) - var/obj/item/weapon/reagent_containers/food/snacks/herbsalad/being_cooked = ..(container) - being_cooked.reagents.del_reagent("toxin") - return being_cooked + +/datum/recipe/microwave/herbsalad/make_food(obj/container) + var/obj/item/weapon/reagent_containers/food/snacks/herbsalad/being_cooked = ..() + being_cooked.reagents.del_reagent("toxin") + return being_cooked /datum/recipe/microwave/aesirsalad fruit = list("ambrosiadeus" = 3, "goldapple" = 1) @@ -553,10 +555,11 @@ datum/recipe/microwave/slimesandwich /obj/item/weapon/reagent_containers/food/snacks/meatball, ) result = /obj/item/weapon/reagent_containers/food/snacks/validsalad - make_food(var/obj/container as obj) - var/obj/item/weapon/reagent_containers/food/snacks/validsalad/being_cooked = ..(container) - being_cooked.reagents.del_reagent("toxin") - return being_cooked + +/datum/recipe/microwave/validsalad/make_food(obj/container) + var/obj/item/weapon/reagent_containers/food/snacks/validsalad/being_cooked = ..() + being_cooked.reagents.del_reagent("toxin") + return being_cooked ////////////////////////////FOOD ADDITTIONS/////////////////////////////// diff --git a/code/modules/food_and_drinks/recipes/recipes_oven.dm b/code/modules/food_and_drinks/recipes/recipes_oven.dm index 37af56e8ad4..d20c06e260f 100644 --- a/code/modules/food_and_drinks/recipes/recipes_oven.dm +++ b/code/modules/food_and_drinks/recipes/recipes_oven.dm @@ -176,20 +176,22 @@ /obj/item/weapon/paper, ) result = /obj/item/weapon/reagent_containers/food/snacks/fortunecookie - make_food(var/obj/container as obj) + +/datum/recipe/oven/fortunecookie/make_food(obj/container) + var/obj/item/weapon/paper/paper = locate() in container + paper.loc = null //prevent deletion + var/obj/item/weapon/reagent_containers/food/snacks/fortunecookie/being_cooked = ..() + paper.loc = being_cooked + being_cooked.trash = paper //so the paper is left behind as trash without special-snowflake(TM Nodrak) code ~carn + return being_cooked + +/datum/recipe/oven/fortunecookie/check_items(obj/container) + . = ..() + if(.) var/obj/item/weapon/paper/paper = locate() in container - paper.loc = null //prevent deletion - var/obj/item/weapon/reagent_containers/food/snacks/fortunecookie/being_cooked = ..(container) - paper.loc = being_cooked - being_cooked.trash = paper //so the paper is left behind as trash without special-snowflake(TM Nodrak) code ~carn - return being_cooked - check_items(var/obj/container as obj) - . = ..() - if(.) - var/obj/item/weapon/paper/paper = locate() in container - if(!paper || !paper.info) - return -1 - return . + if(!paper || !paper.info) + return -1 + return . /datum/recipe/oven/pizzamargherita fruit = list("tomato" = 1) @@ -294,7 +296,7 @@ result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/bread /datum/recipe/oven/bread/make_food(obj/container) - var/obj/item/weapon/reagent_containers/food/snacks/sliceable/bread/being_cooked = ..(container) + var/obj/item/weapon/reagent_containers/food/snacks/sliceable/bread/being_cooked = ..() being_cooked.reagents.del_reagent("egg") return being_cooked @@ -383,7 +385,7 @@ result = /obj/item/weapon/reagent_containers/food/snacks/appletart /datum/recipe/oven/appletart/make_food(obj/container) - var/obj/item/weapon/reagent_containers/food/snacks/appletart/being_cooked = ..(container) + var/obj/item/weapon/reagent_containers/food/snacks/appletart/being_cooked = ..() being_cooked.reagents.del_reagent("egg") return being_cooked @@ -403,7 +405,7 @@ result = /obj/item/weapon/reagent_containers/food/snacks/sugarcookie /datum/recipe/oven/sugarcookie/make_food(obj/container) - var/obj/item/weapon/reagent_containers/food/snacks/sugarcookie/being_cooked = ..(container) + var/obj/item/weapon/reagent_containers/food/snacks/sugarcookie/being_cooked = ..() being_cooked.reagents.del_reagent("egg") return being_cooked From c30ec1c64b3a662a0bc68885740724712d9662b5 Mon Sep 17 00:00:00 2001 From: Markolie Date: Tue, 25 Oct 2016 23:43:36 +0200 Subject: [PATCH 17/30] Fixes Ripley Goliath upgrade occupant check --- .../living/simple_animal/hostile/mining_mobs.dm | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 4c974c46c16..47c243e970e 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -466,6 +466,9 @@ return if(istype(target, /obj/mecha/working/ripley)) var/obj/mecha/D = target + if(D.icon_state != "ripley-open") + to_chat(user, "You can't add armour onto the mech while someone is inside!") + return var/list/damage_absorption = D.damage_absorption if(damage_absorption["brute"] > 0.3) damage_absorption["brute"] = max(damage_absorption["brute"] - 0.1, 0.3) @@ -474,17 +477,11 @@ damage_absorption["laser"] = damage_absorption["laser"] - 0.025 to_chat(user, "You strengthen [target], improving its resistance against melee attacks.") qdel(src) - if(D.icon_state == "ripley-open") - D.overlays += image("icon"="mecha.dmi", "icon_state"="ripley-g-open") - D.desc = "Autonomous Power Loader Unit. Its armour is enhanced with some goliath hide plates." - else - to_chat(user, "You can't add armour onto the mech while someone is inside!") + D.overlays += image("icon"="mecha.dmi", "icon_state"="ripley-g-open") + D.desc = "Autonomous Power Loader Unit. Its armour is enhanced with some goliath hide plates." if(damage_absorption.["brute"] == 0.3) - if(D.icon_state == "ripley-open") - D.overlays += image("icon"="mecha.dmi", "icon_state"="ripley-g-full-open") - D.desc = "Autonomous Power Loader Unit. It's wearing a fearsome carapace entirely composed of goliath hide plates - the pilot must be an experienced monster hunter." - else - to_chat(user, "You can't add armour onto the mech while someone is inside!") + D.overlays += image("icon"="mecha.dmi", "icon_state"="ripley-g-full-open") + D.desc = "Autonomous Power Loader Unit. It's wearing a fearsome carapace entirely composed of goliath hide plates - the pilot must be an experienced monster hunter." else to_chat(user, "You can't improve [D] any further!") return From 0725ea2cbbefac77766ae255e6530d2f20c5224b Mon Sep 17 00:00:00 2001 From: Markolie Date: Wed, 26 Oct 2016 01:07:32 +0200 Subject: [PATCH 18/30] Fix rig Goliath upgrade double message --- code/modules/clothing/spacesuits/rig.dm | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm index 6fad0961ab4..e8b3e3d71c9 100644 --- a/code/modules/clothing/spacesuits/rig.dm +++ b/code/modules/clothing/spacesuits/rig.dm @@ -189,15 +189,11 @@ to_chat(H, "You deploy your hardsuit helmet, sealing you off from the world.") H.update_inv_head() -/obj/item/clothing/suit/space/rig/attackby(obj/item/W as obj, mob/user as mob, params) - if(!isliving(user)) +/obj/item/clothing/suit/space/rig/attackby(obj/item/W as obj, mob/living/user as mob, params) + if(!istype(user)) return - if(istype(src.loc,/mob/living)) - to_chat(user, "How do you propose to modify a hardsuit while it is being worn?") - return - - if(istype(W,/obj/item/weapon/screwdriver)) + if(istype(W,/obj/item/weapon/screwdriver) && can_modify(user)) if(!helmet) to_chat(user, "\The [src] does not have a helmet installed.") else @@ -213,7 +209,7 @@ boots = null return - else if(istype(W,/obj/item/clothing/head/helmet/space)) + else if(istype(W,/obj/item/clothing/head/helmet/space) && can_modify(user)) if(!attached_helmet) to_chat(user, "\The [src] does not have a helmet mount.") return @@ -226,7 +222,7 @@ src.helmet = W return - else if(istype(W,/obj/item/clothing/shoes/magboots)) + else if(istype(W,/obj/item/clothing/shoes/magboots) && can_modify(user)) if(!attached_boots) to_chat(user, "\The [src] does not have boot mounts.") return @@ -242,6 +238,13 @@ return ..() ..() + +/obj/item/clothing/suit/space/rig/proc/can_modify(mob/living/user) + if(isliving(loc)) + to_chat(user, "You can not modify the hardsuit while it is being worn.") + return 0 + + return 1 //Engineering rig /obj/item/clothing/head/helmet/space/rig/engineering From f27f72e61b668a6df06708c9d3d2f4fa77a5631a Mon Sep 17 00:00:00 2001 From: Markolie Date: Wed, 26 Oct 2016 02:50:52 +0200 Subject: [PATCH 19/30] ERT fixes --- code/_globalvars/mapping.dm | 4 +- code/_globalvars/unused.dm | 6 -- code/game/gamemodes/nuclear/nuclear.dm | 16 ++---- code/game/objects/effects/landmarks.dm | 54 +++++++----------- code/game/response_team.dm | 79 +++++++++++++------------- 5 files changed, 64 insertions(+), 95 deletions(-) diff --git a/code/_globalvars/mapping.dm b/code/_globalvars/mapping.dm index 44b678a8f67..ae26485208b 100644 --- a/code/_globalvars/mapping.dm +++ b/code/_globalvars/mapping.dm @@ -18,7 +18,6 @@ var/global/list/global_map = null //3 - AI satellite //5 - empty space -var/list/monkeystart = list() var/list/wizardstart = list() var/list/newplayer_start = list() var/list/latejoin = list() @@ -26,10 +25,9 @@ var/list/latejoin_gateway = list() var/list/latejoin_cryo = list() var/list/latejoin_cyborg = list() var/list/prisonwarp = list() //prisoners go to these -var/list/holdingfacility = list() //captured people go here var/list/xeno_spawn = list()//Aliens spawn at these. var/list/ertdirector = list() -// list/mazewarp = list() +var/list/emergencyresponseteamspawn = list() var/list/tdome1 = list() var/list/tdome2 = list() var/list/team_alpha = list() diff --git a/code/_globalvars/unused.dm b/code/_globalvars/unused.dm index d3945b68eab..e55794c3dc9 100644 --- a/code/_globalvars/unused.dm +++ b/code/_globalvars/unused.dm @@ -31,10 +31,4 @@ var/endicon = null var/datum/air_tunnel/air_tunnel1/SS13_airtunnel = null var/going = 1.0 var/datum/engine_eject/engine_eject_control = null -// list/traitors = list() //traitor list -// list/traitobj = list( ) -var/airtunnel_start = 68 // default -var/airtunnel_stop = 68 // default -var/airtunnel_bottom = 72 // default -// reverse_dir[dir] = reverse of dir diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 25ad0d234da..43892b6c474 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -150,16 +150,6 @@ proc/issyndicate(mob/living/M as mob) var/hair_c = pick("#8B4513","#000000","#FF4500","#FFD700") // Brown, black, red, blonde var/eye_c = pick("#000000","#8B4513","1E90FF") // Black, brown, blue var/skin_tone = pick(-50, -30, -10, 0, 0, 0, 10) // Caucasian/black - var/hair_style = "Bald" - var/facial_hair_style = "Shaved" - if(M.gender == MALE) - hair_style = pick(hair_styles_male_list) - facial_hair_style = pick(facial_hair_styles_list) - else - hair_style = pick(hair_styles_female_list) - if(prob(5)) - facial_hair_style = pick(facial_hair_styles_list) - head_organ.r_facial = color2R(hair_c) head_organ.g_facial = color2G(hair_c) head_organ.b_facial = color2B(hair_c) @@ -168,9 +158,11 @@ proc/issyndicate(mob/living/M as mob) head_organ.b_hair = color2B(hair_c) M.change_eye_color(color2R(eye_c), color2G(eye_c), color2B(eye_c)) M.s_tone = skin_tone - head_organ.h_style = hair_style - head_organ.f_style = facial_hair_style + head_organ.h_style = random_hair_style(M.gender, head_organ.species.name) + head_organ.f_style = random_facial_hair_style(M.gender, head_organ.species.name) M.body_accessory = null + M.regenerate_icons() + M.update_body() /datum/game_mode/proc/prepare_syndicate_leader(var/datum/mind/synd_mind, var/nuke_code) var/leader_title = pick("Czar", "Boss", "Commander", "Chief", "Kingpin", "Director", "Overlord") diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index ecb8590c103..43fd8ad3dc7 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -12,22 +12,6 @@ invisibility = 101 switch(name) //some of these are probably obsolete - if("shuttle") - log_runtime(EXCEPTION("Obsolete landmark '[name]' at ([x],[y],[z])"), src) - qdel(src) - - if("airtunnel_stop") - airtunnel_stop = x - - if("airtunnel_start") - airtunnel_start = x - - if("airtunnel_bottom") - airtunnel_bottom = y - - if("monkey") - monkeystart += loc - qdel(src) if("start") newplayer_start += loc qdel(src) @@ -52,29 +36,28 @@ latejoin_cyborg += loc qdel(src) - //prisoners if("prisonwarp") prisonwarp += loc qdel(src) - // if("mazewarp") - // mazewarp += loc - if("Holding Facility") - holdingfacility += loc - if("tdome1") - tdome1 += loc - if("tdome2") - tdome2 += loc - if("tdomeadmin") - tdomeadmin += loc - if("tdomeobserve") - tdomeobserve += loc - if("aroomwarp") - aroomwarp += loc - - //not prisoners + if("prisonsecuritywarp") prisonsecuritywarp += loc qdel(src) + + if("tdome1") + tdome1 += loc + + if("tdome2") + tdome2 += loc + + if("tdomeadmin") + tdomeadmin += loc + + if("tdomeobserve") + tdomeobserve += loc + + if("aroomwarp") + aroomwarp += loc if("blobstart") blobstart += loc @@ -96,6 +79,11 @@ if("ERT Director") ertdirector += loc + qdel(src) + + if("Response Team") + emergencyresponseteamspawn += loc + qdel(src) landmarks_list += src return 1 diff --git a/code/game/response_team.dm b/code/game/response_team.dm index 121228b4d3f..a4ca220e5dd 100644 --- a/code/game/response_team.dm +++ b/code/game/response_team.dm @@ -73,7 +73,6 @@ var/ert_request_answered = 0 return 0 /mob/dead/observer/proc/JoinResponseTeam() - if(!send_emergency_team) to_chat(src, "No emergency response team is currently being sent.") return 0 @@ -82,35 +81,23 @@ var/ert_request_answered = 0 to_chat(src, "You are jobbanned from the emergency reponse team!") return 0 - var/player_age_check = check_client_age(src.client, responseteam_age) + var/player_age_check = check_client_age(client, responseteam_age) if(player_age_check && config.use_age_restriction_for_antags) to_chat(src, "This role is not yet available to you. You need to wait another [player_age_check] days.") return 0 - if(src.has_enabled_antagHUD == 1 && config.antag_hud_restricted) + if(has_enabled_antagHUD == 1 && config.antag_hud_restricted) to_chat(src, "Upon using the antagHUD you forfeited the ability to join the round.") return 0 if(response_team_members.len > 6) to_chat(src, "The emergency response team is already full!") return 0 - - for(var/obj/effect/landmark/L in landmarks_list) - if(L.name == "Response Team") - L.name = null - if(!src.client) - return - spawn(-1) - var/client/C = src.client - var/mob/living/carbon/human/new_commando = C.create_response_team(L.loc) - qdel(L) - new_commando.mind.key = src.key - new_commando.key = src.key - new_commando.update_icons() - return 1 + + return 1 /proc/trigger_armed_response_team(var/datum/response_team/response_team_type) - + response_team_members = list() active_team = response_team_type send_emergency_team = 1 @@ -118,24 +105,41 @@ var/ert_request_answered = 0 if(!ert_candidates.len) active_team.cannot_send_team() send_emergency_team = 0 - return - var/teamsize = 0 + return 0 + // Respawnable players get first dibs - for(var/mob/dead/observer/M in (ert_candidates & respawnable_list)) - teamsize += M.JoinResponseTeam() + for(var/mob/dead/observer/M in ert_candidates) + if((M in respawnable_list) && M.JoinResponseTeam()) + response_team_members |= M // If there's still open slots, non-respawnable players can fill them for(var/mob/dead/observer/M in (ert_candidates - respawnable_list)) - teamsize += M.JoinResponseTeam() - send_emergency_team = 0 - if (!teamsize) + if(M.JoinResponseTeam()) + response_team_members |= M + + if(!response_team_members.len) active_team.cannot_send_team() - return - active_team.announce_team() + send_emergency_team = 0 + return 0 -/client/proc/create_response_team(obj/spawn_location) + var/index = 1 + for(var/mob/M in response_team_members) + if(index > emergencyresponseteamspawn.len) + index = 1 + + var/client/C = M.client + var/mob/living/carbon/human/new_commando = C.create_response_team(emergencyresponseteamspawn[index]) + new_commando.mind.key = M.key + new_commando.key = M.key + new_commando.update_icons() + index++ + + send_emergency_team = 0 + active_team.announce_team() + return 1 + +/client/proc/create_response_team(var/turf/spawn_location) var/mob/living/carbon/human/M = new(null) var/obj/item/organ/external/head/head_organ = M.get_organ("head") - response_team_members |= M var/new_gender = alert(src, "Please select your gender.", "ERT Character Generation", "Male", "Female") @@ -157,15 +161,6 @@ var/ert_request_answered = 0 var/hair_c = pick("#8B4513","#000000","#FF4500","#FFD700") // Brown, black, red, blonde var/eye_c = pick("#000000","#8B4513","1E90FF") // Black, brown, blue var/skin_tone = pick(-50, -30, -10, 0, 0, 0, 10) // Caucasian/black - var/hair_style = "Bald" - var/facial_hair_style = "Shaved" - if(M.gender == MALE) - hair_style = pick(hair_styles_male_list) - facial_hair_style = pick(facial_hair_styles_list) - else - hair_style = pick(hair_styles_female_list) - if(prob(5)) - facial_hair_style = pick(facial_hair_styles_list) head_organ.r_facial = color2R(hair_c) head_organ.g_facial = color2G(hair_c) @@ -175,12 +170,14 @@ var/ert_request_answered = 0 head_organ.b_hair = color2B(hair_c) M.change_eye_color(color2R(eye_c), color2G(eye_c), color2B(eye_c)) M.s_tone = skin_tone - head_organ.h_style = hair_style - head_organ.f_style = facial_hair_style + head_organ.h_style = random_hair_style(M.gender, head_organ.species.name) + head_organ.f_style = random_facial_hair_style(M.gender, head_organ.species.name) M.real_name = "[pick("Corporal", "Sergeant", "Staff Sergeant", "Sergeant First Class", "Master Sergeant", "Sergeant Major")] [pick(last_names)]" M.name = M.real_name M.age = rand(23,35) + M.regenerate_icons() + M.update_body() //Creates mind stuff. M.mind = new @@ -190,7 +187,7 @@ var/ert_request_answered = 0 M.mind.special_role = SPECIAL_ROLE_ERT if(!(M.mind in ticker.minds)) ticker.minds += M.mind //Adds them to regular mind list. - M.loc = spawn_location + M.forceMove(spawn_location) active_team.equip_officer(class, M) From bae93f08b5273caabaa4d1d639e0e1e561daec3f Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 25 Oct 2016 23:33:21 -0400 Subject: [PATCH 20/30] cleanup further --- code/modules/food_and_drinks/food/snacks.dm | 4 +-- .../kitchen_machinery/gibber.dm | 8 ++--- .../kitchen_machinery/icecream_vat_2.dm | 6 ++-- .../kitchen_machinery/juicer.dm | 8 ++--- .../kitchen_machinery/kitchen_machine.dm | 10 +++---- .../kitchen_machinery/monkeyrecycler.dm | 4 +-- .../kitchen_machinery/processor.dm | 4 +-- .../kitchen_machinery/smartfridge.dm | 30 +++++++++---------- 8 files changed, 37 insertions(+), 37 deletions(-) diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 2bc089abaf1..49cd0c1fa3b 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -37,10 +37,10 @@ /obj/item/weapon/reagent_containers/food/snacks/proc/Post_Consume(mob/living/M) return -/obj/item/weapon/reagent_containers/food/snacks/attack_self(mob/user as mob) +/obj/item/weapon/reagent_containers/food/snacks/attack_self(mob/user) return -/obj/item/weapon/reagent_containers/food/snacks/attack(mob/M as mob, mob/user as mob, def_zone) +/obj/item/weapon/reagent_containers/food/snacks/attack(mob/M, mob/user, def_zone) if(reagents && !reagents.total_volume) //Shouldn't be needed but it checks to see if it has anything left in it. to_chat(user, "None of [src] left, oh no!") M.unEquip(src) //so icons update :[ diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index b95f85bf03b..fafa983cf1d 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -52,13 +52,13 @@ else overlays += image('icons/obj/kitchen.dmi', "gridle") -/obj/machinery/gibber/relaymove(mob/user as mob) +/obj/machinery/gibber/relaymove(mob/user) if(locked) return go_out() -/obj/machinery/gibber/attack_hand(mob/user as mob) +/obj/machinery/gibber/attack_hand(mob/user) if(stat & (NOPOWER|BROKEN)) return @@ -73,7 +73,7 @@ else startgibbing(user) -/obj/machinery/gibber/attackby(obj/item/P as obj, mob/user as mob, params) +/obj/machinery/gibber/attackby(obj/item/P, mob/user, params) if(istype(P, /obj/item/weapon/grab)) var/obj/item/weapon/grab/G = P if(G.state < 2) @@ -352,7 +352,7 @@ feedinTopanim() return 1 -/obj/machinery/gibber/autogibber/proc/ejectclothes(var/mob/living/carbon/human/H) +/obj/machinery/gibber/autogibber/proc/ejectclothes(mob/living/carbon/human/H) if(!istype(H)) return 0 if(H != occupant) return 0 //only using H as a shortcut to typecast for(var/obj/O in H) diff --git a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat_2.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat_2.dm index ac79371f06e..19da4fb85ac 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat_2.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat_2.dm @@ -63,11 +63,11 @@ var/list/ingredients_source = list( while(ingredients.len < 11) ingredients.Add(5) -/obj/machinery/icecream_vat/attack_hand(mob/user as mob) +/obj/machinery/icecream_vat/attack_hand(mob/user) user.set_machine(src) interact(user) -/obj/machinery/icecream_vat/interact(mob/user as mob) +/obj/machinery/icecream_vat/interact(mob/user) var/dat dat += "Dispense vanilla icecream There is [ingredients[ICECREAM_VANILLA]] scoops of vanilla icecream left (made from milk and ice).
" dat += "Dispense strawberry icecream There is [ingredients[FLAVOUR_STRAWBERRY]] dollops of strawberry flavouring left (obtained from berry juice.
" @@ -91,7 +91,7 @@ var/list/ingredients_source = list( popup.set_content(dat) popup.open(0) -/obj/machinery/icecream_vat/attackby(var/obj/item/O as obj, var/mob/user as mob, params) +/obj/machinery/icecream_vat/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/weapon/reagent_containers)) if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/icecream)) var/obj/item/weapon/reagent_containers/food/snacks/icecream/I = O diff --git a/code/modules/food_and_drinks/kitchen_machinery/juicer.dm b/code/modules/food_and_drinks/kitchen_machinery/juicer.dm index ba791d3f28f..03ceb5c0034 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/juicer.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/juicer.dm @@ -35,7 +35,7 @@ return -/obj/machinery/juicer/attackby(var/obj/item/O as obj, var/mob/user as mob, params) +/obj/machinery/juicer/attackby(obj/item/O, mob/user, params) if(istype(O,/obj/item/weapon/reagent_containers/glass) || \ istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass)) if(beaker) @@ -60,14 +60,14 @@ updateUsrDialog() return 0 -/obj/machinery/juicer/attack_ai(mob/user as mob) +/obj/machinery/juicer/attack_ai(mob/user) return 0 -/obj/machinery/juicer/attack_hand(mob/user as mob) +/obj/machinery/juicer/attack_hand(mob/user) user.set_machine(src) interact(user) -/obj/machinery/juicer/interact(mob/user as mob) // The microwave Menu +/obj/machinery/juicer/interact(mob/user) // The microwave Menu var/is_chamber_empty = 0 var/is_beaker_ready = 0 var/processing_chamber = "" diff --git a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm index ed9e1b2117b..15458648513 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm @@ -56,7 +56,7 @@ * Item Adding ********************/ -/obj/machinery/kitchen_machine/attackby(var/obj/item/O as obj, var/mob/user as mob, params) +/obj/machinery/kitchen_machine/attackby(obj/item/O, mob/user, params) if(operating) return if(!broken && dirty < 100) @@ -163,10 +163,10 @@ return 1 updateUsrDialog() -/obj/machinery/kitchen_machine/attack_ai(mob/user as mob) +/obj/machinery/kitchen_machine/attack_ai(mob/user) return 0 -/obj/machinery/kitchen_machine/attack_hand(mob/user as mob) +/obj/machinery/kitchen_machine/attack_hand(mob/user) user.set_machine(src) interact(user) @@ -174,7 +174,7 @@ * Machine Menu * ********************/ -/obj/machinery/kitchen_machine/interact(mob/user as mob) // The microwave Menu +/obj/machinery/kitchen_machine/interact(mob/user) // The microwave Menu if(panel_open || !anchored) return var/dat = "" @@ -305,7 +305,7 @@ new byproduct(loc) return -/obj/machinery/kitchen_machine/proc/wzhzhzh(var/seconds as num) +/obj/machinery/kitchen_machine/proc/wzhzhzh(seconds) for(var/i=1 to seconds) if(stat & (NOPOWER|BROKEN)) return 0 diff --git a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm index edf4963c607..e70ac59209e 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm @@ -33,7 +33,7 @@ cube_production = cubes_made required_grind = req_grind -/obj/machinery/monkey_recycler/attackby(var/obj/item/O as obj, var/mob/user as mob, params) +/obj/machinery/monkey_recycler/attackby(obj/item/O, mob/user, params) if(default_deconstruction_screwdriver(user, "grinder_open", "grinder", O)) return @@ -90,7 +90,7 @@ to_chat(user, "The machine only accepts monkeys!") return -/obj/machinery/monkey_recycler/attack_hand(var/mob/user as mob) +/obj/machinery/monkey_recycler/attack_hand(mob/user) if(stat != 0) //NOPOWER etc return if(grinded >= required_grind) diff --git a/code/modules/food_and_drinks/kitchen_machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm index 2075524c3d2..5183fe6a4fa 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/processor.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/processor.dm @@ -154,7 +154,7 @@ return P return 0 -/obj/machinery/processor/attackby(var/obj/item/O as obj, var/mob/user as mob, params) +/obj/machinery/processor/attackby(obj/item/O, mob/user, params) if(processing) to_chat(user, "\the [src] is already processing something!") @@ -191,7 +191,7 @@ what.loc = src return -/obj/machinery/processor/attack_hand(var/mob/user as mob) +/obj/machinery/processor/attack_hand(mob/user) if(stat & (NOPOWER|BROKEN)) //no power or broken return diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index 0a2a357ea92..2446b74ad22 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -53,7 +53,7 @@ A.forceMove(loc) return ..() -/obj/machinery/smartfridge/proc/accept_check(var/obj/item/O as obj) +/obj/machinery/smartfridge/proc/accept_check(obj/item/O) if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown/) || istype(O,/obj/item/seeds/)) return 1 return 0 @@ -66,7 +66,7 @@ icon_on = "seeds" icon_off = "seeds-off" -/obj/machinery/smartfridge/seeds/accept_check(var/obj/item/O as obj) +/obj/machinery/smartfridge/seeds/accept_check(obj/item/O) if(istype(O,/obj/item/seeds/)) return 1 return 0 @@ -77,7 +77,7 @@ icon_state = "smartfridge" //To fix the icon in the map editor. icon_on = "smartfridge_chem" -/obj/machinery/smartfridge/medbay/accept_check(var/obj/item/O as obj) +/obj/machinery/smartfridge/medbay/accept_check(obj/item/O) if(istype(O,/obj/item/weapon/reagent_containers/glass/)) return 1 if(istype(O,/obj/item/weapon/storage/pill_bottle/)) @@ -91,7 +91,7 @@ desc = "A refrigerated storage unit for slime extracts" req_access_txt = "47" -/obj/machinery/smartfridge/secure/extract/accept_check(var/obj/item/O as obj) +/obj/machinery/smartfridge/secure/extract/accept_check(obj/item/O) if(istype(O,/obj/item/slime_extract)) return 1 return 0 @@ -103,7 +103,7 @@ icon_on = "smartfridge_chem" req_one_access_txt = "5;33" -/obj/machinery/smartfridge/secure/medbay/accept_check(var/obj/item/O as obj) +/obj/machinery/smartfridge/secure/medbay/accept_check(obj/item/O) if(istype(O,/obj/item/weapon/reagent_containers/glass/)) return 1 if(istype(O,/obj/item/weapon/storage/pill_bottle/)) @@ -134,7 +134,7 @@ nanomanager.update_uis(src) amount-- -/obj/machinery/smartfridge/chemistry/accept_check(var/obj/item/O as obj) +/obj/machinery/smartfridge/chemistry/accept_check(obj/item/O) if(istype(O,/obj/item/weapon/storage/pill_bottle) || istype(O,/obj/item/weapon/reagent_containers)) return 1 return 0 @@ -154,7 +154,7 @@ /obj/item/weapon/reagent_containers/glass/bottle/plasma = 1, /obj/item/weapon/reagent_containers/glass/bottle/diphenhydramine = 1) -/obj/machinery/smartfridge/secure/chemistry/virology/accept_check(var/obj/item/O as obj) +/obj/machinery/smartfridge/secure/chemistry/virology/accept_check(obj/item/O) if(istype(O, /obj/item/weapon/reagent_containers/syringe) || istype(O, /obj/item/weapon/reagent_containers/glass/bottle) || istype(O, /obj/item/weapon/reagent_containers/glass/beaker)) return 1 return 0 @@ -163,7 +163,7 @@ name = "\improper Drink Showcase" desc = "A refrigerated storage unit for tasty tasty alcohol." -/obj/machinery/smartfridge/drinks/accept_check(var/obj/item/O as obj) +/obj/machinery/smartfridge/drinks/accept_check(obj/item/O) if(istype(O,/obj/item/weapon/reagent_containers/glass) || istype(O,/obj/item/weapon/reagent_containers/food/drinks) || istype(O,/obj/item/weapon/reagent_containers/food/condiment)) return 1 @@ -192,7 +192,7 @@ * Item Adding ********************/ -/obj/machinery/smartfridge/attackby(var/obj/item/O as obj, var/mob/user as mob) +/obj/machinery/smartfridge/attackby(obj/item/O, mob/user) if(istype(O, /obj/item/weapon/screwdriver) && anchored) playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) panel_open = !panel_open @@ -271,20 +271,20 @@ return 1 return 0 -/obj/machinery/smartfridge/attack_ai(mob/user as mob) +/obj/machinery/smartfridge/attack_ai(mob/user) return 0 -/obj/machinery/smartfridge/attack_ghost(mob/user as mob) +/obj/machinery/smartfridge/attack_ghost(mob/user) return attack_hand(user) -/obj/machinery/smartfridge/attack_hand(mob/user as mob) +/obj/machinery/smartfridge/attack_hand(mob/user) if(stat & (NOPOWER|BROKEN)) return wires.Interact(user) ui_interact(user) //Drag pill bottle to fridge to empty it into the fridge -/obj/machinery/smartfridge/MouseDrop_T(obj/over_object as obj, mob/user as mob) +/obj/machinery/smartfridge/MouseDrop_T(obj/over_object, mob/user) if(!istype(over_object, /obj/item/weapon/storage/pill_bottle)) //Only pill bottles, please return @@ -305,7 +305,7 @@ to_chat(user, "Some items are refused.") nanomanager.update_uis(src) -/obj/machinery/smartfridge/secure/emag_act(user as mob) +/obj/machinery/smartfridge/secure/emag_act(user) emagged = 1 locked = -1 to_chat(user, "You short out the product lock on [src].") @@ -314,7 +314,7 @@ * SmartFridge Menu ********************/ -/obj/machinery/smartfridge/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) +/obj/machinery/smartfridge/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) user.set_machine(src) var/data[0] From afb079bf8b9442687c8b69a584c7e14cc015ee99 Mon Sep 17 00:00:00 2001 From: Markolie Date: Wed, 26 Oct 2016 12:51:48 +0200 Subject: [PATCH 21/30] Rig install adjustments --- code/modules/clothing/spacesuits/rig.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm index e8b3e3d71c9..1c8bd73c47f 100644 --- a/code/modules/clothing/spacesuits/rig.dm +++ b/code/modules/clothing/spacesuits/rig.dm @@ -189,8 +189,8 @@ to_chat(H, "You deploy your hardsuit helmet, sealing you off from the world.") H.update_inv_head() -/obj/item/clothing/suit/space/rig/attackby(obj/item/W as obj, mob/living/user as mob, params) - if(!istype(user)) +/obj/item/clothing/suit/space/rig/attackby(obj/item/W, mob/user, params) + if(!isliving(user)) return if(istype(W,/obj/item/weapon/screwdriver) && can_modify(user)) From e9dc5b1b1f97aba85a055c5d016055d63c67be56 Mon Sep 17 00:00:00 2001 From: Markolie Date: Thu, 27 Oct 2016 14:56:58 +0200 Subject: [PATCH 22/30] Fix secure briefcases appearing empty --- .../objects/items/weapons/storage/secure.dm | 304 +++++++++--------- code/modules/admin/verbs/debug.dm | 10 +- 2 files changed, 152 insertions(+), 162 deletions(-) diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index 460498a874b..54231db8c40 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -27,131 +27,132 @@ max_w_class = 2 max_combined_w_class = 14 - examine(mob/user) - if(..(user, 1)) - to_chat(user, text("The service panel is [src.open ? "open" : "closed"].")) +/obj/item/weapon/storage/secure/examine(mob/user) + if(..(user, 1)) + to_chat(user, text("The service panel is [open ? "open" : "closed"].")) - attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if(locked) - if((istype(W, /obj/item/weapon/melee/energy/blade)) && (!src.emagged)) - emag_act(user, W) +/obj/item/weapon/storage/secure/attackby(obj/item/weapon/W as obj, mob/user as mob, params) + if(locked) + if((istype(W, /obj/item/weapon/melee/energy/blade)) && (!emagged)) + emag_act(user, W) - if(istype(W, /obj/item/weapon/screwdriver)) - if(do_after(user, 20, target = src)) - src.open =! src.open - user.show_message(text("\blue You [] the service panel.", (src.open ? "open" : "close"))) - return - if((istype(W, /obj/item/device/multitool)) && (src.open == 1)&& (!src.l_hacking)) - user.show_message(text("\red Now attempting to reset internal memory, please hold."), 1) - src.l_hacking = 1 - if(do_after(usr, 100, target = src)) - if(prob(40)) - src.l_setshort = 1 - src.l_set = 0 - user.show_message(text("\red Internal memory reset. Please give it a few seconds to reinitialize."), 1) - sleep(80) - src.l_setshort = 0 - src.l_hacking = 0 - else - user.show_message(text("\red Unable to reset internal memory."), 1) - src.l_hacking = 0 - else src.l_hacking = 0 - return - //At this point you have exhausted all the special things to do when locked - // ... but it's still locked. + if(istype(W, /obj/item/weapon/screwdriver)) + if(do_after(user, 20, target = src)) + open = !open + user.show_message("You [open ? "open" : "close"] the service panel.", 1) return - // -> storage/attackby() what with handle insertion, etc - ..() - - emag_act(user as mob, weapon as obj) - if(!emagged) - emagged = 1 - src.overlays += image('icons/obj/storage.dmi', icon_sparking) - sleep(6) - src.overlays = null - overlays += image('icons/obj/storage.dmi', icon_locking) - locked = 0 - if(istype(weapon, /obj/item/weapon/melee/energy/blade)) - var/datum/effect/system/spark_spread/spark_system = new /datum/effect/system/spark_spread() - spark_system.set_up(5, 0, src.loc) - spark_system.start() - playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1) - playsound(src.loc, "sparks", 50, 1) - to_chat(user, "You slice through the lock on [src].") - else - to_chat(user, "You short out the lock on [src].") - return - - - MouseDrop(over_object, src_location, over_location) - if(locked) - src.add_fingerprint(usr) - return - ..() - - - attack_self(mob/user as mob) - user.set_machine(src) - var/dat = text("[]
\n\nLock Status: []",src, (src.locked ? "LOCKED" : "UNLOCKED")) - var/message = "Code" - if((src.l_set == 0) && (!src.emagged) && (!src.l_setshort)) - dat += text("

\n5-DIGIT PASSCODE NOT SET.
ENTER NEW PASSCODE.
") - if(src.emagged) - dat += text("

\nLOCKING SYSTEM ERROR - 1701") - if(src.l_setshort) - dat += text("

\nALERT: MEMORY SYSTEM ERROR - 6040 201") - message = text("[]", src.code) - if(!src.locked) - message = "*****" - dat += {"


\n>[message]
\n - 1- - 2- - 3
\n - 4- - 5- - 6
\n - 7- - 8- - 9
\n - R- - 0- - E
\n
"} - user << browse(dat, "window=caselock;size=300x280") - - Topic(href, href_list) - ..() - if((usr.stat || usr.restrained()) || (get_dist(src, usr) > 1)) - return - if(href_list["type"]) - if(href_list["type"] == "E") - if((src.l_set == 0) && (length(src.code) == 5) && (!src.l_setshort) && (src.code != "ERROR")) - src.l_code = src.code - src.l_set = 1 - else if((src.code == src.l_code) && (src.emagged == 0) && (src.l_set == 1)) - src.locked = 0 - src.overlays = null - overlays += image('icons/obj/storage.dmi', icon_opened) - src.code = null + if((istype(W, /obj/item/device/multitool)) && (open == 1)&& (!l_hacking)) + user.show_message("Now attempting to reset internal memory, please hold.", 1) + l_hacking = 1 + if(do_after(usr, 100, target = src)) + if(prob(40)) + l_setshort = 1 + l_set = 0 + user.show_message("Internal memory reset. Please give it a few seconds to reinitialize.", 1) + sleep(80) + l_setshort = 0 + l_hacking = 0 else - src.code = "ERROR" - else - if((href_list["type"] == "R") && (src.emagged == 0) && (!src.l_setshort)) - src.locked = 1 - src.overlays = null - src.code = null - src.close(usr) - else - src.code += text("[]", href_list["type"]) - if(length(src.code) > 5) - src.code = "ERROR" - src.add_fingerprint(usr) - for(var/mob/M in viewers(1, src.loc)) - if((M.client && M.machine == src)) - src.attack_self(M) - return + user.show_message("Unable to reset internal memory.", 1) + l_hacking = 0 + else + l_hacking = 0 + return + //At this point you have exhausted all the special things to do when locked + // ... but it's still locked. return + return ..() + +/obj/item/weapon/storage/secure/emag_act(user as mob, weapon as obj) + if(!emagged) + emagged = 1 + overlays += image('icons/obj/storage.dmi', icon_sparking) + sleep(6) + overlays = null + overlays += image('icons/obj/storage.dmi', icon_locking) + locked = 0 + if(istype(weapon, /obj/item/weapon/melee/energy/blade)) + var/datum/effect/system/spark_spread/spark_system = new /datum/effect/system/spark_spread() + spark_system.set_up(5, 0, src.loc) + spark_system.start() + playsound(loc, 'sound/weapons/blade1.ogg', 50, 1) + playsound(loc, "sparks", 50, 1) + to_chat(user, "You slice through the lock on [src].") + else + to_chat(user, "You short out the lock on [src].") + return + + +/obj/item/weapon/storage/secure/MouseDrop(over_object, src_location, over_location) + if(locked) + add_fingerprint(usr) + to_chat(usr, "It's locked!") + return 0 + ..() + +/obj/item/weapon/storage/secure/attack_self(mob/user as mob) + user.set_machine(src) + var/dat = text("[]
\n\nLock Status: []", src, (locked ? "LOCKED" : "UNLOCKED")) + var/message = "Code" + if((l_set == 0) && (!emagged) && (!l_setshort)) + dat += text("

\n5-DIGIT PASSCODE NOT SET.
ENTER NEW PASSCODE.
") + if(emagged) + dat += text("

\nLOCKING SYSTEM ERROR - 1701") + if(l_setshort) + dat += text("

\nALERT: MEMORY SYSTEM ERROR - 6040 201") + message = text("[]", code) + if(!locked) + message = "*****" + dat += {"


\n>[message]
\n + 1- + 2- + 3
\n + 4- + 5- + 6
\n + 7- + 8- + 9
\n + R- + 0- + E
\n
"} + user << browse(dat, "window=caselock;size=300x280") + +/obj/item/weapon/storage/secure/Topic(href, href_list) + ..() + if(usr.incapacitated() || (get_dist(src, usr) > 1)) + return + if(href_list["type"]) + if(href_list["type"] == "E") + if((l_set == 0) && (length(code) == 5) && (!l_setshort) && (code != "ERROR")) + l_code = code + l_set = 1 + else if((code == l_code) && (emagged == 0) && (l_set == 1)) + locked = 0 + overlays = null + overlays += image('icons/obj/storage.dmi', icon_opened) + code = null + else + code = "ERROR" + else + if((href_list["type"] == "R") && (emagged == 0) && (!l_setshort)) + locked = 1 + overlays = null + code = null + close(usr) + else + code += text("[]", href_list["type"]) + if(length(code) > 5) + code = "ERROR" + add_fingerprint(usr) + for(var/mob/M in viewers(1, loc)) + if((M.client && M.machine == src)) + attack_self(M) + return + return + /obj/item/weapon/storage/secure/can_be_inserted(obj/item/W as obj, stop_messages = 0) if(!locked) return ..() @@ -160,8 +161,10 @@ return 0 /obj/item/weapon/storage/secure/hear_talk(mob/living/M as mob, msg) + return /obj/item/weapon/storage/secure/hear_message(mob/living/M as mob, msg) + return // ----------------------------- // Secure Briefcase @@ -182,27 +185,27 @@ max_combined_w_class = 21 attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") - New() +/obj/item/weapon/storage/secure/briefcase/New() ..() new /obj/item/weapon/paper(src) new /obj/item/weapon/pen(src) - attack_hand(mob/user as mob) - if((src.loc == user) && (src.locked == 1)) - to_chat(usr, "\red [src] is locked and cannot be opened!") - else if((src.loc == user) && (!src.locked)) - playsound(src.loc, "rustle", 50, 1, -5) - if(user.s_active) - user.s_active.close(user) //Close and re-open - src.show_to(user) - else - ..() - for(var/mob/M in range(1)) - if(M.s_active == src) - src.close(M) - src.orient2hud(user) - src.add_fingerprint(user) - return +/obj/item/weapon/storage/secure/briefcase/attack_hand(mob/user as mob) + if((loc == user) && (locked == 1)) + to_chat(usr, "[src] is locked and cannot be opened!") + else if((loc == user) && !locked) + playsound(loc, "rustle", 50, 1, -5) + if(user.s_active) + user.s_active.close(user) //Close and re-open + show_to(user) + else + ..() + for(var/mob/M in range(1)) + if(M.s_active == src) + close(M) + orient2hud(user) + add_fingerprint(user) + return //Syndie variant of Secure Briefcase. Contains space cash, slightly more robust. /obj/item/weapon/storage/secure/briefcase/syndie @@ -210,7 +213,7 @@ /obj/item/weapon/storage/secure/briefcase/syndie/New() for(var/i = 0, i < storage_slots - 2, i++) - new /obj/item/weapon/spacecash/c1000(src) + handle_item_insertion(new /obj/item/weapon/spacecash/c1000, 1) return ..() // ----------------------------- @@ -224,30 +227,17 @@ icon_opened = "safe0" icon_locking = "safeb" icon_sparking = "safespark" - force = 8.0 + force = 8 w_class = 5 max_w_class = 8 - anchored = 1.0 + anchored = 1 density = 0 cant_hold = list("/obj/item/weapon/storage/secure/briefcase") - New() - ..() - new /obj/item/weapon/paper(src) - new /obj/item/weapon/pen(src) - - attack_hand(mob/user as mob) - return attack_self(user) - -// Clown planet WMD storage -/obj/item/weapon/storage/secure/safe/clown - name="WMD Storage" - -/obj/item/weapon/storage/secure/safe/clown/New() - for(var/i=0;i<10;i++) - new /obj/item/weapon/reagent_containers/food/snacks/pie(src) - - -/obj/item/weapon/storage/secure/safe/HoS/New() +/obj/item/weapon/storage/secure/safe/New() ..() - //new /obj/item/weapon/storage/lockbox/clusterbang(src) This item is currently broken... and probably shouldnt exist to begin with (even though it's cool) \ No newline at end of file + handle_item_insertion(new /obj/item/weapon/paper, 1) + handle_item_insertion(new /obj/item/weapon/pen, 1) + +/obj/item/weapon/storage/secure/safe/attack_hand(mob/user as mob) + return attack_self(user) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 37ff565f4a3..862eed1b986 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -934,11 +934,11 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that for(var/obj/item/briefcase_item in sec_briefcase) qdel(briefcase_item) for(var/i=3, i>0, i--) - sec_briefcase.contents += new /obj/item/weapon/spacecash/c1000 - sec_briefcase.contents += new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow - sec_briefcase.contents += new /obj/item/weapon/gun/projectile/revolver/mateba - sec_briefcase.contents += new /obj/item/ammo_box/a357 - sec_briefcase.contents += new /obj/item/weapon/grenade/plastic/c4 + sec_briefcase.handle_item_insertion(new /obj/item/weapon/spacecash/c1000, 1) + sec_briefcase.handle_item_insertion(new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow, 1) + sec_briefcase.handle_item_insertion(new /obj/item/weapon/gun/projectile/revolver/mateba, 1) + sec_briefcase.handle_item_insertion(new /obj/item/ammo_box/a357, 1) + sec_briefcase.handle_item_insertion(new /obj/item/weapon/grenade/plastic/c4, 1) // briefcase must be unlocked by setting the code. M.equip_to_slot_or_del(sec_briefcase, slot_l_hand) var/obj/item/weapon/implant/dust/DUST = new /obj/item/weapon/implant/dust(M) From 4dcb46d295bd35c1666a507d0681cbdc486946de Mon Sep 17 00:00:00 2001 From: Markolie Date: Thu, 27 Oct 2016 15:00:31 +0200 Subject: [PATCH 23/30] More minor briefcase changes --- code/game/objects/items/weapons/storage/secure.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index 54231db8c40..cafaa09c170 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -42,7 +42,7 @@ user.show_message("You [open ? "open" : "close"] the service panel.", 1) return - if((istype(W, /obj/item/device/multitool)) && (open == 1)&& (!l_hacking)) + if((istype(W, /obj/item/device/multitool)) && (open == 1) && (!l_hacking)) user.show_message("Now attempting to reset internal memory, please hold.", 1) l_hacking = 1 if(do_after(usr, 100, target = src)) @@ -177,7 +177,7 @@ item_state = "sec-case" flags = CONDUCT hitsound = "swing_hit" - force = 8.0 + force = 8 throw_speed = 2 throw_range = 4 w_class = 4 @@ -187,8 +187,8 @@ /obj/item/weapon/storage/secure/briefcase/New() ..() - new /obj/item/weapon/paper(src) - new /obj/item/weapon/pen(src) + handle_item_insertion(new /obj/item/weapon/paper, 1) + handle_item_insertion(new /obj/item/weapon/pen, 1) /obj/item/weapon/storage/secure/briefcase/attack_hand(mob/user as mob) if((loc == user) && (locked == 1)) @@ -209,7 +209,7 @@ //Syndie variant of Secure Briefcase. Contains space cash, slightly more robust. /obj/item/weapon/storage/secure/briefcase/syndie - force = 15.0 + force = 15 /obj/item/weapon/storage/secure/briefcase/syndie/New() for(var/i = 0, i < storage_slots - 2, i++) From a77b501ebfbdbd4c94efc60e25270f6dec9a7991 Mon Sep 17 00:00:00 2001 From: Markolie Date: Thu, 27 Oct 2016 15:03:07 +0200 Subject: [PATCH 24/30] Runtime fix --- code/game/objects/items/weapons/storage/secure.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index cafaa09c170..e848eec1aca 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -186,7 +186,7 @@ attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") /obj/item/weapon/storage/secure/briefcase/New() - ..() + ..() handle_item_insertion(new /obj/item/weapon/paper, 1) handle_item_insertion(new /obj/item/weapon/pen, 1) @@ -212,9 +212,9 @@ force = 15 /obj/item/weapon/storage/secure/briefcase/syndie/New() + ..() for(var/i = 0, i < storage_slots - 2, i++) handle_item_insertion(new /obj/item/weapon/spacecash/c1000, 1) - return ..() // ----------------------------- // Secure Safe From bc50f58428c2fd37894e45e7ecafe0436953e92c Mon Sep 17 00:00:00 2001 From: Markolie Date: Thu, 27 Oct 2016 16:18:44 +0200 Subject: [PATCH 25/30] Remove obsolete /hos safe from MetaStation --- _maps/map_files/MetaStation/MetaStation.v41A.II.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index 1590325df0e..15a969e7a47 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -365,7 +365,7 @@ "aha" = (/obj/machinery/computer/prisoner,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) "ahb" = (/obj/machinery/computer/security,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) "ahc" = (/obj/machinery/computer/secure_data,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) -"ahd" = (/obj/structure/table/woodentable,/obj/machinery/requests_console{announcementConsole = 1; department = "Head of Security's Desk"; departmentType = 5; name = "Head of Security RC"; pixel_x = 0; pixel_y = 30},/obj/machinery/computer/med_data/laptop,/obj/item/weapon/storage/secure/safe/HoS{pixel_x = 36; pixel_y = 28},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) +"ahd" = (/obj/structure/table/woodentable,/obj/machinery/requests_console{announcementConsole = 1; department = "Head of Security's Desk"; departmentType = 5; name = "Head of Security RC"; pixel_x = 0; pixel_y = 30},/obj/machinery/computer/med_data/laptop,/obj/item/weapon/storage/secure/safe{pixel_x = 36; pixel_y = 28},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) "ahe" = (/turf/simulated/wall,/area/security/range) "ahf" = (/obj/machinery/alarm{pixel_y = 28},/obj/structure/rack,/obj/item/weapon/gun/energy/ionrifle,/obj/item/clothing/suit/armor/laserproof,/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/security/warden) "ahg" = (/obj/machinery/door/airlock/external{name = "Escape Pod Three"},/turf/simulated/floor/plating,/area/crew_quarters/fitness{name = "\improper Recreation Area"}) From d2cb6a28442582ca457a01117986709440354143 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Thu, 27 Oct 2016 10:44:54 -0400 Subject: [PATCH 26/30] oops --- code/modules/food_and_drinks/food/candy.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/food_and_drinks/food/candy.dm b/code/modules/food_and_drinks/food/candy.dm index 63385bfb2ce..32a4a584a88 100644 --- a/code/modules/food_and_drinks/food/candy.dm +++ b/code/modules/food_and_drinks/food/candy.dm @@ -23,7 +23,7 @@ icon_state = "chocolatebar" filling_color = "#7D5F46" bitesize = 2 - list_reagents = list("nutriment" = 2, "chocolate" = 2) + list_reagents = list("nutriment" = 2, "chocolate" = 4) /obj/item/weapon/reagent_containers/food/snacks/candy/caramel name = "Caramel" @@ -142,7 +142,7 @@ icon_state = "candycane" filling_color = "#F2F2F2" bitesize = 2 - list_reagents = list("minttoxin" = 4, "sugar" = 5) + list_reagents = list("minttoxin" = 1, "sugar" = 5) /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear name = "gummy bear" From 284e853f7e914836684abed8582dde551cb2277c Mon Sep 17 00:00:00 2001 From: Twinmold Date: Sat, 29 Oct 2016 04:09:23 -0500 Subject: [PATCH 27/30] Fixes Fake Blood Sample on Hotel Cleaver The blood sample of the cleaver in the cult room in the space hotel has an unlisted blood sample, causing a runtime when scanned by the detective's scanner, breaking said scanner. This fixes the variable by turning it into a proper list without changing the underlying value. As such, it does give 1e+009 as the readout, but otherwise works appropriately with no runtime. :cl:Twinmold Fix: Fixes a runtime issue caused by using the detective's scanner on the space hotel cleaver. /:cl: --- _maps/map_files/RandomZLevels/spacehotel.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/map_files/RandomZLevels/spacehotel.dmm b/_maps/map_files/RandomZLevels/spacehotel.dmm index 6a368e05b16..c09808a51f8 100644 --- a/_maps/map_files/RandomZLevels/spacehotel.dmm +++ b/_maps/map_files/RandomZLevels/spacehotel.dmm @@ -523,7 +523,7 @@ "kc" = (/obj/machinery/door/airlock{name = "Supply Closet"},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) "kd" = (/obj/machinery/door/airlock/glass{name = "Gateway"},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) "ke" = (/obj/item/weapon/melee/cultblade,/turf/unsimulated/floor{name = "engraved floor"; icon_state = "cult"},/area/awaymission/spacehotel) -"kf" = (/obj/item/weapon/kitchen/knife/butcher{blood_DNA = 1e+009},/obj/effect/decal/cleanable/blood/old,/turf/unsimulated/floor{name = "engraved floor"; icon_state = "cult"},/area/awaymission/spacehotel) +"kf" = (/obj/item/weapon/kitchen/knife/butcher{blood_DNA = list("1e+009" = "O-")},/obj/effect/decal/cleanable/blood/old,/turf/unsimulated/floor{name = "engraved floor"; icon_state = "cult"},/area/awaymission/spacehotel) "kg" = (/obj/machinery/light{dir = 8},/obj/structure/stool/bed/chair/sofa/left{icon_state = "sofaend_left"; dir = 4},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) "kh" = (/obj/effect/hotel_controller,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) "ki" = (/obj/item/weapon/pen,/obj/structure/table/reinforced,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel/reception) From a77b690b029023b3f08685c13bb9165a82d28b6d Mon Sep 17 00:00:00 2001 From: Markolie Date: Sun, 30 Oct 2016 16:41:17 +0100 Subject: [PATCH 28/30] Add cooldown to the plant analyzer print --- code/modules/hydroponics/trays/tray_tools.dm | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/code/modules/hydroponics/trays/tray_tools.dm b/code/modules/hydroponics/trays/tray_tools.dm index 2f41c6cdb5c..4086403c6e0 100644 --- a/code/modules/hydroponics/trays/tray_tools.dm +++ b/code/modules/hydroponics/trays/tray_tools.dm @@ -13,19 +13,23 @@ origin_tech = "magnets=1;biotech=1" var/form_title var/last_data + var/print_cooldown = 0 + var/cooldown_length = 50 // Five seconds /obj/item/device/analyzer/plant_analyzer/proc/print_report_verb() set name = "Print Plant Report" set category = "Object" set src = usr - if(usr.stat || usr.restrained() || usr.lying) + if(usr.incapacitated()) return + print_report(usr) /obj/item/device/analyzer/plant_analyzer/Topic(href, href_list) if(..()) - return + return 1 + if(href_list["print"]) print_report(usr) @@ -33,6 +37,11 @@ if(!last_data) to_chat(user, "There is no scan data to print.") return + if(print_cooldown > world.time) + to_chat(user, "The printer is still cooling down.") + return + print_cooldown = world.time + cooldown_length + playsound(loc, "sound/goonstation/machines/printer_thermal.ogg", 50, 1) var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(get_turf(src)) P.name = "paper - [form_title]" From 564e4af0cbab677b80ea57aa36cfe7a2f09cd5dc Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Sun, 30 Oct 2016 22:40:26 -0400 Subject: [PATCH 29/30] Automatic changelog generation for PR #5601 --- html/changelogs/AutoChangeLog-pr-5601.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5601.yml diff --git a/html/changelogs/AutoChangeLog-pr-5601.yml b/html/changelogs/AutoChangeLog-pr-5601.yml new file mode 100644 index 00000000000..cd74a767312 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5601.yml @@ -0,0 +1,4 @@ +author: Crazylemon +delete-after: True +changes: + - tweak: "Status effects should work a little more consistently now" From 054365fa82e92c68253da0ba5b0a7ff9baed29a9 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Sun, 30 Oct 2016 22:44:50 -0400 Subject: [PATCH 30/30] Automatic changelog generation for PR #5826 --- html/changelogs/AutoChangeLog-pr-5826.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5826.yml diff --git a/html/changelogs/AutoChangeLog-pr-5826.yml b/html/changelogs/AutoChangeLog-pr-5826.yml new file mode 100644 index 00000000000..62bc989c620 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5826.yml @@ -0,0 +1,4 @@ +author: Twinmold93 +delete-after: True +changes: + - bugfix: "Fixes a runtime issue caused by using the detective's scanner on the space hotel cleaver."