diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm index c0cf15616fa..66468a516cc 100644 --- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm @@ -164,7 +164,7 @@ radio_controller.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = radio_controller.add_object(src, frequency, filter = RADIO_ATMOSIA) + radio_connection = radio_controller.add_object(src, frequency, radio_filter = RADIO_ATMOSIA) /obj/machinery/atmospherics/binary/dp_vent_pump/proc/broadcast_status() if(!radio_connection) @@ -185,7 +185,7 @@ "external" = external_pressure_bound, "sigtype" = "status" ) - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) + radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) return 1 diff --git a/code/ATMOSPHERICS/components/omni_devices/filter.dm b/code/ATMOSPHERICS/components/omni_devices/filter.dm index feb1b5cb93c..8710623dfdd 100644 --- a/code/ATMOSPHERICS/components/omni_devices/filter.dm +++ b/code/ATMOSPHERICS/components/omni_devices/filter.dm @@ -1,11 +1,11 @@ //-------------------------------------------- // Gas filter - omni variant //-------------------------------------------- -/obj/machinery/atmospherics/omni/filter +/obj/machinery/atmospherics/omni/atmos_filter name = "omni gas filter" icon_state = "map_filter" - var/list/filters = new() + var/list/atmos_filters = new() var/datum/omni_port/input var/datum/omni_port/output @@ -18,27 +18,27 @@ var/list/filtering_outputs = list() //maps gasids to gas_mixtures -/obj/machinery/atmospherics/omni/filter/New() +/obj/machinery/atmospherics/omni/atmos_filter/New() ..() rebuild_filtering_list() for(var/datum/omni_port/P in ports) P.air.volume = ATMOS_DEFAULT_VOLUME_FILTER -/obj/machinery/atmospherics/omni/filter/Destroy() +/obj/machinery/atmospherics/omni/atmos_filter/Destroy() input = null output = null - filters.Cut() + atmos_filters.Cut() return ..() -/obj/machinery/atmospherics/omni/filter/sort_ports() +/obj/machinery/atmospherics/omni/atmos_filter/sort_ports() for(var/datum/omni_port/P in ports) if(P.update) if(output == P) output = null if(input == P) input = null - if(filters.Find(P)) - filters -= P + if(atmos_filters.Find(P)) + atmos_filters -= P P.air.volume = 200 switch(P.mode) @@ -47,17 +47,17 @@ if(ATM_OUTPUT) output = P if(ATM_O2 to ATM_N2O) - filters += P + atmos_filters += P -/obj/machinery/atmospherics/omni/filter/error_check() - if(!input || !output || !filters) +/obj/machinery/atmospherics/omni/atmos_filter/error_check() + if(!input || !output || !atmos_filters) return 1 - if(filters.len < 1) //requires at least 1 filter ~otherwise why are you using a filter? + if(atmos_filters.len < 1) //requires at least 1 atmos_filter ~otherwise why are you using a filter? return 1 return 0 -/obj/machinery/atmospherics/omni/filter/process() +/obj/machinery/atmospherics/omni/atmos_filter/process() if(!..()) return 0 @@ -79,13 +79,13 @@ input.network.update = 1 if(output.network) output.network.update = 1 - for(var/datum/omni_port/P in filters) + for(var/datum/omni_port/P in atmos_filters) if(P.network) P.network.update = 1 return 1 -/obj/machinery/atmospherics/omni/filter/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) +/obj/machinery/atmospherics/omni/atmos_filter/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) usr.set_machine(src) var/list/data = new() @@ -100,7 +100,7 @@ ui.open() -/obj/machinery/atmospherics/omni/filter/proc/build_uidata() +/obj/machinery/atmospherics/omni/atmos_filter/proc/build_uidata() var/list/data = new() data["power"] = use_power @@ -113,22 +113,22 @@ var/input = 0 var/output = 0 - var/filter = 1 + var/atmo_filter = 1 var/f_type = null switch(P.mode) if(ATM_INPUT) input = 1 - filter = 0 + atmo_filter = 0 if(ATM_OUTPUT) output = 1 - filter = 0 + atmo_filter = 0 if(ATM_O2 to ATM_N2O) f_type = mode_send_switch(P.mode) portData[++portData.len] = list("dir" = dir_name(P.dir, capitalize = 1), \ "input" = input, \ "output" = output, \ - "filter" = filter, \ + "atmo_filter" = atmo_filter, \ "f_type" = f_type) if(portData.len) @@ -139,7 +139,7 @@ return data -/obj/machinery/atmospherics/omni/filter/proc/mode_send_switch(var/mode = ATM_NONE) +/obj/machinery/atmospherics/omni/atmos_filter/proc/mode_send_switch(var/mode = ATM_NONE) switch(mode) if(ATM_O2) return "Oxygen" @@ -154,7 +154,7 @@ else return null -/obj/machinery/atmospherics/omni/filter/Topic(href, href_list) +/obj/machinery/atmospherics/omni/atmos_filter/Topic(href, href_list) if(..()) return 1 switch(href_list["command"]) if("power") @@ -183,7 +183,7 @@ nanomanager.update_uis(src) return -/obj/machinery/atmospherics/omni/filter/proc/mode_return_switch(var/mode) +/obj/machinery/atmospherics/omni/atmos_filter/proc/mode_return_switch(var/mode) switch(mode) if("Oxygen") return ATM_O2 @@ -204,7 +204,7 @@ else return null -/obj/machinery/atmospherics/omni/filter/proc/switch_filter(var/dir, var/mode) +/obj/machinery/atmospherics/omni/atmos_filter/proc/switch_filter(var/dir, var/mode) //check they aren't trying to disable the input or output ~this can only happen if they hack the cached tmpl file for(var/datum/omni_port/P in ports) if(P.dir == dir) @@ -213,7 +213,7 @@ switch_mode(dir, mode) -/obj/machinery/atmospherics/omni/filter/proc/switch_mode(var/port, var/mode) +/obj/machinery/atmospherics/omni/atmos_filter/proc/switch_mode(var/port, var/mode) if(mode == null || !port) return var/datum/omni_port/target_port = null @@ -246,14 +246,14 @@ update_ports() -/obj/machinery/atmospherics/omni/filter/proc/rebuild_filtering_list() +/obj/machinery/atmospherics/omni/atmos_filter/proc/rebuild_filtering_list() filtering_outputs.Cut() for(var/datum/omni_port/P in ports) var/gasid = mode_to_gasid(P.mode) if(gasid) filtering_outputs[gasid] = P.air -/obj/machinery/atmospherics/omni/filter/proc/handle_port_change(var/datum/omni_port/P) +/obj/machinery/atmospherics/omni/atmos_filter/proc/handle_port_change(var/datum/omni_port/P) switch(P.mode) if(ATM_NONE) initialize_directions &= ~P.dir diff --git a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm index 38d889f37b2..2ab891424cf 100644 --- a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm +++ b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm @@ -120,7 +120,7 @@ var/core_icon = null if(istype(src, /obj/machinery/atmospherics/omni/mixer)) core_icon = "mixer" - else if(istype(src, /obj/machinery/atmospherics/omni/filter)) + else if(istype(src, /obj/machinery/atmospherics/omni/atmos_filter)) core_icon = "filter" else return diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index 5bc9f8d20f9..e9fe37f8a16 100755 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -1,4 +1,4 @@ -/obj/machinery/atmospherics/trinary/filter +/obj/machinery/atmospherics/trinary/atmos_filter icon = 'icons/atmos/filter.dmi' icon_state = "map" density = 0 @@ -30,13 +30,13 @@ var/frequency = 0 var/datum/radio_frequency/radio_connection -/obj/machinery/atmospherics/trinary/filter/proc/set_frequency(new_frequency) +/obj/machinery/atmospherics/trinary/atmos_filter/proc/set_frequency(new_frequency) radio_controller.remove_object(src, frequency) frequency = new_frequency if(frequency) radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) -/obj/machinery/atmospherics/trinary/filter/New() +/obj/machinery/atmospherics/trinary/atmos_filter/New() ..() switch(filter_type) if(0) //removing hydrocarbons @@ -54,8 +54,8 @@ air2.volume = ATMOS_DEFAULT_VOLUME_FILTER air3.volume = ATMOS_DEFAULT_VOLUME_FILTER -/obj/machinery/atmospherics/trinary/filter/update_icon() - if(istype(src, /obj/machinery/atmospherics/trinary/filter/m_filter)) +/obj/machinery/atmospherics/trinary/atmos_filter/update_icon() + if(istype(src, /obj/machinery/atmospherics/trinary/atmos_filter/m_filter)) icon_state = "m" else icon_state = "" @@ -68,7 +68,7 @@ icon_state += "off" use_power = 0 -/obj/machinery/atmospherics/trinary/filter/update_underlays() +/obj/machinery/atmospherics/trinary/atmos_filter/update_underlays() if(..()) underlays.Cut() var/turf/T = get_turf(src) @@ -77,23 +77,23 @@ add_underlay(T, node1, turn(dir, -180)) - if(istype(src, /obj/machinery/atmospherics/trinary/filter/m_filter)) + if(istype(src, /obj/machinery/atmospherics/trinary/atmos_filter/m_filter)) add_underlay(T, node2, turn(dir, 90)) else add_underlay(T, node2, turn(dir, -90)) add_underlay(T, node3, dir) -/obj/machinery/atmospherics/trinary/filter/hide(var/i) +/obj/machinery/atmospherics/trinary/atmos_filter/hide(var/i) update_underlays() -/obj/machinery/atmospherics/trinary/filter/power_change() +/obj/machinery/atmospherics/trinary/atmos_filter/power_change() var/old_stat = stat ..() if(old_stat != stat) update_icon() -/obj/machinery/atmospherics/trinary/filter/process() +/obj/machinery/atmospherics/trinary/atmos_filter/process() ..() last_power_draw = 0 @@ -124,11 +124,11 @@ return 1 -/obj/machinery/atmospherics/trinary/filter/initialize() +/obj/machinery/atmospherics/trinary/atmos_filter/initialize() set_frequency(frequency) ..() -/obj/machinery/atmospherics/trinary/filter/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) +/obj/machinery/atmospherics/trinary/atmos_filter/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) if (!istype(W, /obj/item/weapon/wrench)) return ..() if(!can_unwrench()) @@ -146,7 +146,7 @@ qdel(src) -/obj/machinery/atmospherics/trinary/filter/attack_hand(user as mob) // -- TLE +/obj/machinery/atmospherics/trinary/atmos_filter/attack_hand(user as mob) // -- TLE if(..()) return @@ -188,11 +188,11 @@ Flow rate: [round(last_flow_rate, 0.1)]L/s "} - user << browse("[src.name] control[dat]", "window=atmo_filter") - onclose(user, "atmo_filter") + user << browse("[src.name] control[dat]", "window=atmos_filter") + onclose(user, "atmos_filter") return -/obj/machinery/atmospherics/trinary/filter/Topic(href, href_list) // -- TLE +/obj/machinery/atmospherics/trinary/atmos_filter/Topic(href, href_list) // -- TLE if(..()) return 1 usr.set_machine(src) @@ -230,13 +230,13 @@ */ return -/obj/machinery/atmospherics/trinary/filter/m_filter +/obj/machinery/atmospherics/trinary/atmos_filter/m_filter icon_state = "mmap" dir = SOUTH initialize_directions = SOUTH|NORTH|EAST -obj/machinery/atmospherics/trinary/filter/m_filter/init_dir() +obj/machinery/atmospherics/trinary/atmos_filter/m_filter/init_dir() switch(dir) if(NORTH) initialize_directions = WEST|NORTH|SOUTH @@ -247,7 +247,7 @@ obj/machinery/atmospherics/trinary/filter/m_filter/init_dir() if(WEST) initialize_directions = WEST|SOUTH|EAST -/obj/machinery/atmospherics/trinary/filter/m_filter/initialize() +/obj/machinery/atmospherics/trinary/atmos_filter/m_filter/initialize() set_frequency(frequency) if(node1 && node2 && node3) return diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index 19e5615291a..9ebf60632ce 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -158,6 +158,7 @@ #define O_MOUTH "mouth" #define O_EYES "eyes" #define O_HEART "heart" +#define O_CELL "cell" #define O_LUNGS "lungs" #define O_BRAIN "brain" #define O_LIVER "liver" diff --git a/code/_helpers/mobs.dm b/code/_helpers/mobs.dm index 8ac42dc0b92..eb1ef73eb7e 100644 --- a/code/_helpers/mobs.dm +++ b/code/_helpers/mobs.dm @@ -24,6 +24,15 @@ return mobs +/proc/mobs_in_xray_view(var/range, var/source) + var/list/mobs = list() + for(var/atom/movable/AM in orange(range, source)) + var/M = AM.get_mob() + if(M) + mobs += M + + return mobs + proc/random_hair_style(gender, species = "Human") var/h_style = "Bald" diff --git a/code/controllers/communications.dm b/code/controllers/communications.dm index ef83e95f774..4b56d94f0d2 100644 --- a/code/controllers/communications.dm +++ b/code/controllers/communications.dm @@ -5,13 +5,13 @@ Note that walkie-talkie, intercoms and headsets handle transmission using nonstandard way. procs: - add_object(obj/device as obj, var/new_frequency as num, var/filter as text|null = null) + add_object(obj/device as obj, var/new_frequency as num, var/radio_filter as text|null = null) Adds listening object. parameters: device - device receiving signals, must have proc receive_signal (see description below). one device may listen several frequencies, but not same frequency twice. new_frequency - see possibly frequencies below; - filter - thing for optimization. Optional, but recommended. + radio_filter - thing for optimization. Optional, but recommended. All filters should be consolidated in this file, see defines later. Device without listening filter will receive all signals (on specified frequency). Device with filter will receive any signals sent without filter. @@ -30,12 +30,12 @@ radio_frequency is a global object maintaining list of devices that listening specific frequency. procs: - post_signal(obj/source as obj|null, datum/signal/signal, var/filter as text|null = null, var/range as num|null = null) + post_signal(obj/source as obj|null, datum/signal/signal, var/radio_filter as text|null = null, var/range as num|null = null) Sends signal to all devices that wants such signal. parameters: source - object, emitted signal. Usually, devices will not receive their own signals. signal - see description below. - filter - described above. + radio_filter - described above. range - radius of regular byond's square circle on that z-level. null means everywhere, on all z-levels. obj/proc/receive_signal(datum/signal/signal, var/receive_method as num, var/receive_param) @@ -220,7 +220,7 @@ var/global/datum/controller/radio/radio_controller /datum/controller/radio var/list/datum/radio_frequency/frequencies = list() -/datum/controller/radio/proc/add_object(obj/device as obj, var/new_frequency as num, var/filter = null as text|null) +/datum/controller/radio/proc/add_object(obj/device as obj, var/new_frequency as num, var/radio_filter = null as text|null) var/f_text = num2text(new_frequency) var/datum/radio_frequency/frequency = frequencies[f_text] @@ -229,7 +229,7 @@ var/global/datum/controller/radio/radio_controller frequency.frequency = new_frequency frequencies[f_text] = frequency - frequency.add_listener(device, filter) + frequency.add_listener(device, radio_filter) return frequency /datum/controller/radio/proc/remove_object(obj/device, old_frequency) @@ -260,15 +260,15 @@ var/global/datum/controller/radio/radio_controller var/frequency as num var/list/list/obj/devices = list() -/datum/radio_frequency/proc/post_signal(obj/source as obj|null, datum/signal/signal, var/filter = null as text|null, var/range = null as num|null) +/datum/radio_frequency/proc/post_signal(obj/source as obj|null, datum/signal/signal, var/radio_filter = null as text|null, var/range = null as num|null) var/turf/start_point if(range) start_point = get_turf(source) if(!start_point) qdel(signal) return 0 - if (filter) - send_to_filter(source, signal, filter, start_point, range) + if (radio_filter) + send_to_filter(source, signal, radio_filter, start_point, range) send_to_filter(source, signal, RADIO_DEFAULT, start_point, range) else //Broadcast the signal to everyone! @@ -276,11 +276,11 @@ var/global/datum/controller/radio/radio_controller send_to_filter(source, signal, next_filter, start_point, range) //Sends a signal to all machines belonging to a given filter. Should be called by post_signal() -/datum/radio_frequency/proc/send_to_filter(obj/source, datum/signal/signal, var/filter, var/turf/start_point = null, var/range = null) +/datum/radio_frequency/proc/send_to_filter(obj/source, datum/signal/signal, var/radio_filter, var/turf/start_point = null, var/range = null) if (range && !start_point) return - for(var/obj/device in devices[filter]) + for(var/obj/device in devices[radio_filter]) if(device == source) continue if(range) @@ -292,14 +292,14 @@ var/global/datum/controller/radio/radio_controller device.receive_signal(signal, TRANSMISSION_RADIO, frequency) -/datum/radio_frequency/proc/add_listener(obj/device as obj, var/filter as text|null) - if (!filter) - filter = RADIO_DEFAULT - //log_admin("add_listener(device=[device],filter=[filter]) frequency=[frequency]") - var/list/obj/devices_line = devices[filter] +/datum/radio_frequency/proc/add_listener(obj/device as obj, var/radio_filter as text|null) + if (!radio_filter) + radio_filter = RADIO_DEFAULT + //log_admin("add_listener(device=[device],radio_filter=[radio_filter]) frequency=[frequency]") + var/list/obj/devices_line = devices[radio_filter] if (!devices_line) devices_line = new - devices[filter] = devices_line + devices[radio_filter] = devices_line devices_line+=device // var/list/obj/devices_line___ = devices[filter_str] // var/l = devices_line___.len diff --git a/code/datums/outfits/costumes/halloween.dm b/code/datums/outfits/costumes/halloween.dm new file mode 100644 index 00000000000..d4ad8fa8f99 --- /dev/null +++ b/code/datums/outfits/costumes/halloween.dm @@ -0,0 +1,115 @@ +/decl/hierarchy/outfit/h_masked_killer + name = "Costume - Masked Killer" + uniform = /obj/item/clothing/under/overalls + shoes = /obj/item/clothing/shoes/white + gloves = /obj/item/clothing/gloves/sterile/latex + mask = /obj/item/clothing/mask/surgical + head = /obj/item/clothing/head/welding + suit = /obj/item/clothing/suit/storage/apron + r_hand = /obj/item/weapon/material/twohanded/fireaxe/foam + +/decl/hierarchy/outfit/masked_killer/post_equip(var/mob/living/carbon/human/H) + var/victim = get_mannequin(H.ckey) + for(var/obj/item/carried_item in H.get_equipped_items(TRUE)) + carried_item.add_blood(victim) //Oh yes, there will be blood.. just not blood from the killer because that's odd. //If I knew how to make fake blood, I would + +/decl/hierarchy/outfit/h_professional + name = "Costume - Professional" + uniform = /obj/item/clothing/under/suit_jacket{ starting_accessories=list(/obj/item/clothing/accessory/wcoat) } + shoes = /obj/item/clothing/shoes/black + gloves = /obj/item/clothing/gloves/black + glasses = /obj/item/clothing/glasses/fakesunglasses + l_pocket = /obj/item/toy/sword + +/decl/hierarchy/outfit/h_professional/post_equip(var/mob/living/carbon/human/H) + var/obj/item/weapon/storage/briefcase/new_briefcase = new(H) + for(var/obj/item/briefcase_item in new_briefcase) + qdel(briefcase_item) + new_briefcase.contents += new /obj/item/toy/crossbow + new_briefcase.contents += new /obj/item/weapon/gun/projectile/revolver/capgun + new_briefcase.contents += new /obj/item/clothing/mask/gas/clown_hat + H.equip_to_slot_or_del(new_briefcase, slot_l_hand) + +/decl/hierarchy/outfit/h_horrorcop + name = "Costume - Slasher Movie Cop" + uniform = /obj/item/clothing/under/pcrc{ starting_accessories=list(/obj/item/clothing/accessory/holster) } + shoes = /obj/item/clothing/shoes/black + gloves = /obj/item/clothing/gloves/black + glasses = /obj/item/clothing/glasses/fakesunglasses + mask = /obj/item/clothing/mask/fakemoustache + head = /obj/item/clothing/head/beret + r_hand = /obj/item/weapon/gun/projectile/revolver/capgun + +/decl/hierarchy/outfit/h_horrorcop/post_equip(var/mob/living/carbon/human/H) + var/obj/item/clothing/under/U = H.w_uniform + if(U.accessories.len) + for(var/obj/item/clothing/accessory/A in U.accessories) + if(istype(A, /obj/item/clothing/accessory/holster)) + var/obj/item/clothing/accessory/holster/O = A + O.holster_verb() + +/decl/hierarchy/outfit/h_cowboy + name = "Costume - Cowboy" + uniform = /obj/item/clothing/under/pants{ starting_accessories=list(/obj/item/clothing/accessory/holster) } + shoes = /obj/item/clothing/shoes/boots/cowboy + head = /obj/item/clothing/head/cowboy_hat + gloves = /obj/item/clothing/gloves/fingerless + suit = /obj/item/clothing/accessory/poncho + r_hand = /obj/item/weapon/gun/projectile/revolver/capgun + +/decl/hierarchy/outfit/h_cowboy/post_equip(var/mob/living/carbon/human/H) + var/obj/item/clothing/under/U = H.w_uniform + if(U.accessories.len) + for(var/obj/item/clothing/accessory/A in U.accessories) + if(istype(A, /obj/item/clothing/accessory/holster)) + var/obj/item/clothing/accessory/holster/O = A + O.holster_verb() + +/decl/hierarchy/outfit/h_lumberjack + name = "Costume - Lumberjack" + uniform = /obj/item/clothing/under/pants{ starting_accessories=list(/obj/item/clothing/accessory/sweater/blackneck) } + shoes = /obj/item/clothing/shoes/boots/workboots + head = /obj/item/clothing/head/beanie + gloves = /obj/item/clothing/gloves/fingerless + suit = /obj/item/clothing/suit/storage/flannel/red + r_hand = /obj/item/weapon/material/twohanded/fireaxe/foam + +/decl/hierarchy/outfit/h_firefighter + name = "Costume - Firefighter" + uniform = /obj/item/clothing/under/pants + shoes = /obj/item/clothing/shoes/boots/workboots + head = /obj/item/clothing/head/hardhat/red + gloves = /obj/item/clothing/gloves/black + suit = /obj/item/clothing/suit/fire/firefighter + mask = /obj/item/clothing/mask/gas + +/decl/hierarchy/outfit/h_highlander + name = "Costume - Highlander" + uniform = /obj/item/clothing/under/kilt + shoes = /obj/item/clothing/shoes/boots/jackboots + head = /obj/item/clothing/head/beret + r_hand = /obj/item/weapon/material/sword/foam + +/decl/hierarchy/outfit/h_vampire + name = "Costume - Vampire" + uniform = /obj/item/clothing/under/suit_jacket/really_black + shoes = /obj/item/clothing/shoes/dress + gloves = /obj/item/clothing/gloves/white + r_hand = /obj/item/weapon/bedsheet/red + +/decl/hierarchy/outfit/h_vampire_hunter + name = "Costume - Vampire Hunter" + uniform = /obj/item/clothing/under/pants/tan + suit = /obj/item/clothing/suit/storage/toggle/brown_jacket/sleeveless + shoes = /obj/item/clothing/shoes/boots/jackboots + gloves = /obj/item/clothing/gloves/fingerless + l_pocket = /obj/item/toy/crossbow + r_pocket = /obj/item/device/flashlight/color/red + +/decl/hierarchy/outfit/h_pirate + name = "Costume - Pirate" + uniform = /obj/item/clothing/under/pirate + shoes = /obj/item/clothing/shoes/brown + head = /obj/item/clothing/head/helmet/space + suit = /obj/item/clothing/suit/pirate + glasses = /obj/item/clothing/glasses/eyepatch \ No newline at end of file diff --git a/code/datums/outfits/horror_killers.dm b/code/datums/outfits/horror_killers.dm index 1a6b284c63d..5958cf55869 100644 --- a/code/datums/outfits/horror_killers.dm +++ b/code/datums/outfits/horror_killers.dm @@ -42,6 +42,7 @@ l_ear = /obj/item/device/radio/headset glasses = /obj/item/clothing/glasses/sunglasses l_pocket = /obj/item/weapon/melee/energy/sword + mask = /obj/item/clothing/mask/gas/clown_hat id_slot = slot_wear_id id_type = /obj/item/weapon/card/id/syndicate/station_access diff --git a/code/datums/supplypacks/contraband.dm b/code/datums/supplypacks/contraband.dm index c200e2edda7..cbe52301dff 100644 --- a/code/datums/supplypacks/contraband.dm +++ b/code/datums/supplypacks/contraband.dm @@ -52,4 +52,53 @@ cost = 50 contraband = 1 containertype = /obj/structure/closet/crate/secure/weapon - containername = "Weapons crate" \ No newline at end of file + containername = "Weapons crate" + +/datum/supply_packs/randomised/misc/telecrate //you get something awesome, a couple of decent things, and a few weak/filler things + name = "ERR_NULL_ENTRY" //null crate! also dream maker is hell, + num_contained = 1 + contains = list( + list( //the operator, + /obj/item/weapon/gun/projectile/shotgun/pump/combat, + /obj/item/clothing/suit/storage/vest/heavy/merc, + /obj/item/clothing/glasses/night, + /obj/item/weapon/storage/box/anti_photons, + /obj/item/ammo_magazine/clip/c12g/pellet, /obj/item/ammo_magazine/clip/c12g + ), + list( //the doc, + /obj/item/weapon/storage/firstaid/combat, + /obj/item/weapon/gun/projectile/dartgun, /obj/item/weapon/reagent_containers/hypospray, + /obj/item/weapon/reagent_containers/glass/bottle/chloralhydrate, + /obj/item/weapon/reagent_containers/glass/bottle/cyanide, + /obj/item/ammo_magazine/chemdart + ), + list( //the sapper, + /obj/item/weapon/melee/energy/sword/ionic_rapier, + /obj/item/weapon/storage/box/syndie_kit/space, //doesn't matter what species you are, + /obj/item/weapon/storage/box/syndie_kit/demolitions, + /obj/item/device/multitool/ai_detector, + /obj/item/weapon/plastique, + /obj/item/weapon/storage/toolbox/syndicate + ), + list( //the infiltrator, + /obj/item/weapon/gun/projectile/silenced, + /obj/item/device/chameleon, + /obj/item/weapon/storage/box/syndie_kit/chameleon, + /obj/item/device/encryptionkey/syndicate, + /obj/item/weapon/card/id/syndicate, + /obj/item/clothing/mask/gas/voice + ), + list( //the professional, + /obj/item/weapon/gun/projectile/silenced, + /obj/item/weapon/gun/energy/ionrifle/pistol, + /obj/item/clothing/glasses/thermal/syndi, + /obj/item/weapon/card/emag, + /obj/item/ammo_magazine/m45/ap, + /obj/item/weapon/material/hatchet/tacknife/combatknife, + /obj/item/clothing/mask/balaclava + ) + ) + cost = 250 //more than a hat crate!, + contraband = 1 + containertype = /obj/structure/largecrate + containername = "Suspicious crate" \ No newline at end of file diff --git a/code/datums/supplypacks/misc.dm b/code/datums/supplypacks/misc.dm index 5be62b2a58b..5a3bb038bb4 100644 --- a/code/datums/supplypacks/misc.dm +++ b/code/datums/supplypacks/misc.dm @@ -38,6 +38,7 @@ /obj/item/clothing/suit/nun, /obj/item/clothing/head/nun_hood, /obj/item/clothing/suit/storage/hooded/chaplain_hoodie, + /obj/item/clothing/suit/storage/hooded/chaplain_hoodie/whiteout, /obj/item/clothing/suit/holidaypriest, /obj/item/clothing/under/wedding/bride_white, /obj/item/weapon/storage/backpack/cultpack, diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index dc6c5e170d0..69965ef7f0e 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -563,7 +563,7 @@ origin_tech = list(TECH_DATA = 3, TECH_MAGNET = 5 ,TECH_MATERIAL = 4, TECH_BLUESPACE = 2) matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 10) -/obj/item/weapon/stock_parts/subspace/filter +/obj/item/weapon/stock_parts/subspace/sub_filter name = "hyperwave filter" icon_state = "hyperwave_filter" desc = "A tiny device capable of filtering and converting super-intense radiowaves." diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 3b642ffd2fd..a092ed7b65e 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -299,9 +299,10 @@ its easier to just keep the beam vertical. //Deal with gloves the pass finger/palm prints. if(!ignoregloves) if(H.gloves && H.gloves != src) - var/obj/item/clothing/gloves/G = H.gloves - if(!prob(G.fingerprint_chance)) - return 0 + if(istype(H.gloves, /obj/item/clothing/gloves)) + var/obj/item/clothing/gloves/G = H.gloves + if(!prob(G.fingerprint_chance)) + return 0 //More adminstuffz if(fingerprintslast != H.key) diff --git a/code/game/gamemodes/technomancer/devices/gloves_of_regen.dm b/code/game/gamemodes/technomancer/devices/gloves_of_regen.dm index 630a9bdb101..0056675afc5 100644 --- a/code/game/gamemodes/technomancer/devices/gloves_of_regen.dm +++ b/code/game/gamemodes/technomancer/devices/gloves_of_regen.dm @@ -19,7 +19,6 @@ min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE - var/mob/living/carbon/human/wearer = null /obj/item/clothing/gloves/regen/equipped(var/mob/living/carbon/human/H) if(H && H.gloves == src) diff --git a/code/game/jobs/job/civilian_chaplain.dm b/code/game/jobs/job/civilian_chaplain.dm index 95809c63f44..88a448c571c 100644 --- a/code/game/jobs/job/civilian_chaplain.dm +++ b/code/game/jobs/job/civilian_chaplain.dm @@ -28,17 +28,21 @@ return spawn(0) - var/religion_name = "Christianity" - var/new_religion = sanitize(input(H, "You are the crew services officer. Would you like to change your religion? Default is Christianity, in SPACE.", "Name change", religion_name), MAX_NAME_LEN) + var/religion_name = "Unitarianism" + var/new_religion = sanitize(input(H, "You are the crew services officer. Would you like to change your religion? Default is Unitarianism", "Name change", religion_name), MAX_NAME_LEN) if (!new_religion) new_religion = religion_name switch(lowertext(new_religion)) + if("unitarianism") + B.name = "The Talmudic Quran" if("christianity") B.name = pick("The Holy Bible","The Dead Sea Scrolls") + if("Judaism") + B.name = "The Torah" if("satanism") - B.name = "The Unholy Bible" - if("cthulu") + B.name = "The Satanic Bible" + if("cthulhu") B.name = "The Necronomicon" if("islam") B.name = "Quran" @@ -52,20 +56,21 @@ B.name = "Toolbox Manifesto" if("homosexuality") B.name = "Guys Gone Wild" - //if("lol", "wtf", "gay", "penis", "ass", "poo", "badmin", "shitmin", "deadmin", "cock", "cocks") - // B.name = pick("Woodys Got Wood: The Aftermath", "War of the Cocks", "Sweet Bro and Hella Jef: Expanded Edition") - // H.setBrainLoss(100) // starts off retarded as fuck if("science") B.name = pick("Principle of Relativity", "Quantum Enigma: Physics Encounters Consciousness", "Programming the Universe", "Quantum Physics and Theology", "String Theory for Dummies", "How To: Build Your Own Warp Drive", "The Mysteries of Bluespace", "Playing God: Collector's Edition") + if("capitalism") + B.name = "Wealth of Nations" + if("communism") + B.name = "The Communist Manifesto" else B.name = "The Holy Book of [new_religion]" feedback_set_details("religion_name","[new_religion]") spawn(1) - var/deity_name = "Space Jesus" - var/new_deity = sanitize(input(H, "Would you like to change your deity? Default is Space Jesus.", "Name change", deity_name), MAX_NAME_LEN) + var/deity_name = "Hashem" + var/new_deity = sanitize(input(H, "Would you like to change your deity? Default is Hashem", "Name change", deity_name), MAX_NAME_LEN) - if ((length(new_deity) == 0) || (new_deity == "Space Jesus") ) + if ((length(new_deity) == 0) || (new_deity == "Hashem") ) new_deity = deity_name B.deity_name = new_deity diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index be0a0bbd07e..f74b1d6185f 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -623,7 +623,7 @@ var/global/datum/controller/occupations/job_master else spawnpos = spawntypes[H.client.prefs.spawnpoint] - if(spawnpos && istype(spawnpos) && spawnpos.turfs.len) // VOREStation Edit - Fix runtime if no landmarks exist for a spawntype + if(spawnpos && istype(spawnpos) && spawnpos.turfs.len) if(spawnpos.check_job_spawning(rank)) H.forceMove(spawnpos.get_spawn_position()) . = spawnpos.msg diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index ded2ccdde8f..f510688733e 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -190,8 +190,8 @@ go_out() if(href_list["beaker"]) remove_beaker() - if(href_list["filter"]) - if(filtering != text2num(href_list["filter"])) + if(href_list["sleeper_filter"]) + if(filtering != text2num(href_list["sleeper_filter"])) toggle_filter() if(href_list["chemical"] && href_list["amount"]) if(occupant && occupant.stat != DEAD) diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index 546e6acd885..ac1e21051ae 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -56,7 +56,7 @@ signal.data["nitrogen"] = 0 signal.data["carbon_dioxide"] = 0 signal.data["sigtype"]="status" - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) + radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) /obj/machinery/air_sensor/proc/set_frequency(new_frequency) radio_controller.remove_object(src, frequency) @@ -239,7 +239,7 @@ obj/machinery/computer/general_air_control/Destroy() . = 1 signal.data["sigtype"]="command" - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) + radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) /obj/machinery/computer/general_air_control/supermatter_core icon = 'icons/obj/computer.dmi' @@ -349,7 +349,7 @@ obj/machinery/computer/general_air_control/Destroy() . = 1 signal.data["sigtype"]="command" - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) + radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) /obj/machinery/computer/general_air_control/fuel_injection icon = 'icons/obj/computer.dmi' @@ -386,7 +386,7 @@ obj/machinery/computer/general_air_control/Destroy() "sigtype"="command" ) - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) + radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) ..() @@ -446,7 +446,7 @@ obj/machinery/computer/general_air_control/Destroy() "status" = 1, "sigtype"="command" ) - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) + radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) if(href_list["toggle_automation"]) automation = !automation @@ -465,7 +465,7 @@ obj/machinery/computer/general_air_control/Destroy() "sigtype"="command" ) - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) + radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) if(href_list["injection"]) if(!radio_connection) @@ -480,4 +480,4 @@ obj/machinery/computer/general_air_control/Destroy() "sigtype"="command" ) - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) \ No newline at end of file + radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) \ No newline at end of file diff --git a/code/game/machinery/computer3/networking.dm b/code/game/machinery/computer3/networking.dm index 66d25dda5ae..f88d8a4837d 100644 --- a/code/game/machinery/computer3/networking.dm +++ b/code/game/machinery/computer3/networking.dm @@ -65,20 +65,20 @@ var/datum/radio_frequency/radio_connection = null var/frequency = PUB_FREQ - var/filter = null + var/rad_filter = null var/range = null var/subspace = 0 init() ..() spawn(5) - radio_connection = radio_controller.add_object(src, src.frequency, src.filter) + radio_connection = radio_controller.add_object(src, src.frequency, src.rad_filter) proc/set_frequency(new_frequency) if(radio_controller) radio_controller.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, filter) + radio_connection = radio_controller.add_object(src, frequency, rad_filter) else frequency = new_frequency spawn(rand(5,10)) @@ -94,7 +94,7 @@ if(!computer || (computer.stat&~MAINT) || !computer.program) return if(!radio_connection) return - radio_connection.post_signal(src,signal,filter,range) + radio_connection.post_signal(src,signal,rad_filter,range) get_machines(var/typekey) if(!radio_connection || !radio_connection.frequency) diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index ba8aa85b2c7..c87e78cfd50 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -101,7 +101,7 @@ obj/machinery/door/airlock/proc/send_status(var/bumped = 0) if (bumped) signal.data["bumped_with_access"] = 1 - radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK) + radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, radio_filter = RADIO_AIRLOCK) obj/machinery/door/airlock/open(surpress_send) @@ -181,7 +181,7 @@ obj/machinery/airlock_sensor/attack_hand(mob/user) signal.data["tag"] = master_tag signal.data["command"] = command - radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK) + radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, radio_filter = RADIO_AIRLOCK) flick("airlock_sensor_cycle", src) obj/machinery/airlock_sensor/process() @@ -196,7 +196,7 @@ obj/machinery/airlock_sensor/process() signal.data["timestamp"] = world.time signal.data["pressure"] = num2text(pressure) - radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK) + radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, radio_filter = RADIO_AIRLOCK) previousPressure = pressure @@ -269,7 +269,7 @@ obj/machinery/access_button/attack_hand(mob/user) signal.data["tag"] = master_tag signal.data["command"] = command - radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK) + radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, radio_filter = RADIO_AIRLOCK) flick("access_button_cycle", src) diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index a128e6c4e48..5a6b77931fd 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -69,11 +69,11 @@ obj/machinery/embedded_controller/radio/Destroy() else icon_state = "airlock_control_off" -/obj/machinery/embedded_controller/radio/post_signal(datum/signal/signal, var/filter = null) +/obj/machinery/embedded_controller/radio/post_signal(datum/signal/signal, var/radio_filter = null) signal.transmission_method = TRANSMISSION_RADIO if(radio_connection) //use_power(radio_power_use) //neat idea, but causes way too much lag. - return radio_connection.post_signal(src, signal, filter) + return radio_connection.post_signal(src, signal, radio_filter) else qdel(signal) diff --git a/code/game/machinery/exonet_node.dm b/code/game/machinery/exonet_node.dm index 049289c7c73..87eba963240 100644 --- a/code/game/machinery/exonet_node.dm +++ b/code/game/machinery/exonet_node.dm @@ -25,7 +25,7 @@ component_parts = list() component_parts += new /obj/item/weapon/circuitboard/telecomms/exonet_node(src) component_parts += new /obj/item/weapon/stock_parts/subspace/ansible(src) - component_parts += new /obj/item/weapon/stock_parts/subspace/filter(src) + component_parts += new /obj/item/weapon/stock_parts/subspace/sub_filter(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) diff --git a/code/game/machinery/pda_multicaster.dm b/code/game/machinery/pda_multicaster.dm index a7d5c780c35..fde455ae51a 100644 --- a/code/game/machinery/pda_multicaster.dm +++ b/code/game/machinery/pda_multicaster.dm @@ -28,7 +28,7 @@ component_parts = list() component_parts += new /obj/item/weapon/circuitboard/telecomms/pda_multicaster(src) component_parts += new /obj/item/weapon/stock_parts/subspace/ansible(src) - component_parts += new /obj/item/weapon/stock_parts/subspace/filter(src) + component_parts += new /obj/item/weapon/stock_parts/subspace/sub_filter(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/subspace/treatment(src) component_parts += new /obj/item/stack/cable_coil(src, 2) diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 4547b4eaf37..e9f693e431f 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -129,13 +129,13 @@ Buildable meters src.pipe_type = PIPE_VOLUME_PUMP else if(istype(make_from, /obj/machinery/atmospherics/binary/pump)) src.pipe_type = PIPE_PUMP - else if(istype(make_from, /obj/machinery/atmospherics/trinary/filter/m_filter)) + else if(istype(make_from, /obj/machinery/atmospherics/trinary/atmos_filter/m_filter)) src.pipe_type = PIPE_GAS_FILTER_M else if(istype(make_from, /obj/machinery/atmospherics/trinary/mixer/t_mixer)) src.pipe_type = PIPE_GAS_MIXER_T else if(istype(make_from, /obj/machinery/atmospherics/trinary/mixer/m_mixer)) src.pipe_type = PIPE_GAS_MIXER_M - else if(istype(make_from, /obj/machinery/atmospherics/trinary/filter)) + else if(istype(make_from, /obj/machinery/atmospherics/trinary/atmos_filter)) src.pipe_type = PIPE_GAS_FILTER else if(istype(make_from, /obj/machinery/atmospherics/trinary/mixer)) src.pipe_type = PIPE_GAS_MIXER @@ -175,7 +175,7 @@ Buildable meters src.pipe_type = PIPE_CAP else if(istype(make_from, /obj/machinery/atmospherics/omni/mixer)) src.pipe_type = PIPE_OMNI_MIXER - else if(istype(make_from, /obj/machinery/atmospherics/omni/filter)) + else if(istype(make_from, /obj/machinery/atmospherics/omni/atmos_filter)) src.pipe_type = PIPE_OMNI_FILTER ///// Z-Level stuff else if(istype(make_from, /obj/machinery/atmospherics/pipe/zpipe/up/supply)) @@ -809,7 +809,7 @@ Buildable meters P.node2.build_network() if(PIPE_GAS_FILTER) //gas filter - var/obj/machinery/atmospherics/trinary/filter/P = new(src.loc) + var/obj/machinery/atmospherics/trinary/atmos_filter/P = new(src.loc) P.set_dir(dir) P.initialize_directions = pipe_dir if (pipename) @@ -849,7 +849,7 @@ Buildable meters P.node3.build_network() if(PIPE_GAS_FILTER_M) //gas filter mirrored - var/obj/machinery/atmospherics/trinary/filter/m_filter/P = new(src.loc) + var/obj/machinery/atmospherics/trinary/atmos_filter/m_filter/P = new(src.loc) P.set_dir(dir) P.initialize_directions = pipe_dir if (pipename) @@ -1232,7 +1232,7 @@ Buildable meters P.initialize() P.build_network() if(PIPE_OMNI_FILTER) - var/obj/machinery/atmospherics/omni/filter/P = new(loc) + var/obj/machinery/atmospherics/omni/atmos_filter/P = new(loc) var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 P.initialize() diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 8eba407e72a..1b181aebb5d 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -45,6 +45,7 @@ var/check_access = 1 //if this is active, the turret shoots everything that does not meet the access requirements var/check_anomalies = 1 //checks if it can shoot at unidentified lifeforms (ie xenos) var/check_synth = 0 //if active, will shoot at anything not an AI or cyborg + var/check_all = 0 //If active, will fire on anything, including synthetics. var/ailock = 0 // AI cannot use this var/attacked = 0 //if set to 1, the turret gets pissed off and shoots at people nearby (unless they have sec access!) @@ -71,6 +72,7 @@ check_records = 1 check_weapons = 1 check_anomalies = 1 + check_all = 0 /obj/machinery/porta_turret/stationary ailock = 1 @@ -229,6 +231,7 @@ var/list/turret_icons settings[++settings.len] = list("category" = "Check Arrest Status", "setting" = "check_arrest", "value" = check_arrest) settings[++settings.len] = list("category" = "Check Access Authorization", "setting" = "check_access", "value" = check_access) settings[++settings.len] = list("category" = "Check misc. Lifeforms", "setting" = "check_anomalies", "value" = check_anomalies) + settings[++settings.len] = list("category" = "Neutralize All Entities", "setting" = "check_all", "value" = check_all) data["settings"] = settings ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) @@ -278,6 +281,8 @@ var/list/turret_icons check_access = value else if(href_list["command"] == "check_anomalies") check_anomalies = value + else if(href_list["command"] == "check_all") + check_all = value return 1 @@ -465,7 +470,7 @@ var/list/turret_icons var/list/targets = list() //list of primary targets var/list/secondarytargets = list() //targets that are least important - for(var/mob/M in mobs_in_view(world.view, src)) + for(var/mob/M in mobs_in_xray_view(world.view, src)) assess_and_assign(M, targets, secondarytargets) if(!tryToShootAt(targets)) @@ -496,7 +501,7 @@ var/list/turret_icons if(!L) return TURRET_NOT_TARGET - if(!emagged && issilicon(L)) // Don't target silica + if(!emagged && issilicon(L) && check_all == 0) // Don't target silica, unless told to neutralize everything. return TURRET_NOT_TARGET if(L.stat && !emagged) //if the perp is dead/dying, no need to bother really @@ -514,7 +519,7 @@ var/list/turret_icons if(lethal && locate(/mob/living/silicon/ai) in get_turf(L)) //don't accidentally kill the AI! return TURRET_NOT_TARGET - if(check_synth) //If it's set to attack all non-silicons, target them! + if(check_synth || check_all) //If it's set to attack all non-silicons or everything, target them! if(L.lying) return lethal ? TURRET_SECONDARY_TARGET : TURRET_NOT_TARGET return TURRET_PRIORITY_TARGET @@ -671,6 +676,7 @@ var/list/turret_icons var/check_arrest var/check_weapons var/check_anomalies + var/check_all var/ailock /obj/machinery/porta_turret/proc/setState(var/datum/turret_checks/TC) @@ -686,6 +692,7 @@ var/list/turret_icons check_arrest = TC.check_arrest check_weapons = TC.check_weapons check_anomalies = TC.check_anomalies + check_all = TC.check_all ailock = TC.ailock power_change() diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm index 17797e2a686..4f33f1703f3 100644 --- a/code/game/machinery/turret_control.dm +++ b/code/game/machinery/turret_control.dm @@ -24,6 +24,7 @@ var/check_access = 1 //if this is active, the turret shoots everything that does not meet the access requirements var/check_anomalies = 1 //checks if it can shoot at unidentified lifeforms (ie xenos) var/check_synth = 0 //if active, will shoot at anything not an AI or cyborg + var/check_all = 0 //If active, will shoot at anything. var/ailock = 0 //Silicons cannot use this req_access = list(access_ai_upload) @@ -130,6 +131,8 @@ settings[++settings.len] = list("category" = "Check Arrest Status", "setting" = "check_arrest", "value" = check_arrest) settings[++settings.len] = list("category" = "Check Access Authorization", "setting" = "check_access", "value" = check_access) settings[++settings.len] = list("category" = "Check misc. Lifeforms", "setting" = "check_anomalies", "value" = check_anomalies) + settings[++settings.len] = list("category" = "Neutralize All Entities", "setting" = "check_all", "value" = check_all) + data["settings"] = settings ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) @@ -161,6 +164,8 @@ check_access = value else if(href_list["command"] == "check_anomalies") check_anomalies = value + else if(href_list["command"] == "check_all") + check_all = value updateTurrets() return 1 @@ -175,6 +180,7 @@ TC.check_arrest = check_arrest TC.check_weapons = check_weapons TC.check_anomalies = check_anomalies + TC.check_all = check_all TC.ailock = ailock if(istype(control_area)) diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm index 77087ed32fc..5d692b39b99 100644 --- a/code/game/mecha/combat/combat.dm +++ b/code/game/mecha/combat/combat.dm @@ -265,13 +265,13 @@ /obj/mecha/combat/Topic(href,href_list) ..() - var/datum/topic_input/filter = new (href,href_list) - if(filter.get("close")) + var/datum/topic_input/top_filter = new (href,href_list) + if(top_filter.get("close")) am = null return /* - if(filter.get("saminput")) - if(md5(filter.get("saminput")) == am) + if(top_filter.get("saminput")) + if(md5(top_filter.get("saminput")) == am) occupant_message("From the lies of the Antipath, Circuit preserve us.") am = null return diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index acd680ba573..4e895b2b622 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -105,15 +105,15 @@ Topic(href,href_list) ..() - var/datum/topic_input/filter = new /datum/topic_input(href,href_list) - if(filter.get("eject")) + var/datum/topic_input/top_filter = new /datum/topic_input(href,href_list) + if(top_filter.get("eject")) go_out() - if(filter.get("view_stats")) + if(top_filter.get("view_stats")) chassis.occupant << browse(get_occupant_stats(),"window=msleeper") onclose(chassis.occupant, "msleeper") return - if(filter.get("inject")) - inject_reagent(filter.getType("inject",/datum/reagent),filter.getObj("source")) + if(top_filter.get("inject")) + inject_reagent(top_filter.getType("inject",/datum/reagent),top_filter.getObj("source")) return proc/get_occupant_stats() @@ -473,19 +473,19 @@ Topic(href,href_list) ..() - var/datum/topic_input/filter = new (href,href_list) - if(filter.get("toggle_mode")) + var/datum/topic_input/top_filter = new (href,href_list) + if(top_filter.get("toggle_mode")) mode = !mode update_equip_info() return - if(filter.get("select_reagents")) + if(top_filter.get("select_reagents")) processed_reagents.len = 0 var/m = 0 var/message for(var/i=1 to known_reagents.len) if(m>=synth_speed) break - var/reagent = filter.get("reagent_[i]") + var/reagent = top_filter.get("reagent_[i]") if(reagent && (reagent in known_reagents)) message = "[m ? ", " : null][known_reagents[reagent]]" processed_reagents += reagent @@ -497,14 +497,14 @@ occupant_message("Reagent processing started.") log_message("Reagent processing started.") return - if(filter.get("show_reagents")) + if(top_filter.get("show_reagents")) chassis.occupant << browse(get_reagents_page(),"window=msyringegun") - if(filter.get("purge_reagent")) - var/reagent = filter.get("purge_reagent") + if(top_filter.get("purge_reagent")) + var/reagent = top_filter.get("purge_reagent") if(reagent) reagents.del_reagent(reagent) return - if(filter.get("purge_all")) + if(top_filter.get("purge_all")) reagents.clear_reagents() return return diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 1292a3747bc..fa511bf412d 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -1,6 +1,6 @@ /obj/machinery/mecha_part_fabricator icon = 'icons/obj/robotics.dmi' - icon_state = "fab-idle" + icon_state = "mechfab-idle" name = "Exosuit Fabricator" desc = "A machine used for construction of mechas." density = 1 @@ -56,11 +56,11 @@ /obj/machinery/mecha_part_fabricator/update_icon() overlays.Cut() if(panel_open) - icon_state = "fab-o" + icon_state = "mechfab-o" else - icon_state = "fab-idle" + icon_state = "mechfab-idle" if(busy) - overlays += "fab-active" + overlays += "mechfab-active" /obj/machinery/mecha_part_fabricator/dismantle() for(var/f in materials) @@ -155,9 +155,9 @@ if(materials[S.material.name] + amnt <= res_max_amount) if(S && S.amount >= 1) var/count = 0 - overlays += "fab-load-metal" + overlays += "mechfab-load-metal" spawn(10) - overlays -= "fab-load-metal" + overlays -= "mechfab-load-metal" while(materials[S.material.name] + amnt <= res_max_amount && S.amount >= 1) materials[S.material.name] += amnt S.use(1) @@ -212,7 +212,7 @@ /obj/machinery/mecha_part_fabricator/proc/can_build(var/datum/design/D) for(var/M in D.materials) - if(materials[M] < D.materials[M]) + if(materials[M] < (D.materials[M] * mat_efficiency)) return 0 return 1 diff --git a/code/game/mecha/mech_prosthetics.dm b/code/game/mecha/mech_prosthetics.dm index 8cea4b22c3d..5a665dfd43c 100644 --- a/code/game/mecha/mech_prosthetics.dm +++ b/code/game/mecha/mech_prosthetics.dm @@ -239,7 +239,7 @@ /obj/machinery/pros_fabricator/proc/can_build(var/datum/design/D) for(var/M in D.materials) - if(materials[M] < D.materials[M]) + if(materials[M] < (D.materials[M] * mat_efficiency)) return 0 return 1 diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 56149a254c2..db8fc519925 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -1498,10 +1498,10 @@ return if(usr.stat > 0) return - var/datum/topic_input/filter = new /datum/topic_input(href,href_list) + var/datum/topic_input/top_filter = new /datum/topic_input(href,href_list) if(href_list["select_equip"]) if(usr != src.occupant) return - var/obj/item/mecha_parts/mecha_equipment/equip = filter.getObj("select_equip") + var/obj/item/mecha_parts/mecha_equipment/equip = top_filter.getObj("select_equip") if(equip) src.selected = equip src.occupant_message("You switch to [equip]") @@ -1532,7 +1532,7 @@ return if(href_list["rfreq"]) if(usr != src.occupant) return - var/new_frequency = (radio.frequency + filter.getNum("rfreq")) + var/new_frequency = (radio.frequency + top_filter.getNum("rfreq")) if ((radio.frequency < PUBLIC_LOW_FREQ || radio.frequency > PUBLIC_HIGH_FREQ)) new_frequency = sanitize_frequency(new_frequency) radio.set_frequency(new_frequency) @@ -1574,11 +1574,11 @@ return if(href_list["req_access"] && add_req_access) if(!in_range(src, usr)) return - output_access_dialog(filter.getObj("id_card"),filter.getMob("user")) + output_access_dialog(top_filter.getObj("id_card"),top_filter.getMob("user")) return if(href_list["maint_access"] && maint_access) if(!in_range(src, usr)) return - var/mob/user = filter.getMob("user") + var/mob/user = top_filter.getMob("user") if(user) if(state==0) state = 1 @@ -1586,18 +1586,18 @@ else if(state==1) state = 0 user << "The securing bolts are now hidden." - output_maintenance_dialog(filter.getObj("id_card"),user) + output_maintenance_dialog(top_filter.getObj("id_card"),user) return if(href_list["set_internal_tank_valve"] && state >=1) if(!in_range(src, usr)) return - var/mob/user = filter.getMob("user") + var/mob/user = top_filter.getMob("user") if(user) var/new_pressure = input(user,"Input new output pressure","Pressure setting",internal_tank_valve) as num if(new_pressure) internal_tank_valve = new_pressure user << "The internal pressure valve has been set to [internal_tank_valve]kPa." if(href_list["remove_passenger"] && state >= 1) - var/mob/user = filter.getMob("user") + var/mob/user = top_filter.getMob("user") var/list/passengers = list() for (var/obj/item/mecha_parts/mecha_equipment/tool/passenger/P in contents) if (P.occupant) @@ -1623,20 +1623,20 @@ P.go_out() P.log_message("[occupant] was removed.") return - if(href_list["add_req_access"] && add_req_access && filter.getObj("id_card")) + if(href_list["add_req_access"] && add_req_access && top_filter.getObj("id_card")) if(!in_range(src, usr)) return - operation_req_access += filter.getNum("add_req_access") - output_access_dialog(filter.getObj("id_card"),filter.getMob("user")) + operation_req_access += top_filter.getNum("add_req_access") + output_access_dialog(top_filter.getObj("id_card"),top_filter.getMob("user")) return - if(href_list["del_req_access"] && add_req_access && filter.getObj("id_card")) + if(href_list["del_req_access"] && add_req_access && top_filter.getObj("id_card")) if(!in_range(src, usr)) return - operation_req_access -= filter.getNum("del_req_access") - output_access_dialog(filter.getObj("id_card"),filter.getMob("user")) + operation_req_access -= top_filter.getNum("del_req_access") + output_access_dialog(top_filter.getObj("id_card"),top_filter.getMob("user")) return if(href_list["finish_req_access"]) if(!in_range(src, usr)) return add_req_access = 0 - var/mob/user = filter.getMob("user") + var/mob/user = top_filter.getMob("user") user << browse(null,"window=exosuit_add_access") return if(href_list["dna_lock"]) @@ -1669,9 +1669,9 @@ /* if(href_list["debug"]) if(href_list["set_i_dam"]) - setInternalDamage(filter.getNum("set_i_dam")) + setInternalDamage(top_filter.getNum("set_i_dam")) if(href_list["clear_i_dam"]) - clearInternalDamage(filter.getNum("clear_i_dam")) + clearInternalDamage(top_filter.getNum("clear_i_dam")) return */ diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm index 00a0654cc12..de1f20fe0a3 100644 --- a/code/game/mecha/mecha_control_console.dm +++ b/code/game/mecha/mecha_control_console.dm @@ -41,19 +41,19 @@ Topic(href, href_list) if(..()) return - var/datum/topic_input/filter = new /datum/topic_input(href,href_list) + var/datum/topic_input/top_filter = new /datum/topic_input(href,href_list) if(href_list["send_message"]) - var/obj/item/mecha_parts/mecha_tracking/MT = filter.getObj("send_message") + var/obj/item/mecha_parts/mecha_tracking/MT = top_filter.getObj("send_message") var/message = sanitize(input(usr,"Input message","Transmit message") as text) var/obj/mecha/M = MT.in_mecha() if(message && M) M.occupant_message(message) return if(href_list["shock"]) - var/obj/item/mecha_parts/mecha_tracking/MT = filter.getObj("shock") + var/obj/item/mecha_parts/mecha_tracking/MT = top_filter.getObj("shock") MT.shock() if(href_list["get_log"]) - var/obj/item/mecha_parts/mecha_tracking/MT = filter.getObj("get_log") + var/obj/item/mecha_parts/mecha_tracking/MT = top_filter.getObj("get_log") stored_data = MT.get_mecha_log() screen = 1 if(href_list["return"]) diff --git a/code/game/objects/effects/chem/foam.dm b/code/game/objects/effects/chem/foam.dm index 2c28dd7ecb9..03f743db6b0 100644 --- a/code/game/objects/effects/chem/foam.dm +++ b/code/game/objects/effects/chem/foam.dm @@ -150,8 +150,10 @@ /obj/structure/foamedmetal/ex_act(severity) qdel(src) -/obj/structure/foamedmetal/bullet_act() - if(metal == 1 || prob(50)) +/obj/structure/foamedmetal/bullet_act(var/obj/item/projectile/P) + if(istype(P, /obj/item/projectile/test)) + return + else if(metal == 1 || prob(50)) qdel(src) /obj/structure/foamedmetal/attack_hand(var/mob/user) diff --git a/code/game/objects/items/devices/PDA/radio.dm b/code/game/objects/items/devices/PDA/radio.dm index 019425db0e8..9de35c2582a 100644 --- a/code/game/objects/items/devices/PDA/radio.dm +++ b/code/game/objects/items/devices/PDA/radio.dm @@ -29,7 +29,7 @@ if(key3) signal.data[key3] = value3 - frequency.post_signal(src, signal, filter = s_filter) + frequency.post_signal(src, signal, radio_filter = s_filter) return @@ -47,7 +47,7 @@ ..() spawn(5) if(radio_controller) - radio_controller.add_object(src, control_freq, filter = RADIO_SECBOT) + radio_controller.add_object(src, control_freq, radio_filter = RADIO_SECBOT) // receive radio signals // can detect bot status signals diff --git a/code/game/objects/items/devices/communicator/communicator.dm b/code/game/objects/items/devices/communicator/communicator.dm index e2f4137cb43..d10a57c952c 100644 --- a/code/game/objects/items/devices/communicator/communicator.dm +++ b/code/game/objects/items/devices/communicator/communicator.dm @@ -985,7 +985,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() if(text_message && O.exonet) O.exonet.send_message(chosen_communicator.exonet.address, "text", text_message) - src << "You have sent '[text_message]' to [chosen_communicator].." + src << "You have sent '[text_message]' to [chosen_communicator]." exonet_messages.Add("To [chosen_communicator]:
[text_message]") log_pda("[usr] (COMM: [src]) sent \"[text_message]\" to [chosen_communicator]") @@ -1108,4 +1108,4 @@ var/global/list/obj/item/device/communicator/all_communicators = list() /obj/machinery/camera/communicator/New() ..() client_huds |= global_hud.whitense - client_huds |= global_hud.darkMask \ No newline at end of file + client_huds |= global_hud.darkMask diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index 888af9124b6..32a4580c7e0 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -124,7 +124,6 @@ icon_state = "tile_white" no_variants = FALSE -// VOREStation Edit /obj/item/stack/tile/floor/techgrey name = "grey techfloor tile" singular_name = "grey techfloor tile" @@ -143,7 +142,6 @@ icon_state = "tile_steel" matter = list("plasteel" = SHEET_MATERIAL_AMOUNT / 4) no_variants = FALSE -// VOREStation Edit End /obj/item/stack/tile/floor/steel name = "steel floor tile" diff --git a/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm b/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm index 1d806a2710d..6d683cd9a84 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm @@ -35,7 +35,7 @@ origin_tech = list(TECH_MAGNET = 3, TECH_POWER = 4) req_components = list( /obj/item/weapon/stock_parts/manipulator/pico = 2, - /obj/item/weapon/stock_parts/subspace/filter = 1, + /obj/item/weapon/stock_parts/subspace/sub_filter = 1, /obj/item/weapon/stock_parts/subspace/treatment = 1, /obj/item/weapon/stock_parts/subspace/analyzer = 1, /obj/item/weapon/stock_parts/console_screen = 1, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm index 835971b0129..856104dcce9 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm @@ -11,7 +11,7 @@ origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_BLUESPACE = 2) req_components = list( /obj/item/weapon/stock_parts/subspace/ansible = 1, - /obj/item/weapon/stock_parts/subspace/filter = 1, + /obj/item/weapon/stock_parts/subspace/sub_filter = 1, /obj/item/weapon/stock_parts/manipulator = 2, /obj/item/weapon/stock_parts/micro_laser = 1) @@ -22,7 +22,7 @@ req_components = list( /obj/item/weapon/stock_parts/manipulator = 2, /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/subspace/filter = 2) + /obj/item/weapon/stock_parts/subspace/sub_filter = 2) /obj/item/weapon/circuitboard/telecomms/relay name = T_BOARD("relay mainframe") @@ -31,7 +31,7 @@ req_components = list( /obj/item/weapon/stock_parts/manipulator = 2, /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/subspace/filter = 2) + /obj/item/weapon/stock_parts/subspace/sub_filter = 2) /obj/item/weapon/circuitboard/telecomms/bus name = T_BOARD("bus mainframe") @@ -40,7 +40,7 @@ req_components = list( /obj/item/weapon/stock_parts/manipulator = 2, /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/subspace/filter = 1) + /obj/item/weapon/stock_parts/subspace/sub_filter = 1) /obj/item/weapon/circuitboard/telecomms/processor name = T_BOARD("processor unit") @@ -48,7 +48,7 @@ origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4) req_components = list( /obj/item/weapon/stock_parts/manipulator = 3, - /obj/item/weapon/stock_parts/subspace/filter = 1, + /obj/item/weapon/stock_parts/subspace/sub_filter = 1, /obj/item/weapon/stock_parts/subspace/treatment = 2, /obj/item/weapon/stock_parts/subspace/analyzer = 1, /obj/item/stack/cable_coil = 2, @@ -61,7 +61,7 @@ req_components = list( /obj/item/weapon/stock_parts/manipulator = 2, /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/subspace/filter = 1) + /obj/item/weapon/stock_parts/subspace/sub_filter = 1) /obj/item/weapon/circuitboard/telecomms/broadcaster name = T_BOARD("subspace broadcaster") @@ -70,7 +70,7 @@ req_components = list( /obj/item/weapon/stock_parts/manipulator = 2, /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/subspace/filter = 1, + /obj/item/weapon/stock_parts/subspace/sub_filter = 1, /obj/item/weapon/stock_parts/subspace/crystal = 1, /obj/item/weapon/stock_parts/micro_laser/high = 2) @@ -81,7 +81,7 @@ origin_tech = list(TECH_DATA = 5, TECH_ENGINEERING = 5, TECH_BLUESPACE = 4) req_components = list( /obj/item/weapon/stock_parts/subspace/ansible = 1, - /obj/item/weapon/stock_parts/subspace/filter = 1, + /obj/item/weapon/stock_parts/subspace/sub_filter = 1, /obj/item/weapon/stock_parts/manipulator = 2, /obj/item/weapon/stock_parts/micro_laser = 1, /obj/item/weapon/stock_parts/subspace/crystal = 1, @@ -94,7 +94,7 @@ origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 2, TECH_BLUESPACE = 2) req_components = list( /obj/item/weapon/stock_parts/subspace/ansible = 1, - /obj/item/weapon/stock_parts/subspace/filter = 1, + /obj/item/weapon/stock_parts/subspace/sub_filter = 1, /obj/item/weapon/stock_parts/manipulator = 1, /obj/item/weapon/stock_parts/subspace/treatment = 1, /obj/item/stack/cable_coil = 2) \ No newline at end of file diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index 6f8e1782eb2..46543b901b6 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -103,7 +103,7 @@ /obj/item/device/paicard, /obj/item/device/violin, /obj/item/weapon/storage/belt/utility/full, - /obj/item/clothing/accessory/horrible) + /obj/item/clothing/accessory/tie/horrible) if(!ispath(gift_type,/obj/item)) return diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index 87afb34fa4e..7e543b75cd9 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -149,6 +149,7 @@ new /obj/item/clothing/suit/nun(src) new /obj/item/clothing/head/nun_hood(src) new /obj/item/clothing/suit/storage/hooded/chaplain_hoodie(src) + new /obj/item/clothing/suit/storage/hooded/chaplain_hoodie/whiteout(src) new /obj/item/clothing/suit/holidaypriest(src) new /obj/item/clothing/under/wedding/bride_white(src) new /obj/item/weapon/storage/backpack/cultpack (src) diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index e08dba0a0f8..5976c357036 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -1,78 +1,6 @@ -//trees -/obj/structure/flora/tree - name = "tree" - anchored = 1 - density = 1 - pixel_x = -16 - layer = MOB_LAYER // You know what, let's play it safe. - -/obj/structure/flora/tree/pine - name = "pine tree" - icon = 'icons/obj/flora/pinetrees.dmi' - icon_state = "pine_1" - -/obj/structure/flora/tree/pine/New() - ..() - icon_state = "pine_[rand(1, 3)]" - -/obj/structure/flora/tree/pine/xmas - name = "xmas tree" - icon = 'icons/obj/flora/pinetrees.dmi' - icon_state = "pine_c" - -/obj/structure/flora/tree/pine/xmas/New() - ..() - icon_state = "pine_c" - -/obj/structure/flora/tree/dead - icon = 'icons/obj/flora/deadtrees.dmi' - icon_state = "tree_1" - -/obj/structure/flora/tree/dead/New() - ..() - icon_state = "tree_[rand(1, 6)]" - -/obj/structure/flora/tree/sif - name = "glowing tree" - desc = "It's a tree, except this one seems quite alien. It glows a deep blue." - icon = 'icons/obj/flora/deadtrees.dmi' - icon_state = "tree_sif" - -/obj/structure/flora/tree/sif/New() - update_icon() - -/obj/structure/flora/tree/sif/update_icon() - set_light(5, 1, "#33ccff") - overlays.Cut() - overlays.Add(image(icon = 'icons/obj/flora/deadtrees.dmi', icon_state = "[icon_state]_glow", layer = LIGHTING_LAYER + 0.1)) - -//grass -/obj/structure/flora/grass - name = "grass" - icon = 'icons/obj/flora/snowflora.dmi' - anchored = 1 - -/obj/structure/flora/grass/brown - icon_state = "snowgrass1bb" - -/obj/structure/flora/grass/brown/New() - ..() - icon_state = "snowgrass[rand(1, 3)]bb" -/obj/structure/flora/grass/green - icon_state = "snowgrass1gb" -/obj/structure/flora/grass/green/New() - ..() - icon_state = "snowgrass[rand(1, 3)]gb" - -/obj/structure/flora/grass/both - icon_state = "snowgrassall1" - -/obj/structure/flora/grass/both/New() - ..() - icon_state = "snowgrassall[rand(1, 3)]" //bushes diff --git a/code/game/objects/structures/flora/grass.dm b/code/game/objects/structures/flora/grass.dm new file mode 100644 index 00000000000..d5e7e965a87 --- /dev/null +++ b/code/game/objects/structures/flora/grass.dm @@ -0,0 +1,27 @@ +//grass +/obj/structure/flora/grass + name = "grass" + icon = 'icons/obj/flora/snowflora.dmi' + anchored = 1 + +/obj/structure/flora/grass/brown + icon_state = "snowgrass1bb" + +/obj/structure/flora/grass/brown/New() + ..() + icon_state = "snowgrass[rand(1, 3)]bb" + + +/obj/structure/flora/grass/green + icon_state = "snowgrass1gb" + +/obj/structure/flora/grass/green/New() + ..() + icon_state = "snowgrass[rand(1, 3)]gb" + +/obj/structure/flora/grass/both + icon_state = "snowgrassall1" + +/obj/structure/flora/grass/both/New() + ..() + icon_state = "snowgrassall[rand(1, 3)]" \ No newline at end of file diff --git a/code/game/objects/structures/flora/trees.dm b/code/game/objects/structures/flora/trees.dm new file mode 100644 index 00000000000..d7960b59825 --- /dev/null +++ b/code/game/objects/structures/flora/trees.dm @@ -0,0 +1,202 @@ +//trees +/obj/structure/flora/tree + name = "tree" + anchored = 1 + density = 1 + pixel_x = -16 + layer = MOB_LAYER // You know what, let's play it safe. + var/base_state = null // Used for stumps. + var/health = 200 // Used for chopping down trees. + var/max_health = 200 + var/shake_animation_degrees = 4 // How much to shake the tree when struck. Larger trees should have smaller numbers or it looks weird. + var/obj/item/stack/material/product = null // What you get when chopping this tree down. Generally it will be a type of wood. + var/product_amount = 10 // How much of a stack you get, if the above is defined. + var/is_stump = FALSE // If true, suspends damage tracking and most other effects. + +/obj/structure/flora/tree/attackby(var/obj/item/weapon/W, var/mob/living/user) + if(!istype(W)) + return ..() + + if(is_stump) + return + + visible_message("\The [user] hits \the [src] with \the [W]!") + + var/damage_to_do = W.force + if(!W.sharp && !W.edge) + damage_to_do = round(damage_to_do / 4) + if(damage_to_do > 0) + if(W.sharp && W.edge) + playsound(get_turf(src), 'sound/effects/woodcutting.ogg', 50, 1) + else + playsound(get_turf(src), W.hitsound, 50, 1) + if(damage_to_do > 5) + adjust_health(-damage_to_do) + else + to_chat(user, "\The [W] is ineffective at harming \the [src].") + + hit_animation() + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + user.do_attack_animation(src) + +// Shakes the tree slightly, more or less stolen from lockers. +/obj/structure/flora/tree/proc/hit_animation() + var/init_px = pixel_x + var/shake_dir = pick(-1, 1) + animate(src, transform=turn(matrix(), shake_animation_degrees * shake_dir), pixel_x=init_px + 2*shake_dir, time=1) + animate(transform=null, pixel_x=init_px, time=6, easing=ELASTIC_EASING) + +// Used when the tree gets hurt. +/obj/structure/flora/tree/proc/adjust_health(var/amount) + if(is_stump) + return + + health = between(0, health + amount, max_health) + if(health <= 0) + die() + +// Called when the tree loses all health, for whatever reason. +/obj/structure/flora/tree/proc/die() + if(is_stump) + return + + if(product && product_amount) // Make wooden logs. + var/obj/item/stack/material/M = new product(get_turf(src)) + M.amount = product_amount + M.update_icon() + visible_message("\The [src] is felled!") + stump() + +// Makes the tree into a mostly non-interactive stump. +/obj/structure/flora/tree/proc/stump() + if(is_stump) + return + + is_stump = TRUE + icon_state = "[base_state]_stump" + overlays.Cut() // For the Sif tree and other future glowy trees. + set_light(0) + +/obj/structure/flora/tree/ex_act(var/severity) + adjust_health(-(max_health / severity)) + + +/obj/structure/flora/tree/get_description_interaction() + var/list/results = list() + + if(!is_stump) + results += "[desc_panel_image("hatchet")]to cut down this tree into logs. Any sharp and strong weapon will do." + + results += ..() + + return results + +// Subtypes. + +// Pine trees + +/obj/structure/flora/tree/pine + name = "pine tree" + icon = 'icons/obj/flora/pinetrees.dmi' + icon_state = "pine_1" + base_state = "pine" + product = /obj/item/stack/material/log + shake_animation_degrees = 3 + +/obj/structure/flora/tree/pine/New() + ..() + icon_state = "[base_state]_[rand(1, 3)]" + + +/obj/structure/flora/tree/pine/xmas + name = "xmas tree" + icon = 'icons/obj/flora/pinetrees.dmi' + icon_state = "pine_c" + +/obj/structure/flora/tree/pine/xmas/New() + ..() + icon_state = "pine_c" + +// Palm trees + +/obj/structure/flora/tree/palm + icon = 'icons/obj/flora/palmtrees.dmi' + icon_state = "palm1" + base_state = "palm" + product = /obj/item/stack/material/log + product_amount = 5 + health = 200 + max_health = 200 + pixel_x = 0 + +/obj/structure/flora/tree/palm/New() + ..() + icon_state = "[base_state][rand(1, 2)]" + + +// Dead trees + +/obj/structure/flora/tree/dead + icon = 'icons/obj/flora/deadtrees.dmi' + icon_state = "tree_1" + base_state = "tree" + product = /obj/item/stack/material/log + product_amount = 5 + health = 200 + max_health = 200 + +/obj/structure/flora/tree/dead/New() + ..() + icon_state = "[base_state]_[rand(1, 6)]" + +// Small jungle trees + +/obj/structure/flora/tree/jungle_small + icon = 'icons/obj/flora/jungletreesmall.dmi' + icon_state = "tree" + base_state = "tree" + product = /obj/item/stack/material/log + product_amount = 10 + health = 400 + max_health = 400 + pixel_x = -32 + +/obj/structure/flora/tree/jungle_small/New() + ..() + icon_state = "[base_state][rand(1, 6)]" + +// Big jungle trees + +/obj/structure/flora/tree/jungle + icon = 'icons/obj/flora/jungletree.dmi' + icon_state = "tree" + base_state = "tree" + product = /obj/item/stack/material/log + product_amount = 20 + health = 800 + max_health = 800 + pixel_x = -48 + pixel_y = -16 + shake_animation_degrees = 2 + +/obj/structure/flora/tree/jungle/New() + ..() + icon_state = "[base_state][rand(1, 6)]" + +// Sif trees + +/obj/structure/flora/tree/sif + name = "glowing tree" + desc = "It's a tree, except this one seems quite alien. It glows a deep blue." + icon = 'icons/obj/flora/deadtrees.dmi' + icon_state = "tree_sif" + base_state = "tree_sif" + product = /obj/item/stack/material/log/sif + +/obj/structure/flora/tree/sif/New() + update_icon() + +/obj/structure/flora/tree/sif/update_icon() + set_light(5, 1, "#33ccff") + overlays.Cut() + overlays.Add(image(icon = 'icons/obj/flora/deadtrees.dmi', icon_state = "[icon_state]_glow", layer = LIGHTING_LAYER + 0.1)) \ No newline at end of file diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 6597f62107b..ac231eb947a 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -68,7 +68,6 @@ new /obj/item/stack/rods(src.loc) qdel(src) return - // VOREStation Edit - Added Catwalks if (istype(C, /obj/item/stack/rods)) var/obj/item/stack/rods/R = C if(R.use(2)) @@ -78,7 +77,6 @@ new /obj/structure/catwalk(src.loc) qdel(src) return - // VOREStation Edit End return /obj/structure/lattice/proc/updateOverlays() diff --git a/code/game/objects/structures/loot_piles.dm b/code/game/objects/structures/loot_piles.dm index c4fb053e329..daa6e8c94ac 100644 --- a/code/game/objects/structures/loot_piles.dm +++ b/code/game/objects/structures/loot_piles.dm @@ -337,7 +337,7 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh /obj/item/weapon/stock_parts/subspace/analyzer, /obj/item/weapon/stock_parts/subspace/ansible, /obj/item/weapon/stock_parts/subspace/crystal, - /obj/item/weapon/stock_parts/subspace/filter, + /obj/item/weapon/stock_parts/subspace/sub_filter, /obj/item/weapon/stock_parts/subspace/transmitter, /obj/item/weapon/stock_parts/subspace/treatment, /obj/item/frame, diff --git a/code/game/objects/structures/railing.dm b/code/game/objects/structures/railing.dm index 98bae005f8d..ea52ed3845b 100644 --- a/code/game/objects/structures/railing.dm +++ b/code/game/objects/structures/railing.dm @@ -1,7 +1,7 @@ // Based on railing.dmi from https://github.com/Endless-Horizon/CEV-Eris /obj/structure/railing name = "railing" - desc = "A standard steel railing. Play stupid games win stupid prizes." + desc = "A standard steel railing. Play stupid games, win stupid prizes." icon = 'icons/obj/railing.dmi' density = 1 throwpass = 1 @@ -103,7 +103,7 @@ /obj/structure/railing/update_icon(var/UpdateNeighgors = 1) NeighborsCheck(UpdateNeighgors) - //layer = (dir == SOUTH) ? FLY_LAYER : initial(layer) // Vorestation edit because wtf does this even do + //layer = (dir == SOUTH) ? FLY_LAYER : initial(layer) // wtf does this even do overlays.Cut() if (!check || !anchored)//|| !anchored icon_state = "railing0" diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index be376e0f652..2d07f0ffbd4 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -2,7 +2,7 @@ #define SUPPLY_DOCKZ 2 //Z-level of the Dock. #define SUPPLY_STATIONZ 1 //Z-level of the Station. #define SUPPLY_STATION_AREATYPE "/area/supply/station" //Type of the supply shuttle area for station -#define SUPPLY_DOCK_AREATYPE "/area/supply/dock" //Type of the supply shuttle area for dock +#define SUPPLY_DOCK_AREATYPE "/area/supply/dock" //Type of the supply shuttle area for dock //Supply packs are in /code/defines/obj/supplypacks.dm //Computers are in /code/game/machinery/computer/supply.dm @@ -10,294 +10,304 @@ var/datum/controller/supply/supply_controller = new() var/list/mechtoys = list( - /obj/item/toy/prize/ripley, - /obj/item/toy/prize/fireripley, - /obj/item/toy/prize/deathripley, - /obj/item/toy/prize/gygax, - /obj/item/toy/prize/durand, - /obj/item/toy/prize/honk, - /obj/item/toy/prize/marauder, - /obj/item/toy/prize/seraph, - /obj/item/toy/prize/mauler, - /obj/item/toy/prize/odysseus, - /obj/item/toy/prize/phazon + /obj/item/toy/prize/ripley, + /obj/item/toy/prize/fireripley, + /obj/item/toy/prize/deathripley, + /obj/item/toy/prize/gygax, + /obj/item/toy/prize/durand, + /obj/item/toy/prize/honk, + /obj/item/toy/prize/marauder, + /obj/item/toy/prize/seraph, + /obj/item/toy/prize/mauler, + /obj/item/toy/prize/odysseus, + /obj/item/toy/prize/phazon ) /obj/item/weapon/paper/manifest - name = "supply manifest" - var/is_copy = 1 + name = "supply manifest" + var/is_copy = 1 /area/supply/station - name = "Supply Shuttle" - icon_state = "shuttle3" - requires_power = 0 - base_turf = /turf/space + name = "Supply Shuttle" + icon_state = "shuttle3" + requires_power = 0 + base_turf = /turf/space /area/supply/dock - name = "Supply Shuttle" - icon_state = "shuttle3" - requires_power = 0 - base_turf = /turf/space + name = "Supply Shuttle" + icon_state = "shuttle3" + requires_power = 0 + base_turf = /turf/space /obj/structure/plasticflaps //HOW DO YOU CALL THOSE THINGS ANYWAY - name = "\improper plastic flaps" - desc = "Completely impassable - or are they?" - icon = 'icons/obj/stationobjs.dmi' //Change this. - icon_state = "plasticflaps" - density = 0 - anchored = 1 - layer = 4 - explosion_resistance = 5 - var/list/mobs_can_pass = list( - /mob/living/bot, - /mob/living/simple_animal/slime, - /mob/living/simple_animal/mouse, - /mob/living/silicon/robot/drone - ) + name = "\improper plastic flaps" + desc = "Completely impassable - or are they?" + icon = 'icons/obj/stationobjs.dmi' //Change this. + icon_state = "plasticflaps" + density = 0 + anchored = 1 + layer = 4 + explosion_resistance = 5 + var/list/mobs_can_pass = list( + /mob/living/bot, + /mob/living/simple_animal/slime, + /mob/living/simple_animal/mouse, + /mob/living/silicon/robot/drone + ) /obj/structure/plasticflaps/attackby(obj/item/P, mob/user) - if(istype(P, /obj/item/weapon/wirecutters)) - playsound(src, P.usesound, 50, 1) - user << "You start to cut the plastic flaps." - if(do_after(user, 10 * P.toolspeed)) - user << "You cut the plastic flaps." - var/obj/item/stack/material/plastic/A = new /obj/item/stack/material/plastic( src.loc ) - A.amount = 4 - qdel(src) - return - else - return + if(istype(P, /obj/item/weapon/wirecutters)) + playsound(src, P.usesound, 50, 1) + user << "You start to cut the plastic flaps." + if(do_after(user, 10 * P.toolspeed)) + user << "You cut the plastic flaps." + var/obj/item/stack/material/plastic/A = new /obj/item/stack/material/plastic( src.loc ) + A.amount = 4 + qdel(src) + return + else + return /obj/structure/plasticflaps/CanPass(atom/A, turf/T) - if(istype(A) && A.checkpass(PASSGLASS)) - return prob(60) + if(istype(A) && A.checkpass(PASSGLASS)) + return prob(60) - var/obj/structure/bed/B = A - if (istype(A, /obj/structure/bed) && B.buckled_mob)//if it's a bed/chair and someone is buckled, it will not pass - return 0 + var/obj/structure/bed/B = A + if (istype(A, /obj/structure/bed) && B.buckled_mob)//if it's a bed/chair and someone is buckled, it will not pass + return 0 - if(istype(A, /obj/vehicle)) //no vehicles - return 0 + if(istype(A, /obj/vehicle)) //no vehicles + return 0 - var/mob/living/M = A - if(istype(M)) - if(M.lying) - return ..() - for(var/mob_type in mobs_can_pass) - if(istype(A, mob_type)) - return ..() - return issmall(M) + var/mob/living/M = A + if(istype(M)) + if(M.lying) + return ..() + for(var/mob_type in mobs_can_pass) + if(istype(A, mob_type)) + return ..() + return issmall(M) - return ..() + return ..() /obj/structure/plasticflaps/ex_act(severity) - switch(severity) - if (1) - qdel(src) - if (2) - if (prob(50)) - qdel(src) - if (3) - if (prob(5)) - qdel(src) + switch(severity) + if (1) + qdel(src) + if (2) + if (prob(50)) + qdel(src) + if (3) + if (prob(5)) + qdel(src) /obj/structure/plasticflaps/mining //A specific type for mining that doesn't allow airflow because of them damn crates - name = "airtight plastic flaps" - desc = "Heavy duty, airtight, plastic flaps." + name = "airtight plastic flaps" + desc = "Heavy duty, airtight, plastic flaps." - New() //set the turf below the flaps to block air - var/turf/T = get_turf(loc) - if(T) - T.blocks_air = 1 - ..() + New() //set the turf below the flaps to block air + var/turf/T = get_turf(loc) + if(T) + T.blocks_air = 1 + ..() - Destroy() //lazy hack to set the turf to allow air to pass if it's a simulated floor - var/turf/T = get_turf(loc) - if(T) - if(istype(T, /turf/simulated/floor)) - T.blocks_air = 0 - ..() + Destroy() //lazy hack to set the turf to allow air to pass if it's a simulated floor + var/turf/T = get_turf(loc) + if(T) + if(istype(T, /turf/simulated/floor)) + T.blocks_air = 0 + ..() /* /obj/effect/marker/supplymarker - icon_state = "X" - icon = 'icons/misc/mark.dmi' - name = "X" - invisibility = 101 - anchored = 1 - opacity = 0 + icon_state = "X" + icon = 'icons/misc/mark.dmi' + name = "X" + invisibility = 101 + anchored = 1 + opacity = 0 */ /datum/supply_order - var/ordernum - var/datum/supply_packs/object = null - var/orderedby = null - var/comment = null + var/ordernum + var/datum/supply_packs/object = null + var/orderedby = null + var/comment = null /datum/controller/supply - //supply points - var/points = 50 - var/points_per_process = 1.5 - var/points_per_slip = 2 - var/points_per_platinum = 5 // 5 points per sheet - var/points_per_phoron = 5 - //control - var/ordernum - var/list/shoppinglist = list() - var/list/requestlist = list() - var/list/supply_packs = list() - //shuttle movement - var/movetime = 1200 - var/datum/shuttle/ferry/supply/shuttle + //supply points + var/points = 50 + var/points_per_process = 1.5 + var/points_per_slip = 2 + var/points_per_platinum = 5 // 5 points per sheet + var/points_per_phoron = 5 + var/points_per_money = 0.02 + //control + var/ordernum + var/list/shoppinglist = list() + var/list/requestlist = list() + var/list/supply_packs = list() + //shuttle movement + var/movetime = 1200 + var/datum/shuttle/ferry/supply/shuttle - New() - ordernum = rand(1,9000) + New() + ordernum = rand(1,9000) - for(var/typepath in (typesof(/datum/supply_packs) - /datum/supply_packs)) - var/datum/supply_packs/P = new typepath() - supply_packs[P.name] = P + for(var/typepath in (typesof(/datum/supply_packs) - /datum/supply_packs)) + var/datum/supply_packs/P = new typepath() + supply_packs[P.name] = P - // Supply shuttle ticker - handles supply point regeneration - // This is called by the process scheduler every thirty seconds - proc/process() - points += points_per_process + // Supply shuttle ticker - handles supply point regeneration + // This is called by the process scheduler every thirty seconds + proc/process() + points += points_per_process - //To stop things being sent to CentCom which should not be sent to centcomm. Recursively checks for these types. - proc/forbidden_atoms_check(atom/A) - if(istype(A,/mob/living)) - return 1 - if(istype(A,/obj/item/weapon/disk/nuclear)) - return 1 - if(istype(A,/obj/machinery/nuclearbomb)) - return 1 - if(istype(A,/obj/item/device/radio/beacon)) - return 1 + //To stop things being sent to CentCom which should not be sent to centcomm. Recursively checks for these types. + proc/forbidden_atoms_check(atom/A) + if(istype(A,/mob/living)) + return 1 + if(istype(A,/obj/item/weapon/disk/nuclear)) + return 1 + if(istype(A,/obj/machinery/nuclearbomb)) + return 1 + if(istype(A,/obj/item/device/radio/beacon)) + return 1 - for(var/i=1, i<=A.contents.len, i++) - var/atom/B = A.contents[i] - if(.(B)) - return 1 + for(var/i=1, i<=A.contents.len, i++) + var/atom/B = A.contents[i] + if(.(B)) + return 1 - //Sellin - proc/sell() - var/area/area_shuttle = shuttle.get_location_area() - if(!area_shuttle) return + //Sellin + proc/sell() + var/area/area_shuttle = shuttle.get_location_area() + if(!area_shuttle) return - callHook("sell_shuttle", list(area_shuttle)); + callHook("sell_shuttle", list(area_shuttle)); - var/phoron_count = 0 - var/plat_count = 0 + var/phoron_count = 0 + var/plat_count = 0 + var/money_count = 0 - for(var/atom/movable/MA in area_shuttle) - if(MA.anchored) continue + for(var/atom/movable/MA in area_shuttle) + if(MA.anchored) continue - // Must be in a crate! - if(istype(MA,/obj/structure/closet/crate)) - var/obj/structure/closet/crate/CR = MA - callHook("sell_crate", list(CR, area_shuttle)) + // Must be in a crate! + if(istype(MA,/obj/structure/closet/crate)) + var/obj/structure/closet/crate/CR = MA + callHook("sell_crate", list(CR, area_shuttle)) - points += CR.points_per_crate - var/find_slip = 1 + points += CR.points_per_crate + var/find_slip = 1 - for(var/atom in CR) - // Sell manifests - var/atom/A = atom - if(find_slip && istype(A,/obj/item/weapon/paper/manifest)) - var/obj/item/weapon/paper/manifest/slip = A - if(!slip.is_copy && slip.stamped && slip.stamped.len) //yes, the clown stamp will work. clown is the highest authority on the station, it makes sense - points += points_per_slip - find_slip = 0 - continue + for(var/atom in CR) + // Sell manifests + var/atom/A = atom + if(find_slip && istype(A,/obj/item/weapon/paper/manifest)) + var/obj/item/weapon/paper/manifest/slip = A + if(!slip.is_copy && slip.stamped && slip.stamped.len) //yes, the clown stamp will work. clown is the highest authority on the station, it makes sense + points += points_per_slip + find_slip = 0 + continue - // Sell phoron and platinum - if(istype(A, /obj/item/stack)) - var/obj/item/stack/P = A - switch(P.get_material_name()) - if("phoron") phoron_count += P.get_amount() - if("platinum") plat_count += P.get_amount() - qdel(MA) + // Sell phoron and platinum + if(istype(A, /obj/item/stack)) + var/obj/item/stack/P = A + switch(P.get_material_name()) + if("phoron") phoron_count += P.get_amount() + if("platinum") plat_count += P.get_amount() - if(phoron_count) - points += phoron_count * points_per_phoron + //Sell spacebucks + if(istype(A, /obj/item/weapon/spacecash)) + var/obj/item/weapon/spacecash/cashmoney = A + money_count += cashmoney.worth + qdel(MA) - if(plat_count) - points += plat_count * points_per_platinum + if(phoron_count) + points += phoron_count * points_per_phoron - //Buyin - proc/buy() - if(!shoppinglist.len) return + if(plat_count) + points += plat_count * points_per_platinum - var/area/area_shuttle = shuttle.get_location_area() - if(!area_shuttle) return + if(money_count) + points += money_count * points_per_money - var/list/clear_turfs = list() + //Buyin + proc/buy() + if(!shoppinglist.len) return - for(var/turf/T in area_shuttle) - if(T.density) continue - var/contcount - for(var/atom/A in T.contents) - if(!A.simulated) - continue - contcount++ - if(contcount) - continue - clear_turfs += T + var/area/area_shuttle = shuttle.get_location_area() + if(!area_shuttle) return - for(var/S in shoppinglist) - if(!clear_turfs.len) break - var/i = rand(1,clear_turfs.len) - var/turf/pickedloc = clear_turfs[i] - clear_turfs.Cut(i,i+1) - shoppinglist -= S + var/list/clear_turfs = list() - var/datum/supply_order/SO = S - var/datum/supply_packs/SP = SO.object + for(var/turf/T in area_shuttle) + if(T.density) continue + var/contcount + for(var/atom/A in T.contents) + if(!A.simulated) + continue + contcount++ + if(contcount) + continue + clear_turfs += T - var/obj/A = new SP.containertype(pickedloc) - A.name = "[SP.containername] [SO.comment ? "([SO.comment])":"" ]" + for(var/S in shoppinglist) + if(!clear_turfs.len) break + var/i = rand(1,clear_turfs.len) + var/turf/pickedloc = clear_turfs[i] + clear_turfs.Cut(i,i+1) + shoppinglist -= S - //supply manifest generation begin + var/datum/supply_order/SO = S + var/datum/supply_packs/SP = SO.object - var/obj/item/weapon/paper/manifest/slip - if(!SP.contraband) - slip = new /obj/item/weapon/paper/manifest(A) - slip.is_copy = 0 - slip.info = "

[command_name()] Shipping Manifest



" - slip.info +="Order #[SO.ordernum]
" - slip.info +="Destination: [station_name()]
" - slip.info +="[shoppinglist.len] PACKAGES IN THIS SHIPMENT
" - slip.info +="CONTENTS:

" + slip.info += "CHECK CONTENTS AND STAMP BELOW THE LINE TO CONFIRM RECEIPT OF GOODS
" + + return \ No newline at end of file diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm index 82421dc3acf..4d708b2944c 100644 --- a/code/game/turfs/flooring/flooring.dm +++ b/code/game/turfs/flooring/flooring.dm @@ -98,7 +98,6 @@ var/list/flooring_types 'sound/effects/footstep/carpet4.ogg', 'sound/effects/footstep/carpet5.ogg')) -// VOREStation Edit - Eris Carpets /decl/flooring/carpet/bcarpet name = "black carpet" icon_base = "bcarpet" @@ -133,14 +132,13 @@ var/list/flooring_types name = "orange carpet" icon_base = "oracarpet" build_type = /obj/item/stack/tile/carpet/oracarpet -// VOREStation Edit End /decl/flooring/tiling name = "floor" desc = "Scuffed from the passage of countless greyshirts." - icon = 'icons/turf/flooring/tiles.dmi' // VOREStation Edit - Eris floors - icon_base = "tiled" // VOREStation Edit - Eris floors - has_damage_range = 2 // VOREStation Edit - Eris floors + icon = 'icons/turf/flooring/tiles.dmi' + icon_base = "tiled" + has_damage_range = 2 damage_temperature = T0C+1400 flags = TURF_REMOVE_CROWBAR | TURF_CAN_BREAK | TURF_CAN_BURN build_type = /obj/item/stack/tile/floor @@ -152,7 +150,6 @@ var/list/flooring_types 'sound/effects/footstep/floor4.ogg', 'sound/effects/footstep/floor5.ogg')) -//VOREStation Edit for icons and extra types /decl/flooring/tiling/tech desc = "Scuffed from the passage of countless greyshirts." icon = 'icons/turf/flooring/techfloor.dmi' diff --git a/code/game/turfs/flooring/flooring_decals.dm b/code/game/turfs/flooring/flooring_decals.dm index b50ac335d95..86a7ac1a323 100644 --- a/code/game/turfs/flooring/flooring_decals.dm +++ b/code/game/turfs/flooring/flooring_decals.dm @@ -14,7 +14,7 @@ var/list/floor_decals = list() if(newcolour) color = newcolour ..(newloc) -// VOREStation Edit - Hack to workaround byond crash bug +// Hack to workaround byond crash bug /obj/effect/floor_decal/initialize() if(!floor_decals_initialized || !loc || QDELETED(src)) return @@ -23,7 +23,6 @@ var/list/floor_decals = list() T.apply_decals() qdel(src) return -// VOREStation Edit End /obj/effect/floor_decal/reset name = "reset marker" diff --git a/code/game/turfs/simulated/floor_icon.dm b/code/game/turfs/simulated/floor_icon.dm index 007108c72ea..9a7fec800a4 100644 --- a/code/game/turfs/simulated/floor_icon.dm +++ b/code/game/turfs/simulated/floor_icon.dm @@ -60,11 +60,10 @@ var/list/flooring_cache = list() if(!(istype(T) && T.flooring && T.flooring.name == flooring.name)) overlays |= get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHWEST]", "[flooring.icon_base]_corners", SOUTHWEST) - // VOREStation Edit - Hack workaround to byond crash bug + // Hack workaround to byond crash bug //if(decals && decals.len) //overlays |= decals apply_decals() - // VOREStation Edit End if(is_plating() && !(isnull(broken) && isnull(burnt))) //temp, todo icon = 'icons/turf/flooring/plating.dmi' diff --git a/code/game/turfs/simulated/outdoors/snow.dm b/code/game/turfs/simulated/outdoors/snow.dm index 16678d7c988..22f9085a8c1 100644 --- a/code/game/turfs/simulated/outdoors/snow.dm +++ b/code/game/turfs/simulated/outdoors/snow.dm @@ -25,7 +25,7 @@ /turf/simulated/floor/outdoors/snow/attackby(var/obj/item/W, var/mob/user) if(istype(W, /obj/item/weapon/shovel)) to_chat(user, "You begin to remove \the [src] with your [W].") - if(do_after(user, 4 SECONDS)) + if(do_after(user, 4 SECONDS * W.toolspeed)) to_chat(user, "\The [src] has been dug up, and now lies in a pile nearby.") new /obj/item/stack/material/snow(src) demote() diff --git a/code/game/turfs/simulated/wall_types.dm b/code/game/turfs/simulated/wall_types.dm index 6b793d60612..ce4451ff121 100644 --- a/code/game/turfs/simulated/wall_types.dm +++ b/code/game/turfs/simulated/wall_types.dm @@ -53,6 +53,12 @@ /turf/simulated/wall/sifwood/New(var/newloc) ..(newloc,"alien wood") +/turf/simulated/wall/log/New(var/newloc) + ..(newloc,"log") + +/turf/simulated/wall/log_sif/New(var/newloc) + ..(newloc,"alien log") + // Shuttle Walls /turf/simulated/shuttle/wall name = "autojoin wall" diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index bf2c579afbe..24f56696188 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -385,26 +385,30 @@ for(var/areatype in areas_without_camera) world << "* [areatype]" -/datum/admins/proc/cmd_admin_dress() +/datum/admins/proc/cmd_admin_dress(input in getmobs()) set category = "Fun" set name = "Select equipment" if(!check_rights(R_FUN)) return - var/mob/living/carbon/human/H = input("Select mob.", "Select equipment.") as null|anything in human_mob_list - if(!H) + var/target = getmobs()[input] + if(!target) return + if(!ishuman(target)) + return + + var/mob/living/carbon/human/H = target + var/decl/hierarchy/outfit/outfit = input("Select outfit.", "Select equipment.") as null|anything in outfits() if(!outfit) return feedback_add_details("admin_verb","SEQ") - dressup_human(H, outfit, TRUE) + dressup_human(H, outfit, 1) -/proc/dressup_human(var/mob/living/carbon/human/H, var/decl/hierarchy/outfit/outfit, var/undress = TRUE) - world << "dressup_human" +/proc/dressup_human(var/mob/living/carbon/human/H, var/decl/hierarchy/outfit/outfit, var/undress = 1) if(!H || !outfit) return if(undress) diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index b416cb661a4..b78b473e651 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -83,12 +83,12 @@ if (!fqs) output += "  ERROR
" continue - for (var/filter in fqs.devices) - var/list/f = fqs.devices[filter] + for (var/radio_filter in fqs.devices) + var/list/f = fqs.devices[radio_filter] if (!f) - output += "  [filter]: ERROR
" + output += "  [radio_filter]: ERROR
" continue - output += "  [filter]: [f.len]
" + output += "  [radio_filter]: [f.len]
" for (var/device in f) if (isobj(device)) output += "    [device] ([device:x],[device:y],[device:z] in area [get_area(device:loc)])
" @@ -177,11 +177,11 @@ set desc = "This searches all the active jobban entries for the current round and outputs the results to standard output." set category = "Debug" - var/filter = input("Contains what?","Filter") as text|null - if(!filter) + var/job_filter = input("Contains what?","Job Filter") as text|null + if(!job_filter) return usr << "Jobbans active in this round." for(var/t in jobban_keylist) - if(findtext(t, filter)) + if(findtext(t, job_filter)) usr << "[t]" diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index 9b3bdde66ca..c6500143f00 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -29,6 +29,10 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O S["organ_data"] >> pref.organ_data S["rlimb_data"] >> pref.rlimb_data S["body_markings"] >> pref.body_markings + S["synth_color"] >> pref.synth_color + S["synth_red"] >> pref.r_synth + S["synth_green"] >> pref.g_synth + S["synth_blue"] >> pref.b_synth pref.preview_icon = null /datum/category_item/player_setup_item/general/body/save_character(var/savefile/S) @@ -53,6 +57,10 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O S["organ_data"] << pref.organ_data S["rlimb_data"] << pref.rlimb_data S["body_markings"] << pref.body_markings + S["synth_color"] << pref.synth_color + S["synth_red"] << pref.r_synth + S["synth_green"] << pref.g_synth + S["synth_blue"] << pref.b_synth /datum/category_item/player_setup_item/general/body/sanitize_character(var/savefile/S) if(!pref.species || !(pref.species in playable_species)) @@ -101,6 +109,10 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O character.h_style = pref.h_style character.f_style = pref.f_style character.b_type = pref.b_type + character.synth_color = pref.synth_color + character.r_synth = pref.r_synth + character.g_synth = pref.g_synth + character.b_synth = pref.b_synth // Destroy/cyborgize organs and limbs. for(var/name in list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO)) @@ -284,6 +296,11 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O . += "
__
" . += "
" + . += "
" + . += "Allow Synth color: [pref.synth_color ? "Yes" : "No"]
" + if(pref.synth_color) + . += "Change Color
__
" + . = jointext(.,null) /datum/category_item/player_setup_item/general/body/proc/has_flag(var/datum/species/mob_species, var/flag) @@ -665,6 +682,18 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O pref.equip_preview_mob ^= text2num(href_list["toggle_preview_value"]) return TOPIC_REFRESH_UPDATE_PREVIEW + else if(href_list["synth_color"]) + pref.synth_color = !pref.synth_color + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["synth2_color"]) + var/new_color = input(user, "Choose your character's synth colour: ", "Character Preference", rgb(pref.r_synth, pref.g_synth, pref.b_synth)) as color|null + if(new_color && CanUseTopic(user)) + pref.r_synth = hex2num(copytext(new_color, 2, 4)) + pref.g_synth = hex2num(copytext(new_color, 4, 6)) + pref.b_synth = hex2num(copytext(new_color, 6, 8)) + return TOPIC_REFRESH_UPDATE_PREVIEW + return ..() /datum/category_item/player_setup_item/general/body/proc/reset_limbs() diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm index 44a814ac679..ecd61cae71b 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -14,7 +14,8 @@ var/list/gear_datums = list() //create a list of gear datums to sort for(var/geartype in typesof(/datum/gear)-/datum/gear) var/datum/gear/G = geartype - + if(initial(G.type_category) == geartype) + continue var/use_name = initial(G.display_name) var/use_category = initial(G.sort_category) @@ -205,6 +206,7 @@ var/list/gear_datums = list() var/sort_category = "General" var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned. var/exploitable = 0 //Does it go on the exploitable information list? + var/type_category = null /datum/gear/New() ..() diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories.dm b/code/modules/client/preference_setup/loadout/loadout_accessories.dm index bbae19a02a7..6bc944552c6 100644 --- a/code/modules/client/preference_setup/loadout/loadout_accessories.dm +++ b/code/modules/client/preference_setup/loadout/loadout_accessories.dm @@ -1,42 +1,28 @@ /datum/gear/accessory - display_name = "armband, red" - path = /obj/item/clothing/accessory/armband + display_name = "accessory" slot = slot_tie sort_category = "Accessories" + type_category = /datum/gear/accessory + path = /obj/item/clothing/accessory + cost = 1 -/datum/gear/accessory/cargo - display_name = "armband, cargo" - path = /obj/item/clothing/accessory/armband/cargo +/datum/gear/accessory/armband + display_name = "armband selection" + path = /obj/item/clothing/accessory/armband -/datum/gear/accessory/emt - display_name = "armband, EMT" - path = /obj/item/clothing/accessory/armband/medblue +/datum/gear/accessory/armband/New() + ..() + var/list/armbands = list() + for(var/armband in (typesof(/obj/item/clothing/accessory/armband) - typesof(/obj/item/clothing/accessory/armband/med/color))) + var/obj/item/clothing/accessory/armband_type = armband + armbands[initial(armband_type.name)] = armband_type + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(armbands)) -/datum/gear/accessory/engineering - display_name = "armband, engineering" - path = /obj/item/clothing/accessory/armband/engine - -/datum/gear/accessory/hydroponics - display_name = "armband, hydroponics" - path = /obj/item/clothing/accessory/armband/hydro - -/datum/gear/accessory/medical - display_name = "armband, medical" - path = /obj/item/clothing/accessory/armband/med - -/datum/gear/accessory/medical/cross - display_name = "armband, medic" - path = /obj/item/clothing/accessory/armband/med/cross - -/datum/gear/accessory/science - display_name = "armband, science" - path = /obj/item/clothing/accessory/armband/science - -/datum/gear/accessory/colored +/datum/gear/accessory/armband/colored display_name = "armband" path = /obj/item/clothing/accessory/armband/med/color -/datum/gear/accessory/colored/New() +/datum/gear/accessory/armband/colored/New() ..() gear_tweaks = list(gear_tweak_free_color_choice) @@ -74,215 +60,109 @@ ..() gear_tweaks = list(gear_tweak_free_color_choice) - /datum/gear/accessory/wcoat - display_name = "waistcoat" + display_name = "waistcoat selection" path = /obj/item/clothing/accessory/wcoat cost = 1 -/datum/gear/accessory/wcoat/red - display_name = "waistcoat, red" - path = /obj/item/clothing/accessory/wcoat/red - -/datum/gear/accessory/wcoat/grey - display_name = "waistcoat, grey" - path = /obj/item/clothing/accessory/wcoat/grey - -/datum/gear/accessory/wcoat/brown - display_name = "waistcoat, brown" - path = /obj/item/clothing/accessory/wcoat/brown - -/datum/gear/accessory/swvest - display_name = "sweatervest, black" - path = /obj/item/clothing/accessory/wcoat/swvest - cost = 1 - -/datum/gear/accessory/swvest/blue - display_name = "sweatervest, blue" - path = /obj/item/clothing/accessory/wcoat/swvest/blue - -/datum/gear/accessory/swvest/red - display_name = "sweatervest, red" - path = /obj/item/clothing/accessory/wcoat/swvest/red +/datum/gear/accessory/wcoat/New() + ..() + var/list/wcoats = list() + for(var/wcoat in typesof(/obj/item/clothing/accessory/wcoat)) + var/obj/item/clothing/accessory/wcoat_type = wcoat + wcoats[initial(wcoat_type.name)] = wcoat_type + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(wcoats)) /datum/gear/accessory/holster - display_name = "holster, armpit" - path = /obj/item/clothing/accessory/holster/armpit + display_name = "holster selection (Security, CD, HoP)" + path = /obj/item/clothing/accessory/holster allowed_roles = list("Colony Director", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective") -/datum/gear/accessory/holster/hip - display_name = "holster, hip" - path = /obj/item/clothing/accessory/holster/hip - -/datum/gear/accessory/holster/leg - display_name = "holster, leg" - path = /obj/item/clothing/accessory/holster/leg - -/datum/gear/accessory/holster/waist - display_name = "holster, waist" - path = /obj/item/clothing/accessory/holster/waist +/datum/gear/accessory/holster/New() + ..() + var/list/holsters = list() + for(var/holster in typesof(/obj/item/clothing/accessory/holster)) + var/obj/item/clothing/accessory/holster_type = holster + holsters[initial(holster_type.name)] = holster_type + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(holsters)) /datum/gear/accessory/tie - display_name = "tie, black" - path = /obj/item/clothing/accessory/black + display_name = "tie selection" + path = /obj/item/clothing/accessory/tie + cost = 1 -/datum/gear/accessory/tie/blue - display_name = "tie, blue" - path = /obj/item/clothing/accessory/blue - -/datum/gear/accessory/tie/blue_clip - display_name = "tie, blue with clip" - path = /obj/item/clothing/accessory/blue_clip - -/datum/gear/accessory/tie/blue_long - display_name = "tie, blue long" - path = /obj/item/clothing/accessory/blue_long - -/datum/gear/accessory/tie/red - display_name = "tie, red" - path = /obj/item/clothing/accessory/red - -/datum/gear/accessory/tie/red_clip - display_name = "tie, red with clip" - path = /obj/item/clothing/accessory/red_clip - -/datum/gear/accessory/tie/red_long - display_name = "tie, red long" - path = /obj/item/clothing/accessory/red_long - -/datum/gear/accessory/tie/yellow - display_name = "tie, yellow" - path = /obj/item/clothing/accessory/yellow - -/datum/gear/accessory/tie/navy - display_name = "tie, navy blue" - path = /obj/item/clothing/accessory/navy - -/datum/gear/accessory/tie/white - display_name = "tie, white" - path = /obj/item/clothing/accessory/white - -/datum/gear/accessory/tie/horrible - display_name = "tie, socially disgraceful" - path = /obj/item/clothing/accessory/horrible +/datum/gear/accessory/tie/New() + ..() + var/list/ties = list() + for(var/tie in typesof(/obj/item/clothing/accessory/tie)) + var/obj/item/clothing/accessory/tie_type = tie + ties[initial(tie_type.name)] = tie_type + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(ties)) /datum/gear/accessory/scarf - display_name = "scarf" + display_name = "scarf selection" path = /obj/item/clothing/accessory/scarf + cost = 1 -/datum/gear/accessory/scarf/red - display_name = "scarf, red" - path = /obj/item/clothing/accessory/scarf/red +/datum/gear/accessory/scarf/New() + ..() + var/list/scarfs = list() + for(var/scarf in typesof(/obj/item/clothing/accessory/scarf)) + var/obj/item/clothing/accessory/scarf_type = scarf + scarfs[initial(scarf_type.name)] = scarf_type + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(scarfs)) -/datum/gear/accessory/scarf/green - display_name = "scarf, green" - path = /obj/item/clothing/accessory/scarf/green +/datum/gear/accessory/jacket + display_name = "suit jacket selection" + path = /obj/item/clothing/accessory/jacket + cost = 1 -/datum/gear/accessory/scarf/darkblue - display_name = "scarf, dark blue" - path = /obj/item/clothing/accessory/scarf/darkblue - -/datum/gear/accessory/scarf/purple - display_name = "scarf, purple" - path = /obj/item/clothing/accessory/scarf/purple - -/datum/gear/accessory/scarf/yellow - display_name = "scarf, yellow" - path = /obj/item/clothing/accessory/scarf/yellow - -/datum/gear/accessory/scarf/orange - display_name = "scarf, orange" - path = /obj/item/clothing/accessory/scarf/orange - -/datum/gear/accessory/scarf/lightblue - display_name = "scarf, light blue" - path = /obj/item/clothing/accessory/scarf/lightblue - -/datum/gear/accessory/scarf/white - display_name = "scarf, white" - path = /obj/item/clothing/accessory/scarf/white - -/datum/gear/accessory/scarf/black - display_name = "scarf, black" - path = /obj/item/clothing/accessory/scarf/black - -/datum/gear/accessory/scarf/zebra - display_name = "scarf, zebra" - path = /obj/item/clothing/accessory/scarf/zebra - -/datum/gear/accessory/scarf/christmas - display_name = "scarf, christmas" - path = /obj/item/clothing/accessory/scarf/christmas - -/datum/gear/accessory/scarf/stripedred - display_name = "scarf, striped red" - path = /obj/item/clothing/accessory/stripedredscarf - -/datum/gear/accessory/scarf/stripedgreen - display_name = "scarf, striped green" - path = /obj/item/clothing/accessory/stripedgreenscarf - -/datum/gear/accessory/scarf/stripedblue - display_name = "scarf, striped blue" - path = /obj/item/clothing/accessory/stripedbluescarf - -/datum/gear/accessory/suitjacket - display_name = "suit jacket, tan" - path = /obj/item/clothing/accessory/tan_jacket - -/datum/gear/accessory/suitjacket/charcoal - display_name = "suit jacket, charcoal" - path = /obj/item/clothing/accessory/charcoal_jacket - -/datum/gear/accessory/suitjacket/navy - display_name = "suit jacket, navy blue" - path = /obj/item/clothing/accessory/navy_jacket - -/datum/gear/accessory/suitjacket/burgundy - display_name = "suit jacket, burgundy" - path = /obj/item/clothing/accessory/burgundy_jacket - -/datum/gear/accessory/suitjacket/checkered - display_name = "suit jacket, checkered" - path = /obj/item/clothing/accessory/checkered_jacket +/datum/gear/accessory/jacket/New() + ..() + var/list/jackets = list() + for(var/jacket in typesof(/obj/item/clothing/accessory/jacket)) + var/obj/item/clothing/accessory/jacket_type = jacket + jackets[initial(jacket_type.name)] = jacket_type + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(jackets)) /datum/gear/accessory/suitvest display_name = "suit vest" path = /obj/item/clothing/accessory/vest /datum/gear/accessory/brown_vest - display_name = "webbing, engineering" + display_name = "webbing, brown" path = /obj/item/clothing/accessory/storage/brown_vest allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor") /datum/gear/accessory/black_vest - display_name = "webbing, security" + display_name = "webbing, black" path = /obj/item/clothing/accessory/storage/black_vest allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor") /datum/gear/accessory/white_vest - display_name = "webbing, medical" + display_name = "webbing, white" path = /obj/item/clothing/accessory/storage/white_vest allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor") /datum/gear/accessory/brown_drop_pouches - display_name = "drop pouches, engineering" + display_name = "drop pouches, brown" path = /obj/item/clothing/accessory/storage/brown_drop_pouches allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor") /datum/gear/accessory/black_drop_pouches - display_name = "drop pouches, security" + display_name = "drop pouches, black" path = /obj/item/clothing/accessory/storage/black_drop_pouches allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor") /datum/gear/accessory/white_drop_pouches - display_name = "drop pouches, medical" + display_name = "drop pouches, white" path = /obj/item/clothing/accessory/storage/white_drop_pouches allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor") /datum/gear/accessory/fannypack display_name = "fannypack selection" cost = 2 + path = /obj/item/weapon/storage/belt/fannypack /datum/gear/accessory/fannypack/New() ..() diff --git a/code/modules/client/preference_setup/loadout/loadout_eyes.dm b/code/modules/client/preference_setup/loadout/loadout_eyes.dm index 57345631873..1a894704cad 100644 --- a/code/modules/client/preference_setup/loadout/loadout_eyes.dm +++ b/code/modules/client/preference_setup/loadout/loadout_eyes.dm @@ -68,9 +68,9 @@ path = /obj/item/clothing/glasses/sunglasses/medhud/aviator/prescription /datum/gear/eyes/meson - display_name = "Optical Meson Scanners (Engineering)" + display_name = "Optical Meson Scanners (Engineering, Science)" path = /obj/item/clothing/glasses/meson - allowed_roles = list("Station Engineer","Chief Engineer","Atmospheric Technician") + allowed_roles = list("Station Engineer","Chief Engineer","Atmospheric Technician", "Scientist", "Research Director") /datum/gear/eyes/meson/prescription display_name = "Optical Meson Scanners, prescription (Engineering)" @@ -115,4 +115,3 @@ /datum/gear/eyes/sun/prescriptionsun display_name = "sunglasses, presciption (Security/Command)" path = /obj/item/clothing/glasses/sunglasses/prescription - cost = 2 diff --git a/code/modules/client/preference_setup/loadout/loadout_gloves.dm b/code/modules/client/preference_setup/loadout/loadout_gloves.dm index 2656e221dbe..18eb05f8829 100644 --- a/code/modules/client/preference_setup/loadout/loadout_gloves.dm +++ b/code/modules/client/preference_setup/loadout/loadout_gloves.dm @@ -68,10 +68,34 @@ cost = 3 /datum/gear/gloves/forensic - display_name = "gloves, forensic" + display_name = "gloves, forensic (Detective)" path = /obj/item/clothing/gloves/forensic allowed_roles = list("Detective") /datum/gear/gloves/fingerless display_name = "fingerless gloves" - path = /obj/item/clothing/gloves/fingerless \ No newline at end of file + path = /obj/item/clothing/gloves/fingerless + +/datum/gear/gloves/ring + display_name = "ring selection" + description = "Choose from a number of rings." + path = /obj/item/clothing/gloves/ring + cost = 1 + +/datum/gear/gloves/ring/New() + ..() + var/ringtype = list() + ringtype["CTI ring"] = /obj/item/clothing/gloves/ring/cti + ringtype["Mariner University ring"] = /obj/item/clothing/gloves/ring/mariner + ringtype["engagement ring"] = /obj/item/clothing/gloves/ring/engagement + ringtype["signet ring"] = /obj/item/clothing/gloves/ring/seal/signet + ringtype["masonic ring"] = /obj/item/clothing/gloves/ring/seal/mason + ringtype["ring, steel"] = /obj/item/clothing/gloves/ring/material/steel + ringtype["ring, iron"] = /obj/item/clothing/gloves/ring/material/iron + ringtype["ring, silver"] = /obj/item/clothing/gloves/ring/material/silver + ringtype["ring, gold"] = /obj/item/clothing/gloves/ring/material/gold + ringtype["ring, platinum"] = /obj/item/clothing/gloves/ring/material/platinum + ringtype["ring, glass"] = /obj/item/clothing/gloves/ring/material/glass + ringtype["ring, wood"] = /obj/item/clothing/gloves/ring/material/wood + ringtype["ring, plastic"] = /obj/item/clothing/gloves/ring/material/plastic + gear_tweaks += new/datum/gear_tweak/path(ringtype) \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_head.dm b/code/modules/client/preference_setup/loadout/loadout_head.dm index 16beab3c067..f7737c9dde0 100644 --- a/code/modules/client/preference_setup/loadout/loadout_head.dm +++ b/code/modules/client/preference_setup/loadout/loadout_head.dm @@ -136,7 +136,6 @@ /datum/gear/head/cowboy display_name = "cowboy, rodeo" path = /obj/item/clothing/head/cowboy_hat - cost = 3 /datum/gear/head/cowboy/black display_name = "cowboy, black" @@ -268,6 +267,11 @@ ..() gear_tweaks = list(gear_tweak_free_color_choice) + +/datum/gear/head/kitty + display_name = "kitty ears" + path = /obj/item/clothing/head/kitty + /datum/gear/head/beanie display_name = "beanie" path = /obj/item/clothing/head/beanie diff --git a/code/modules/client/preference_setup/loadout/loadout_shoes.dm b/code/modules/client/preference_setup/loadout/loadout_shoes.dm index 82540018fbb..ba2d995b279 100644 --- a/code/modules/client/preference_setup/loadout/loadout_shoes.dm +++ b/code/modules/client/preference_setup/loadout/loadout_shoes.dm @@ -195,6 +195,10 @@ ..() gear_tweaks = list(gear_tweak_free_color_choice) +/datum/gear/shoes/slippers + display_name = "bunny slippers" + path = /obj/item/clothing/shoes/slippers + /datum/gear/shoes/boots/winter display_name = "winter boots" path = /obj/item/clothing/shoes/boots/winter @@ -227,7 +231,7 @@ /datum/gear/shoes/boots/winter/medical display_name = "medical winter boots" path = /obj/item/clothing/shoes/boots/winter/medical - allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist") + allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist") /datum/gear/shoes/boots/winter/mining display_name = "mining winter boots" diff --git a/code/modules/client/preference_setup/loadout/loadout_suit.dm b/code/modules/client/preference_setup/loadout/loadout_suit.dm index dbacf45e34d..82631635af3 100644 --- a/code/modules/client/preference_setup/loadout/loadout_suit.dm +++ b/code/modules/client/preference_setup/loadout/loadout_suit.dm @@ -149,7 +149,7 @@ /datum/gear/suit/labcoat/emt display_name = "labcoat, EMT (Medical)" path = /obj/item/clothing/suit/storage/toggle/labcoat/emt - allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist") + allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist") /datum/gear/suit/roles/surgical_apron display_name = "surgical apron" @@ -182,7 +182,7 @@ /datum/gear/suit/roles/poncho/medical display_name = "poncho, medical" path = /obj/item/clothing/accessory/poncho/roles/medical - allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist") + allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist") /datum/gear/suit/roles/poncho/engineering display_name = "poncho, engineering" @@ -199,6 +199,41 @@ path = /obj/item/clothing/accessory/poncho/roles/cargo allowed_roles = list("Quartermaster","Cargo Technician") +/datum/gear/suit/roles/poncho/cloak/hos + display_name = "cloak, head of security" + path = /obj/item/clothing/accessory/poncho/roles/cloak/hos + allowed_roles = list("Head of Security") + +/datum/gear/suit/roles/poncho/cloak/cmo + display_name = "cloak, chief medical officer" + path = /obj/item/clothing/accessory/poncho/roles/cloak/cmo + allowed_roles = list("Chief Medical Officer") + +/datum/gear/suit/roles/poncho/cloak/ce + display_name = "cloak, chief engineer" + path = /obj/item/clothing/accessory/poncho/roles/cloak/ce + allowed_roles = list("Chief Engineer") + +/datum/gear/suit/roles/poncho/cloak/rd + display_name = "cloak, research director" + path = /obj/item/clothing/accessory/poncho/roles/cloak/rd + allowed_roles = list("Research Director") + +/datum/gear/suit/roles/poncho/cloak/qm + display_name = "cloak, quartermaster" + path = /obj/item/clothing/accessory/poncho/roles/cloak/qm + allowed_roles = list("Quartermaster") + +/datum/gear/suit/roles/poncho/cloak/captain + display_name = "cloak, colony director" + path = /obj/item/clothing/accessory/poncho/roles/cloak/captain + allowed_roles = list("Colony Director") + +/datum/gear/suit/roles/poncho/cloak/hop + display_name = "cloak, head of personnel" + path = /obj/item/clothing/accessory/poncho/roles/cloak/hop + allowed_roles = list("Head of Personnel") + /datum/gear/suit/unathi_robe display_name = "roughspun robe" path = /obj/item/clothing/suit/unathi/robe @@ -257,7 +292,7 @@ /datum/gear/suit/wintercoat/medical display_name = "winter coat, medical" path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical - allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist") + allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist") /datum/gear/suit/wintercoat/science display_name = "winter coat, science" @@ -410,7 +445,7 @@ /datum/gear/suit/snowsuit/medical display_name = "snowsuit, medical" path = /obj/item/clothing/suit/storage/snowsuit/medical - allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist") + allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist") /datum/gear/suit/snowsuit/science display_name = "snowsuit, science" diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform.dm b/code/modules/client/preference_setup/loadout/loadout_uniform.dm index 9edc5e81a1d..836146d11ff 100644 --- a/code/modules/client/preference_setup/loadout/loadout_uniform.dm +++ b/code/modules/client/preference_setup/loadout/loadout_uniform.dm @@ -243,7 +243,6 @@ /datum/gear/uniform/scrub display_name = "scrubs selection" path = /obj/item/clothing/under/rank/medical/scrubs - allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Roboticist") /datum/gear/uniform/scrub/New() ..() @@ -455,3 +454,7 @@ /datum/gear/uniform/red_swept_dress display_name = "red swept dress" path = /obj/item/clothing/under/dress/red_swept_dress + +/datum/gear/uniform/bathrobe + display_name = "bathrobe" + path = /obj/item/clothing/under/bathrobe \ No newline at end of file diff --git a/code/modules/client/preference_setup/traits/trait_defines.dm b/code/modules/client/preference_setup/traits/trait_defines.dm index a1a375a9aa4..0431ac611b9 100644 --- a/code/modules/client/preference_setup/traits/trait_defines.dm +++ b/code/modules/client/preference_setup/traits/trait_defines.dm @@ -30,14 +30,14 @@ name = "Flimsy" desc = "You're more fragile than most, and have less of an ability to endure harm." modifier_type = /datum/modifier/trait/flimsy - muturally_exclusive = list(/datum/trait/modifier/physical/frail) + mutually_exclusive = list(/datum/trait/modifier/physical/frail) /datum/trait/modifier/physical/frail name = "Frail" desc = "Your body is very fragile, and has even less of an ability to endure harm." modifier_type = /datum/modifier/trait/frail - muturally_exclusive = list(/datum/trait/modifier/physical/flimsy) + mutually_exclusive = list(/datum/trait/modifier/physical/flimsy) /datum/trait/modifier/physical/haemophilia @@ -51,10 +51,19 @@ // If a species lacking blood is added, it is suggested to add a check for them here. return ..() + /datum/trait/modifier/physical/weak name = "Weak" desc = "A lack of physical strength causes a diminshed capability in close quarters combat." modifier_type = /datum/modifier/trait/weak + mutually_exclusive = list(/datum/trait/modifier/physical/wimpy) + + +/datum/trait/modifier/physical/wimpy + name = "Wimpy" + desc = "An extreme lack of physical strength causes a greatly diminished capability in close quarters combat." + modifier_type = /datum/modifier/trait/wimpy + mutually_exclusive = list(/datum/trait/modifier/physical/weak) /datum/trait/modifier/physical/inaccurate @@ -68,6 +77,7 @@ /datum/trait/modifier/physical/high_metabolism name = "High Metabolism" modifier_type = /datum/modifier/trait/high_metabolism + mutually_exclusive = list(/datum/trait/modifier/physical/low_metabolism) /datum/trait/modifier/physical/high_metabolism/test_for_invalidity(var/datum/category_item/player_setup_item/traits/setup) if(setup.is_FBP()) @@ -78,6 +88,7 @@ /datum/trait/modifier/physical/low_metabolism name = "Low Metabolism" modifier_type = /datum/modifier/trait/low_metabolism + mutually_exclusive = list(/datum/trait/modifier/physical/high_metabolism) /datum/trait/modifier/physical/low_metabolism/test_for_invalidity(var/datum/category_item/player_setup_item/traits/setup) if(setup.is_FBP()) @@ -165,7 +176,7 @@ name = "Xenophobic" desc = "The mind of the Alien is unknowable, and as such, their intentions cannot be known. You always watch the xenos closely, as they most certainly are watching you \ closely, waiting to strike." - muturally_exclusive = list( + mutually_exclusive = list( /datum/trait/modifier/mental/humanphobe, /datum/trait/modifier/mental/skrellphobe, /datum/trait/modifier/mental/tajaraphobe, @@ -177,36 +188,36 @@ /datum/trait/modifier/mental/humanphobe name = "Human-phobic" desc = "Boilerplate racism for monkeys goes here." - muturally_exclusive = list(/datum/trait/modifier/mental/xenophobe) + mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe) /datum/trait/modifier/mental/skrellphobe name = "Skrell-phobic" desc = "Boilerplate racism for squid goes here." - muturally_exclusive = list(/datum/trait/modifier/mental/xenophobe) + mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe) /datum/trait/modifier/mental/tajaraphobe name = "Tajara-phobic" desc = "Boilerplate racism for cats goes here." - muturally_exclusive = list(/datum/trait/modifier/mental/xenophobe) + mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe) /datum/trait/modifier/mental/unathiphobe name = "Unathi-phobic" desc = "Boilerplate racism for lizards goes here." - muturally_exclusive = list(/datum/trait/modifier/mental/xenophobe) + mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe) // Not sure why anyone would hate/fear these guys but for the sake of completeness here we are. /datum/trait/modifier/mental/dionaphobe name = "Diona-phobic" desc = "Boilerplate racism for trees goes here." - muturally_exclusive = list(/datum/trait/modifier/mental/xenophobe) + mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe) /datum/trait/modifier/mental/teshariphobe name = "Teshari-phobic" desc = "Boilerplate racism for birds goes here." - muturally_exclusive = list(/datum/trait/modifier/mental/xenophobe) + mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe) /datum/trait/modifier/mental/prometheanphobe name = "Promethean-phobic" desc = "Boilerplate racism for jellos goes here." - muturally_exclusive = list(/datum/trait/modifier/mental/xenophobe) + mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe) */ \ No newline at end of file diff --git a/code/modules/client/preference_setup/traits/traits.dm b/code/modules/client/preference_setup/traits/traits.dm index da80a98832f..2913968b1e3 100644 --- a/code/modules/client/preference_setup/traits/traits.dm +++ b/code/modules/client/preference_setup/traits/traits.dm @@ -79,7 +79,7 @@ var/list/trait_categories = list() // The categories available for the trait men if(invalidity) invalid += "[invalidity] " if(conflicts) - invalid += "This trait is muturally exclusive with [conflicts]." + invalid += "This trait is mutually exclusive with [conflicts]." . += "[T.desc]\ [invalid ? "
Cannot take trait. Reason: [invalid]
":""]
" @@ -114,7 +114,7 @@ var/list/trait_categories = list() // The categories available for the trait men var/conflicts = T.test_for_trait_conflict(pref.traits) if(conflicts) pref.traits -= trait_name - to_chat(preference_mob, "The [trait_name] trait is muturally exclusive with [conflicts].") + to_chat(preference_mob, "The [trait_name] trait is mutually exclusive with [conflicts].") /datum/category_item/player_setup_item/traits/OnTopic(href, href_list, user) if(href_list["toggle_trait"]) @@ -129,7 +129,7 @@ var/list/trait_categories = list() // The categories available for the trait men var/conflicts = T.test_for_trait_conflict(pref.traits) if(conflicts) - to_chat(user, "The [T.name] trait is muturally exclusive with [conflicts].") + to_chat(user, "The [T.name] trait is mutually exclusive with [conflicts].") return TOPIC_NOACTION pref.traits += T.name @@ -143,7 +143,7 @@ var/list/trait_categories = list() // The categories available for the trait men /datum/trait var/name = null // Name to show on UI var/desc = null // Description of what it does, also shown on UI. - var/list/muturally_exclusive = list() // List of trait types which cannot be taken alongside this trait. + var/list/mutually_exclusive = list() // List of trait types which cannot be taken alongside this trait. var/category = null // What section to place this trait inside. // Applies effects to the newly spawned mob. @@ -156,16 +156,16 @@ var/list/trait_categories = list() // The categories available for the trait men /datum/trait/proc/test_for_invalidity(var/datum/category_item/player_setup_item/traits/setup) return null -// Checks muturally_exclusive. current_traits needs to be a list of strings. +// Checks mutually_exclusive. current_traits needs to be a list of strings. // Returns null if everything is well, similar to the above proc. Otherwise returns an english_list() of conflicting traits. /datum/trait/proc/test_for_trait_conflict(var/list/current_traits) var/list/conflicts = list() var/result - if(muturally_exclusive.len) + if(mutually_exclusive.len) for(var/trait_name in current_traits) var/datum/trait/T = trait_datums[trait_name] - if(T.type in muturally_exclusive) + if(T.type in mutually_exclusive) conflicts.Add(T.name) if(conflicts.len) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index d364332018c..4709fb3e818 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -51,6 +51,10 @@ datum/preferences var/list/language_prefixes = list() //Kanguage prefix keys var/list/gear //Custom/fluff item loadout. var/list/traits //Traits which modifier characters for better or worse (mostly worse). + var/synth_color = 0 //Lets normally uncolorable synth parts be colorable. + var/r_synth //Used with synth_color to color synth parts that normaly can't be colored. + var/g_synth //Same as above + var/b_synth //Same as above //Some faction information. var/home_system = "Unset" //System of birth. diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 80009147ce4..e8ec514e566 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -170,6 +170,7 @@ icon_state = O.icon_state set_dir(O.dir) +//////////////////////////////////////////////////////////////////////////////////////// //Gloves /obj/item/clothing/gloves name = "gloves" @@ -183,8 +184,11 @@ siemens_coefficient = 0.75 var/wired = 0 var/obj/item/weapon/cell/cell = 0 - var/overgloves = 0 var/fingerprint_chance = 0 //How likely the glove is to let fingerprints through + var/obj/item/clothing/gloves/ring = null //Covered ring + var/mob/living/carbon/human/wearer = null //Used for covered rings when dropping + var/glove_level = 2 //What "layer" the glove is on + var/overgloves = 0 //Used by gauntlets and arm_guards body_parts_covered = HANDS slot_flags = SLOT_GLOVES attack_verb = list("challenged") @@ -201,6 +205,8 @@ /obj/item/clothing/gloves/emp_act(severity) if(cell) cell.emp_act(severity) + if(ring) + ring.emp_act(severity) ..() // Called just before an attack_hand(), in mob/UnarmedAttack() @@ -225,6 +231,59 @@ species_restricted -= "Tajara" return */ + +/obj/item/clothing/gloves/mob_can_equip(mob/user, slot) + var/mob/living/carbon/human/H = user + + if(slot && slot == slot_gloves) + if(istype(H.gloves, /obj/item/clothing/gloves/ring)) + ring = H.gloves + if(ring.glove_level >= src.glove_level) + to_chat(user, "You are unable to wear \the [src] as \the [H.gloves] are in the way.") + ring = null + return 0 + else + H.drop_from_inventory(ring) //Remove the ring (or other under-glove item in the hand slot?) so you can put on the gloves. + ring.forceMove(src) + to_chat(user, "You slip \the [src] on over \the [src.ring].") + else + ring = null + + if(!..()) + if(ring) //Put the ring back on if the check fails. + if(H.equip_to_slot_if_possible(ring, slot_gloves)) + src.ring = null + return 0 + + wearer = H //TODO clean this when magboots are cleaned + return 1 + +/obj/item/clothing/gloves/dropped() + ..() + + if(!wearer) + return + + var/mob/living/carbon/human/H = wearer + if(ring && istype(H)) + if(!H.equip_to_slot_if_possible(ring, slot_gloves)) + ring.forceMove(get_turf(src)) + src.ring = null + wearer = null + +///////////////////////////////////////////////////////////////////// +//Rings + +/obj/item/clothing/gloves/ring + name = "ring" + w_class = ITEMSIZE_TINY + icon = 'icons/obj/clothing/rings.dmi' + gender = NEUTER + species_restricted = list("exclude", "Diona") + siemens_coefficient = 1 + glove_level = 1 + fingerprint_chance = 100 + /////////////////////////////////////////////////////////////////////// //Head /obj/item/clothing/head diff --git a/code/modules/clothing/gloves/arm_guards.dm b/code/modules/clothing/gloves/arm_guards.dm index ef7d0b28dc1..80a5cfd7353 100644 --- a/code/modules/clothing/gloves/arm_guards.dm +++ b/code/modules/clothing/gloves/arm_guards.dm @@ -5,11 +5,11 @@ overgloves = 1 w_class = ITEMSIZE_NORMAL -/obj/item/clothing/gloves/arm_guard/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0) +/obj/item/clothing/gloves/arm_guard/mob_can_equip(var/mob/living/carbon/human/H, slot) if(..()) //This will only run if no other problems occured when equiping. if(H.wear_suit) if(H.wear_suit.body_parts_covered & ARMS) - H << "You can't wear \the [src] with \the [H.wear_suit], it's in the way." + to_chat(H, "You can't wear \the [src] with \the [H.wear_suit], it's in the way.") return 0 return 1 diff --git a/code/modules/clothing/gloves/gauntlets.dm b/code/modules/clothing/gloves/gauntlets.dm index 94956ec714f..bc65252d38f 100644 --- a/code/modules/clothing/gloves/gauntlets.dm +++ b/code/modules/clothing/gloves/gauntlets.dm @@ -9,16 +9,16 @@ /obj/item/clothing/gloves/gauntlets //Used to cover gloves, otherwise act as gloves. name = "gauntlets" desc = "These gloves go over regular gloves." + glove_level = 3 overgloves = 1 var/obj/item/clothing/gloves/gloves = null //Undergloves - var/mob/living/carbon/human/wearer = null //For glove procs /obj/item/clothing/gloves/gauntlets/mob_can_equip(mob/user) var/mob/living/carbon/human/H = user if(H.gloves) gloves = H.gloves if(gloves.overgloves) - user << "You are unable to wear \the [src] as \the [H.gloves] are in the way." + to_chat(user, "You are unable to wear \the [src] as \the [H.gloves] are in the way.") gloves = null return 0 H.drop_from_inventory(gloves) @@ -30,7 +30,7 @@ gloves = null return 0 if(gloves) - user << "You slip \the [src] on over \the [gloves]." + to_chat(user, "You slip \the [src] on over \the [gloves].") wearer = H return 1 @@ -39,6 +39,7 @@ if(gloves) if(!H.equip_to_slot_if_possible(gloves, slot_gloves)) gloves.forceMove(get_turf(src)) + if(ring) + gloves.ring = ring src.gloves = null - wearer = null - ..() \ No newline at end of file + wearer = null \ No newline at end of file diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index cda6411b1c8..bb8f29e8925 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -31,12 +31,19 @@ //Chaplain /obj/item/clothing/head/chaplain_hood name = "chaplain's hood" - desc = "It's hood that covers the head. It keeps you warm during the space winters." + desc = "It's a hood that covers the head. It keeps you warm during the space winters." icon_state = "chaplain_hood" item_state_slots = list(slot_r_hand_str = "beret_black", slot_l_hand_str = "beret_black") flags_inv = BLOCKHAIR body_parts_covered = HEAD +//Chaplain but spookier +/obj/item/clothing/head/chaplain_hood/whiteout + name = "white hood" + desc = "It's a generic white hood. Very spooky." + icon_state = "whiteout_hood" + item_state_slots = list(slot_r_hand_str = "beret_white", slot_l_hand_str = "beret_white") + //Chaplain /obj/item/clothing/head/nun_hood name = "nun hood" diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 876340cb2a2..4facc9fef72 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -15,17 +15,17 @@ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 75, rad = 0) /obj/item/clothing/mask/gas/filter_air(datum/gas_mixture/air) - var/datum/gas_mixture/filtered = new + var/datum/gas_mixture/gas_filtered = new for(var/g in filtered_gases) if(air.gas[g]) - filtered.gas[g] = air.gas[g] * gas_filter_strength - air.gas[g] -= filtered.gas[g] + gas_filtered.gas[g] = air.gas[g] * gas_filter_strength + air.gas[g] -= gas_filtered.gas[g] air.update_values() - filtered.update_values() + gas_filtered.update_values() - return filtered + return gas_filtered /obj/item/clothing/mask/gas/half name = "face mask" diff --git a/code/modules/clothing/rings/material.dm b/code/modules/clothing/rings/material.dm new file mode 100644 index 00000000000..355d6acf587 --- /dev/null +++ b/code/modules/clothing/rings/material.dm @@ -0,0 +1,47 @@ +///////////////////////////////////////// +//Material Rings +/obj/item/clothing/gloves/ring/material + icon = 'icons/obj/clothing/rings.dmi' + icon_state = "material" + +/obj/item/clothing/gloves/ring/material/New(var/newloc, var/new_material) + ..(newloc) + if(!new_material) + new_material = DEFAULT_WALL_MATERIAL + material = get_material_by_name(new_material) + if(!istype(material)) + qdel(src) + return + name = "[material.display_name] ring" + desc = "A ring made from [material.display_name]." + color = material.icon_colour + +/obj/item/clothing/gloves/ring/material/get_material() + return material + +/obj/item/clothing/gloves/ring/material/wood/New(var/newloc) + ..(newloc, "wood") + +/obj/item/clothing/gloves/ring/material/plastic/New(var/newloc) + ..(newloc, "plastic") + +/obj/item/clothing/gloves/ring/material/iron/New(var/newloc) + ..(newloc, "iron") + +/obj/item/clothing/gloves/ring/material/steel/New(var/newloc) + ..(newloc, "steel") + +/obj/item/clothing/gloves/ring/material/silver/New(var/newloc) + ..(newloc, "silver") + +/obj/item/clothing/gloves/ring/material/gold/New(var/newloc) + ..(newloc, "gold") + +/obj/item/clothing/gloves/ring/material/platinum/New(var/newloc) + ..(newloc, "platinum") + +/obj/item/clothing/gloves/ring/material/phoron/New(var/newloc) + ..(newloc, "phoron") + +/obj/item/clothing/gloves/ring/material/glass/New(var/newloc) + ..(newloc, "glass") diff --git a/code/modules/clothing/rings/rings.dm b/code/modules/clothing/rings/rings.dm new file mode 100644 index 00000000000..0bd745ed917 --- /dev/null +++ b/code/modules/clothing/rings/rings.dm @@ -0,0 +1,85 @@ +///////////////////////////////////////// +//Standard Rings +/obj/item/clothing/gloves/ring/engagement + name = "engagement ring" + desc = "An engagement ring. It certainly looks expensive." + icon_state = "diamond" + +/obj/item/clothing/gloves/ring/engagement/attack_self(mob/user) + user.visible_message("\The [user] gets down on one knee, presenting \the [src].","You get down on one knee, presenting \the [src].") + +/obj/item/clothing/gloves/ring/cti + name = "CTI ring" + desc = "A ring commemorating graduation from CTI." + icon_state = "cti-grad" + +/obj/item/clothing/gloves/ring/mariner + name = "Mariner University ring" + desc = "A ring commemorating graduation from Mariner University." + icon_state = "mariner-grad" + + +///////////////////////////////////////// +//Reagent Rings + +/obj/item/clothing/gloves/ring/reagent + flags = OPENCONTAINER + origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 4) + +/obj/item/clothing/gloves/ring/reagent/New() + ..() + create_reagents(15) + +/obj/item/clothing/gloves/ring/reagent/equipped(var/mob/living/carbon/human/H) + ..() + if(istype(H) && H.gloves==src) + + if(reagents.total_volume) + to_chat(H, "You feel a prick as you slip on \the [src].") + if(H.reagents) + var/contained_reagents = reagents.get_reagents() + var/trans = reagents.trans_to_mob(H, 15, CHEM_BLOOD) + admin_inject_log(usr, H, src, contained_reagents, trans) + return + +//Sleepy Ring +/obj/item/clothing/gloves/ring/reagent/sleepy + name = "silver ring" + desc = "A ring made from what appears to be silver." + icon_state = "material" + origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) + +/obj/item/clothing/gloves/ring/reagent/sleepy/New() + ..() + reagents.add_reagent(/datum/reagent/chloralhydrate, 15) // Less than a sleepy-pen, but still enough to knock someone out + +///////////////////////////////////////// +//Seals and Signet Rings +/obj/item/clothing/gloves/ring/seal/secgen + name = "Secretary-General's official seal" + desc = "The official seal of the Secretary-General of the Sol Central Government, featured prominently on a silver ring." + icon_state = "seal-secgen" + +/obj/item/clothing/gloves/ring/seal/mason + name = "masonic ring" + desc = "The Square and Compasses feature prominently on this Masonic ring." + icon_state = "seal-masonic" + +/obj/item/clothing/gloves/ring/seal/signet + name = "signet ring" + desc = "A signet ring, for when you're too sophisticated to sign letters." + icon_state = "seal-signet" + var/nameset = 0 + +/obj/item/clothing/gloves/ring/seal/signet/attack_self(mob/user) + if(nameset) + to_chat(user, "The [src] has already been claimed!") + return + + to_chat(user, "You claim the [src] as your own!") + change_name(user) + nameset = 1 + +/obj/item/clothing/gloves/ring/seal/signet/proc/change_name(var/signet_name = "Unknown") + name = "[signet_name]'s signet ring" + desc = "A signet ring belonging to [signet_name], for when you're too sophisticated to sign letters." \ No newline at end of file diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index 63e4d939653..4a53a244056 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -36,13 +36,14 @@ user.update_inv_shoes() //so our mob-overlays update user.update_action_buttons() -/obj/item/clothing/shoes/magboots/mob_can_equip(mob/user) +/obj/item/clothing/shoes/magboots/mob_can_equip(mob/user, slot) var/mob/living/carbon/human/H = user if(H.shoes) shoes = H.shoes if(shoes.overshoes) - user << "You are unable to wear \the [src] as \the [H.shoes] are in the way." + if(slot && slot == slot_shoes) + to_chat(user, "You are unable to wear \the [src] as \the [H.shoes] are in the way.") shoes = null return 0 H.drop_from_inventory(shoes) //Remove the old shoes so you can put on the magboots. @@ -55,7 +56,8 @@ return 0 if (shoes) - user << "You slip \the [src] on over \the [shoes]." + if(slot && slot == slot_shoes) + to_chat(user, "You slip \the [src] on over \the [shoes].") set_slowdown() wearer = H return 1 diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index c5de388c0f1..aa2e95c3491 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -39,6 +39,15 @@ hoodtype = /obj/item/clothing/head/chaplain_hood allowed = list (/obj/item/weapon/storage/bible) +//Chaplain but spookier +/obj/item/clothing/suit/storage/hooded/chaplain_hoodie/whiteout + name = "white robe" + desc = "A long, flowing white robe. It looks comfortable, but not very warm." + icon_state = "whiteout_robe" + item_state_slots = list(slot_r_hand_str = "suit_white", slot_l_hand_str = "suit_white") + flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER + hoodtype = /obj/item/clothing/head/chaplain_hood/whiteout + //Chaplain /obj/item/clothing/suit/nun name = "nun robe" diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 3298541540c..602b8542879 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -594,6 +594,12 @@ obj/item/clothing/suit/storage/toggle/peacoat icon_state = "smw_hoodie" item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black") +/obj/item/clothing/suit/storage/toggle/hoodie/nrti + name = "New Reykjavik Technical Institute hoodie" + desc = "A warm, gray sweatshirt. It bears the letters ‘NRT’ on the back, in reference to Sif's premiere technical institute." + icon_state = "nrti_hoodie" + item_state_slots = list(slot_r_hand_str = "suit_grey", slot_l_hand_str = "suit_grey") + /obj/item/clothing/suit/whitedress name = "white dress" desc = "A fancy dress." diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index ee6eba13d67..4392a264927 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -80,51 +80,51 @@ return //we aren't an object on the ground so don't call parent ..() -/obj/item/clothing/accessory/blue +/obj/item/clothing/accessory/tie name = "blue tie" icon_state = "bluetie" -/obj/item/clothing/accessory/red +/obj/item/clothing/accessory/tie/red name = "red tie" icon_state = "redtie" -/obj/item/clothing/accessory/blue_clip +/obj/item/clothing/accessory/tie/blue_clip name = "blue tie with a clip" icon_state = "bluecliptie" -/obj/item/clothing/accessory/blue_long +/obj/item/clothing/accessory/tie/blue_long name = "blue long tie" icon_state = "bluelongtie" -/obj/item/clothing/accessory/red_clip +/obj/item/clothing/accessory/tie/red_clip name = "red tie with a clip" icon_state = "redcliptie" -/obj/item/clothing/accessory/red_long +/obj/item/clothing/accessory/tie/red_long name = "red long tie" icon_state = "redlongtie" -/obj/item/clothing/accessory/black +/obj/item/clothing/accessory/tie/black name = "black tie" icon_state = "blacktie" -/obj/item/clothing/accessory/darkgreen +/obj/item/clothing/accessory/tie/darkgreen name = "dark green tie" icon_state = "dgreentie" -/obj/item/clothing/accessory/yellow +/obj/item/clothing/accessory/tie/yellow name = "yellow tie" icon_state = "yellowtie" -/obj/item/clothing/accessory/navy +/obj/item/clothing/accessory/tie/navy name = "navy tie" icon_state = "navytie" -/obj/item/clothing/accessory/white +/obj/item/clothing/accessory/tie/white name = "white tie" icon_state = "whitetie" -/obj/item/clothing/accessory/horrible +/obj/item/clothing/accessory/tie/horrible name = "horrible tie" desc = "A neosilk clip-on tie. This one is disgusting." icon_state = "horribletie" @@ -237,17 +237,14 @@ //Scarves /obj/item/clothing/accessory/scarf - name = "scarf" + name = "green scarf" desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks." + icon_state = "greenscarf" /obj/item/clothing/accessory/scarf/red name = "red scarf" icon_state = "redscarf" -/obj/item/clothing/accessory/scarf/green - name = "green scarf" - icon_state = "greenscarf" - /obj/item/clothing/accessory/scarf/darkblue name = "dark blue scarf" icon_state = "darkbluescarf" @@ -284,14 +281,14 @@ name = "christmas scarf" icon_state = "christmasscarf" -/obj/item/clothing/accessory/stripedredscarf +/obj/item/clothing/accessory/scarf/stripedred name = "striped red scarf" icon_state = "stripedredscarf" -/obj/item/clothing/accessory/stripedgreenscarf +/obj/item/clothing/accessory/scarf/stripedgreen name = "striped green scarf" icon_state = "stripedgreenscarf" -/obj/item/clothing/accessory/stripedbluescarf +/obj/item/clothing/accessory/scarf/stripedblue name = "striped blue scarf" icon_state = "stripedbluescarf" diff --git a/code/modules/clothing/under/accessories/clothing.dm b/code/modules/clothing/under/accessories/clothing.dm index dff0740ace1..3f117d6adec 100644 --- a/code/modules/clothing/under/accessories/clothing.dm +++ b/code/modules/clothing/under/accessories/clothing.dm @@ -3,27 +3,27 @@ desc = "Slick black suit vest." icon_state = "det_vest" -/obj/item/clothing/accessory/tan_jacket +/obj/item/clothing/accessory/jacket/ name = "tan suit jacket" desc = "Cozy suit jacket." icon_state = "tan_jacket" -/obj/item/clothing/accessory/charcoal_jacket +/obj/item/clothing/accessory/jacket/charcoal name = "charcoal suit jacket" desc = "Strict suit jacket." icon_state = "charcoal_jacket" -/obj/item/clothing/accessory/navy_jacket +/obj/item/clothing/accessory/jacket/navy name = "navy suit jacket" desc = "Official suit jacket." icon_state = "navy_jacket" -/obj/item/clothing/accessory/burgundy_jacket +/obj/item/clothing/accessory/jacket/burgundy name = "burgundy suit jacket" desc = "Expensive suit jacket." icon_state = "burgundy_jacket" -/obj/item/clothing/accessory/checkered_jacket +/obj/item/clothing/accessory/jacket/checkered name = "checkered suit jacket" desc = "Lucky suit jacket." icon_state = "checkered_jacket" @@ -115,6 +115,58 @@ icon_state = "cargoponcho" item_state = "cargoponcho" +/* + * Cloak + */ +/obj/item/clothing/accessory/poncho/roles/cloak + name = "brown cloak" + desc = "An elaborate brown cloak." + icon_state = "qmcloak" + item_state = "qmcloak" + body_parts_covered = null + +/obj/item/clothing/accessory/poncho/roles/cloak/ce + name = "chief engineer's cloak" + desc = "An elaborate cloak worn by the chief engineer." + icon_state = "cecloak" + item_state = "cecloak" + +/obj/item/clothing/accessory/poncho/roles/cloak/cmo + name = "chief medical officer's cloak" + desc = "An elaborate cloak meant to be worn by the chief medical officer." + icon_state = "cmocloak" + item_state = "cmocloak" + +/obj/item/clothing/accessory/poncho/roles/cloak/hop + name = "head of personnel's cloak" + desc = "An elaborate cloak meant to be worn by the head of personnel." + icon_state = "hopcloak" + item_state = "hopcloak" + +/obj/item/clothing/accessory/poncho/roles/cloak/rd + name = "research director's cloak" + desc = "An elaborate cloak meant to be worn by the research director." + icon_state = "rdcloak" + item_state = "rdcloak" + +/obj/item/clothing/accessory/poncho/roles/cloak/qm + name = "quartermaster's cloak" + desc = "An elaborate cloak meant to be worn by the quartermaster." + icon_state = "qmcloak" + item_state = "qmcloak" + +/obj/item/clothing/accessory/poncho/roles/cloak/hos + name = "head of security's cloak" + desc = "An elaborate cloak meant to be worn by the head of security." + icon_state = "hoscloak" + item_state = "hoscloak" + +/obj/item/clothing/accessory/poncho/roles/cloak/captain + name = "colony director's cloak" + desc = "An elaborate cloak meant to be worn by the colony director." + icon_state = "capcloak" + item_state = "capcloak" + /obj/item/clothing/accessory/hawaii name = "flower-pattern shirt" desc = "You probably need some welder googles to look at this." diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm index 87e6fa5bf97..a9757e30262 100644 --- a/code/modules/clothing/under/jobs/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian.dm @@ -101,7 +101,7 @@ icon_state = "internalaffairs" item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit") rolled_sleeves = 0 - starting_accessories = list(/obj/item/clothing/accessory/black) + starting_accessories = list(/obj/item/clothing/accessory/tie/black) /obj/item/clothing/under/rank/internalaffairs/skirt desc = "The plain, professional attire of an Internal Affairs Agent. The top button is sewn shut." @@ -156,7 +156,7 @@ desc = "A classy suit." icon_state = "bluesuit" item_state_slots = list(slot_r_hand_str = "lawyer_blue", slot_l_hand_str = "lawyer_blue") - starting_accessories = list(/obj/item/clothing/accessory/red) + starting_accessories = list(/obj/item/clothing/accessory/tie/red) /obj/item/clothing/under/lawyer/bluesuit/skirt name = "blue skirt suit" diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index 02dde0f8151..9680de48841 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -73,7 +73,7 @@ armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 0.9 rolled_sleeves = 0 - starting_accessories = list(/obj/item/clothing/accessory/blue_clip) + starting_accessories = list(/obj/item/clothing/accessory/tie/blue_clip) /* /obj/item/clothing/under/det/verb/rollup() @@ -89,13 +89,13 @@ /obj/item/clothing/under/det/grey icon_state = "detective2" desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks." - starting_accessories = list(/obj/item/clothing/accessory/red_long) + starting_accessories = list(/obj/item/clothing/accessory/tie/red_long) /obj/item/clothing/under/det/black icon_state = "detective3" item_state_slots = list(slot_r_hand_str = "sl_suit", slot_l_hand_str = "sl_suit") desc = "An immaculate white dress shirt, paired with a pair of dark grey dress pants, a red tie, and a charcoal vest." - starting_accessories = list(/obj/item/clothing/accessory/red_long, /obj/item/clothing/accessory/vest) + starting_accessories = list(/obj/item/clothing/accessory/tie/red_long, /obj/item/clothing/accessory/vest) /obj/item/clothing/under/det/corporate name = "detective's jumpsuit" @@ -106,12 +106,12 @@ /obj/item/clothing/under/det/waistcoat icon_state = "detective" desc = "A rumpled white dress shirt paired with well-worn grey slacks, complete with a blue striped tie, faux-gold tie clip, and waistcoat." - starting_accessories = list(/obj/item/clothing/accessory/blue_clip, /obj/item/clothing/accessory/wcoat) + starting_accessories = list(/obj/item/clothing/accessory/tie/blue_clip, /obj/item/clothing/accessory/wcoat) /obj/item/clothing/under/det/grey/waistcoat icon_state = "detective2" desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks, complete with a red striped tie and waistcoat." - starting_accessories = list(/obj/item/clothing/accessory/red_long, /obj/item/clothing/accessory/wcoat) + starting_accessories = list(/obj/item/clothing/accessory/tie/red_long, /obj/item/clothing/accessory/wcoat) /obj/item/clothing/under/det/skirt name = "detective's skirt" diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 7f9586b6a0d..f9a0a9ab379 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -101,7 +101,7 @@ icon_state = "greensuit" item_state_slots = list(slot_r_hand_str = "centcom", slot_l_hand_str = "centcom") rolled_sleeves = 0 - starting_accessories = list(/obj/item/clothing/accessory/darkgreen) + starting_accessories = list(/obj/item/clothing/accessory/tie/darkgreen) /obj/item/clothing/under/gov/skirt name = "Green formal skirt uniform" @@ -161,7 +161,7 @@ icon_state = "gentlesuit" item_state_slots = list(slot_r_hand_str = "grey", slot_l_hand_str = "grey") rolled_sleeves = 0 - starting_accessories = list(/obj/item/clothing/accessory/white, /obj/item/clothing/accessory/wcoat/gentleman) + starting_accessories = list(/obj/item/clothing/accessory/tie/white, /obj/item/clothing/accessory/wcoat/gentleman) /obj/item/clothing/under/gentlesuit/skirt name = "lady's suit" @@ -472,7 +472,7 @@ desc = "A charcoal suit and red tie. Very professional." icon_state = "charcoal_suit" item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black") - starting_accessories = list(/obj/item/clothing/accessory/navy, /obj/item/clothing/accessory/charcoal_jacket) + starting_accessories = list(/obj/item/clothing/accessory/tie/navy, /obj/item/clothing/accessory/jacket/charcoal) /obj/item/clothing/under/suit_jacket/charcoal/skirt name = "charcoal skirt" @@ -483,7 +483,7 @@ desc = "A navy suit and red tie, intended for the station's finest." icon_state = "navy_suit" item_state_slots = list(slot_r_hand_str = "lawyer_blue", slot_l_hand_str = "lawyer_blue") - starting_accessories = list(/obj/item/clothing/accessory/red, /obj/item/clothing/accessory/navy_jacket) + starting_accessories = list(/obj/item/clothing/accessory/tie/red, /obj/item/clothing/accessory/jacket/navy) /obj/item/clothing/under/suit_jacket/navy/skirt name = "navy skirt" @@ -494,7 +494,7 @@ desc = "A burgundy suit and black tie. Somewhat formal." icon_state = "burgundy_suit" item_state_slots = list(slot_r_hand_str = "lawyer_red", slot_l_hand_str = "lawyer_red") - starting_accessories = list(/obj/item/clothing/accessory/black, /obj/item/clothing/accessory/burgundy_jacket) + starting_accessories = list(/obj/item/clothing/accessory/tie/black, /obj/item/clothing/accessory/jacket/burgundy) /obj/item/clothing/under/suit_jacket/burgundy/skirt name = "burgundy skirt" @@ -505,7 +505,7 @@ desc = "That's a very nice suit you have there. Shame if something were to happen to it, eh?" icon_state = "checkered_suit" item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black") - starting_accessories = list(/obj/item/clothing/accessory/black, /obj/item/clothing/accessory/checkered_jacket) + starting_accessories = list(/obj/item/clothing/accessory/tie/black, /obj/item/clothing/accessory/jacket/checkered) /obj/item/clothing/under/suit_jacket/checkered/skirt name = "checkered skirt" @@ -516,7 +516,7 @@ desc = "A tan suit. Smart, but casual." icon_state = "tan_suit" item_state_slots = list(slot_r_hand_str = "tan_suit", slot_l_hand_str = "tan_suit") - starting_accessories = list(/obj/item/clothing/accessory/yellow, /obj/item/clothing/accessory/tan_jacket) + starting_accessories = list(/obj/item/clothing/accessory/tie/yellow, /obj/item/clothing/accessory/jacket) /obj/item/clothing/under/suit_jacket/tan/skirt name = "tan skirt" diff --git a/code/modules/customitems/item_spawning.dm b/code/modules/customitems/item_spawning.dm index 54c3ee4e5c6..ef2333a0af6 100644 --- a/code/modules/customitems/item_spawning.dm +++ b/code/modules/customitems/item_spawning.dm @@ -222,6 +222,8 @@ existing_item = M.wear_id else if(citem.item_path == /obj/item/device/pda) existing_item = locate(/obj/item/device/pda) in M.contents + else if(citem.item_path == /obj/item/weapon/storage/backpack) + existing_item = locate(/obj/item/weapon/storage/backpack) in M.contents // Spawn and equip the item. if(existing_item) diff --git a/code/modules/examine/descriptions/atmospherics.dm b/code/modules/examine/descriptions/atmospherics.dm index e5c707325b5..57b6d3e9da2 100644 --- a/code/modules/examine/descriptions/atmospherics.dm +++ b/code/modules/examine/descriptions/atmospherics.dm @@ -127,7 +127,7 @@ It can be controlled from an Air Alarm. It can be configured to drain all air rapidly with a 'panic syphon' from an air alarm." //Omni filters -/obj/machinery/atmospherics/omni/filter +/obj/machinery/atmospherics/omni/atmos_filter description_info = "Filters gas from a custom input direction, with up to two filtered outputs and a 'everything else' \ output. The filtered output's arrows glow orange." diff --git a/code/modules/examine/stat_icons.dm b/code/modules/examine/stat_icons.dm index b2ed64032a2..1ece266f0c8 100644 --- a/code/modules/examine/stat_icons.dm +++ b/code/modules/examine/stat_icons.dm @@ -29,4 +29,6 @@ var/global/list/description_icons = list( "power cell" = image(icon='icons/obj/power.dmi',icon_state="hcell"), "device cell" = image(icon='icons/obj/power.dmi',icon_state="dcell"), "weapon cell" = image(icon='icons/obj/power.dmi',icon_state="wcell"), + + "hatchet" = image(icon='icons/obj/weapons.dmi',icon_state="hatchet"), ) diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm index 3e3099bbbcc..c0c1eecd9e7 100644 --- a/code/modules/materials/material_recipes.dm +++ b/code/modules/materials/material_recipes.dm @@ -12,6 +12,8 @@ recipes += new/datum/stack_recipe("[display_name] spoon", /obj/item/weapon/material/kitchen/utensil/spoon/plastic, 1, on_floor = 1, supplied_material = "[name]") recipes += new/datum/stack_recipe("[display_name] armor plate", /obj/item/weapon/material/armor_plating, 1, time = 20, on_floor = 1, supplied_material = "[name]") recipes += new/datum/stack_recipe("[display_name] grave marker", /obj/item/weapon/material/gravemarker, 5, time = 50, supplied_material = "[name]") + recipes += new/datum/stack_recipe("[display_name] ring", /obj/item/clothing/gloves/ring/material, 1, on_floor = 1, supplied_material = "[name]") + if(integrity>=50) recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]") @@ -137,6 +139,9 @@ recipes += new/datum/stack_recipe("wooden bucket", /obj/item/weapon/reagent_containers/glass/bucket/wood, 2, time = 4, one_per_turf = 0, on_floor = 0) recipes += new/datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5) +/material/wood/log/generate_recipes() + return // Feel free to add log-only recipes here later if desired. + /material/cardboard/generate_recipes() ..() recipes += new/datum/stack_recipe("box", /obj/item/weapon/storage/box) diff --git a/code/modules/materials/material_sheets.dm b/code/modules/materials/material_sheets.dm index 7ba518f6ef3..f66d2425c6a 100644 --- a/code/modules/materials/material_sheets.dm +++ b/code/modules/materials/material_sheets.dm @@ -203,6 +203,35 @@ icon_state = "sheet-wood" default_type = "wood" +/obj/item/stack/material/log + name = "log" + icon_state = "sheet-log" + default_type = "log" + no_variants = FALSE + color = "#824B28" + max_amount = 25 + w_class = ITEMSIZE_HUGE + +/obj/item/stack/material/log/sif + name = "alien log" + color = "#0099cc" + +/obj/item/stack/material/log/attackby(var/obj/item/W, var/mob/user) + if(!istype(W)) + return ..() + if(W.sharp && W.edge && use(1)) + to_chat(user, "You cut up a log into planks.") + playsound(get_turf(src), 'sound/effects/woodcutting.ogg', 50, 1) + var/obj/item/stack/material/wood/existing_wood = locate() in user.loc + var/obj/item/stack/material/wood/new_wood = new(user.loc) + new_wood.amount = 2 + if(existing_wood) + if(new_wood.transfer_to(existing_wood)) + to_chat(user, "You add the newly-formed wood to the stack. It now contains [existing_wood.amount] planks.") + else + return ..() + + /obj/item/stack/material/cloth name = "cloth" icon_state = "sheet-cloth" diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index 2daa7501c08..0db3a1016ec 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -680,6 +680,18 @@ var/list/name_to_material sheet_singular_name = "plank" sheet_plural_name = "planks" +/material/wood/log + name = "log" + icon_base = "log" + stack_type = /obj/item/stack/material/log + sheet_singular_name = "log" + sheet_plural_name = "logs" + +/material/wood/log/sif + name = "alien log" + icon_colour = "#0099cc" // Cyan-ish + stack_origin_tech = list(TECH_MATERIAL = 2, TECH_BIO = 2) + /material/wood/holographic name = "holowood" display_name = "wood" diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index a017476af32..8fcba9aee3b 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -54,7 +54,7 @@ if(46 to 50) new/obj/item/clothing/under/chameleon(src) for(var/i = 0, i < 7, i++) - new/obj/item/clothing/accessory/horrible(src) + new/obj/item/clothing/accessory/tie/horrible(src) if(51 to 52) // Uncommon, 2% each new/obj/item/weapon/melee/classic_baton(src) if(53 to 54) diff --git a/code/modules/mob/_modifiers/traits.dm b/code/modules/mob/_modifiers/traits.dm index f3f510a4b06..824343c41c4 100644 --- a/code/modules/mob/_modifiers/traits.dm +++ b/code/modules/mob/_modifiers/traits.dm @@ -24,6 +24,12 @@ name = "weak" desc = "A lack of physical strength causes a diminshed capability in close quarters combat" + outgoing_melee_damage_percent = 0.8 + +/datum/modifier/trait/wimpy + name = "wimpy" + desc = "An extreme lack of physical strength causes greatly diminished capability in close quarters combat." + outgoing_melee_damage_percent = 0.6 /datum/modifier/trait/haemophilia diff --git a/code/modules/mob/living/carbon/breathe.dm b/code/modules/mob/living/carbon/breathe.dm index 354a26221c4..d11043ebf77 100644 --- a/code/modules/mob/living/carbon/breathe.dm +++ b/code/modules/mob/living/carbon/breathe.dm @@ -63,8 +63,8 @@ //handle mask filtering if(istype(wear_mask, /obj/item/clothing/mask) && breath) var/obj/item/clothing/mask/M = wear_mask - var/datum/gas_mixture/filtered = M.filter_air(breath) - loc.assume_air(filtered) + var/datum/gas_mixture/gas_filtered = M.filter_air(breath) + loc.assume_air(gas_filtered) return breath return null diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index a4c5efb1fea..a09dad7dba3 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -23,6 +23,12 @@ var/g_skin = 0 var/b_skin = 0 + //Synth colors + var/synth_color = 0 //Lets normally uncolorable synth parts be colorable. + var/r_synth //Used with synth_color to color synth parts that normaly can't be colored. + var/g_synth //Same as above + var/b_synth //Same as above + var/size_multiplier = 1 //multiplier for the mob's icon size var/damage_multiplier = 1 //multiplies melee combat damage var/icon_update = 1 //whether icon updating shall take place diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 652e11f6a3e..2d726f765dc 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -302,7 +302,7 @@ proc/get_radio_key_from_channel(var/channel) var/image/speech_bubble = image('icons/mob/talk.dmi',src,"[speech_type][speech_bubble_test]") spawn(30) qdel(speech_bubble) - // VOREStation Edit - Attempt Multi-Z Talking + // Attempt Multi-Z Talking var/mob/above = src.shadow while(!QDELETED(above)) var/turf/ST = get_turf(above) @@ -315,7 +315,6 @@ proc/get_radio_key_from_channel(var/channel) listening[item] = z_speech_bubble listening_obj |= results["objs"] above = above.shadow - // VOREStation Edit End //Main 'say' and 'whisper' message delivery for(var/mob/M in listening) @@ -325,12 +324,12 @@ proc/get_radio_key_from_channel(var/channel) var/dst = get_dist(get_turf(M),get_turf(src)) if(dst <= message_range || (M.stat == DEAD && !forbid_seeing_deadchat)) //Inside normal message range, or dead with ears (handled in the view proc) - M << (listening[M] || speech_bubble) // VOREStation Edit - Send the image attached to shadow mob if available + M << (listening[M] || speech_bubble) // Send the image attached to shadow mob if available M.hear_say(message, verb, speaking, alt_name, italics, src, speech_sound, sound_vol) if(whispering) //Don't even bother with these unless whispering if(dst > message_range && dst <= w_scramble_range) //Inside whisper scramble range - M << (listening[M] || speech_bubble) // VOREStation Edit - Send the image attached to shadow mob if available + M << (listening[M] || speech_bubble) // Send the image attached to shadow mob if available M.hear_say(stars(message), verb, speaking, alt_name, italics, src, speech_sound, sound_vol*0.2) if(dst > w_scramble_range && dst <= world.view) //Inside whisper 'visible' range M.show_message("[src.name] [w_not_heard].", 2) diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm index 0e3309a1493..0d24cea1e49 100644 --- a/code/modules/multiz/movement.dm +++ b/code/modules/multiz/movement.dm @@ -57,10 +57,8 @@ if(!A.CanPass(src, start, 1.5, 0)) to_chat(src, "\The [A] blocks you.") return 0 - //VOREStation Edit if(!Move(destination)) return 0 - //VOREStation Edit End return 1 /mob/observer/zMove(direction) @@ -199,7 +197,7 @@ /obj/structure/catwalk/CanFallThru(atom/movable/mover as mob|obj, turf/target as turf) if(target.z < z) return FALSE // TODO - Technically should be density = 1 and flags |= ON_BORDER - if(!isturf(mover.loc)) // VORESTATION EDIT. Feel free to do an upstream suggestion as well. + if(!isturf(mover.loc)) return FALSE // Only let loose floor items fall. No more snatching things off people's hands. else return TRUE @@ -213,7 +211,7 @@ return TRUE // We don't block sideways or upward movement. else if(istype(mover) && mover.checkpass(PASSGRILLE)) return TRUE // Anything small enough to pass a grille will pass a lattice - if(!isturf(mover.loc)) // VORESTATION EDIT. Feel free to do an upstream suggestion as well. + if(!isturf(mover.loc)) return FALSE // Only let loose floor items fall. No more snatching things off people's hands. else return FALSE // TODO - Technically should be density = 1 and flags |= ON_BORDER diff --git a/code/modules/multiz/turf.dm b/code/modules/multiz/turf.dm index 161adfb80df..636918c5e8a 100644 --- a/code/modules/multiz/turf.dm +++ b/code/modules/multiz/turf.dm @@ -85,13 +85,12 @@ bottom_turf.plane = src.plane bottom_turf.color = below.color underlays = list(bottom_turf) - // VOREStation Edit - Hack workaround to byond crash bug - Include the magic overlay holder object. + // Hack workaround to byond crash bug - Include the magic overlay holder object. overlays += below.overlays // if(below.overlay_holder) // overlays += (below.overlays + below.overlay_holder.overlays) // else // overlays += below.overlays - // VOREStation Edit End // get objects (not mobs, they are handled by /obj/zshadow) var/list/o_img = list() diff --git a/code/modules/multiz/zshadow.dm b/code/modules/multiz/zshadow.dm index 42dee28f2bd..5874bd4d802 100644 --- a/code/modules/multiz/zshadow.dm +++ b/code/modules/multiz/zshadow.dm @@ -121,7 +121,7 @@ /mob/zshadow/set_typing_indicator(var/state) if(!typing_indicator) typing_indicator = new - typing_indicator.icon = 'icons/mob/talk.dmi' //VOREStation Edit - Looks better on the right with job icons. + typing_indicator.icon = 'icons/mob/talk.dmi' // Looks better on the right with job icons. typing_indicator.icon_state = "typing" if(state && !typing) overlays += typing_indicator diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm index 4e381d47ad6..48759ae1cff 100644 --- a/code/modules/organs/organ_icon.dm +++ b/code/modules/organs/organ_icon.dm @@ -19,6 +19,8 @@ var/global/list/limb_icon_cache = list() if(robotic >= ORGAN_ROBOT) var/datum/robolimb/franchise = all_robolimbs[model] if(!(franchise && franchise.lifelike)) + if(human.synth_color) + s_col = list(human.r_synth, human.g_synth, human.b_synth) return if(species && human.species && species.name != human.species.name) return diff --git a/code/modules/organs/robolimbs.dm b/code/modules/organs/robolimbs.dm index 55fe50db39a..d06ea3332f1 100644 --- a/code/modules/organs/robolimbs.dm +++ b/code/modules/organs/robolimbs.dm @@ -245,6 +245,20 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\ green=xion_green;\ rgb=xion_rgb" +/datum/robolimb/xion_alt3 + company = "Xion - Whiteout" + desc = "This limb has a minimalist black and white casing." + icon = 'icons/mob/human_races/cyberlimbs/xion/xion_alt3.dmi' + unavailable_to_build = 1 + +/datum/robolimb/xion_alt4 + company = "Xion - Breach - Whiteout" + desc = "This limb has a minimalist black and white casing. Looks a bit menacing." + icon = 'icons/mob/human_races/cyberlimbs/xion/xion_alt4.dmi' + unavailable_to_build = 1 + parts = list(BP_HEAD) + + /datum/robolimb/xion_monitor company = "Xion Monitor" desc = "Xion Mfg.'s unique spin on a popular prosthetic head model. It looks and minimalist and utilitarian." diff --git a/code/modules/organs/subtypes/machine.dm b/code/modules/organs/subtypes/machine.dm index 439e9f7b2e8..b775f93a8e0 100644 --- a/code/modules/organs/subtypes/machine.dm +++ b/code/modules/organs/subtypes/machine.dm @@ -2,7 +2,7 @@ name = "microbattery" desc = "A small, powerful cell for use in fully prosthetic bodies." icon_state = "scell" - organ_tag = "cell" + organ_tag = O_CELL parent_organ = BP_TORSO vital = 1 @@ -21,7 +21,7 @@ // Used for an MMI or posibrain being installed into a human. /obj/item/organ/internal/mmi_holder name = "brain interface" - organ_tag = "brain" + organ_tag = O_BRAIN parent_organ = BP_HEAD vital = 1 var/brain_type = /obj/item/device/mmi diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index cee809d5961..0af97704348 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -466,7 +466,7 @@ user << browse("[name][info_links][stamps]", "window=[name]") return - else if(istype(P, /obj/item/weapon/stamp)) + else if(istype(P, /obj/item/weapon/stamp) || istype(P, /obj/item/clothing/gloves/ring/seal)) if((!in_range(src, usr) && loc != user && !( istype(loc, /obj/item/weapon/clipboard) ) && loc.loc != user && user.get_active_hand() != P)) return diff --git a/code/modules/power/cable_heavyduty.dm b/code/modules/power/cable_heavyduty.dm index 9c0aab68dc2..99c91a6b742 100644 --- a/code/modules/power/cable_heavyduty.dm +++ b/code/modules/power/cable_heavyduty.dm @@ -8,7 +8,7 @@ name = "large power cable" desc = "This cable is tough. It cannot be cut with simple hand tools." layer = 2.39 //Just below pipes, which are at 2.4 - color = null //VOREStation Edit + color = null /obj/structure/cable/heavyduty/attackby(obj/item/W, mob/user) diff --git a/code/modules/power/supermatter/setup_supermatter.dm b/code/modules/power/supermatter/setup_supermatter.dm index 559f035cb2d..f797e14f9eb 100644 --- a/code/modules/power/supermatter/setup_supermatter.dm +++ b/code/modules/power/supermatter/setup_supermatter.dm @@ -56,7 +56,7 @@ C.energy_setting = ENERGY_PHORON continue - for(var/obj/effect/engine_setup/filter/F in world) + for(var/obj/effect/engine_setup/atmo_filter/F in world) F.coolant = response var/list/delayed_objects = list() @@ -227,13 +227,13 @@ // Sets up filters. This assumes filters are set to filter out N2 back to the core loop by default! -/obj/effect/engine_setup/filter/ +/obj/effect/engine_setup/atmo_filter/ name = "Omni Filter Marker" var/coolant = null -/obj/effect/engine_setup/filter/activate() +/obj/effect/engine_setup/atmo_filter/activate() ..() - var/obj/machinery/atmospherics/omni/filter/F = locate() in get_turf(src) + var/obj/machinery/atmospherics/omni/atmos_filter/F = locate() in get_turf(src) if(!F) log_and_message_admins("## WARNING: Unable to locate omni filter at [x] [y] [z]!") return SETUP_WARNING diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 76c4249092a..5e599230cfe 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -235,9 +235,18 @@ //if they have a neck grab on someone, that person gets hit instead var/obj/item/weapon/grab/G = locate() in M if(G && G.state >= GRAB_NECK) - visible_message("\The [M] uses [G.affecting] as a shield!") - if(Bump(G.affecting, forced=1)) - return //If Bump() returns 0 (keep going) then we continue on to attack M. + if(G.affecting.stat == DEAD) + var/shield_chance = min(80, (30 * (M.mob_size / 10))) //Small mobs have a harder time keeping a dead body as a shield than a human-sized one. Unathi would have an easier job, if they are made to be SIZE_LARGE in the future. -Mech + if(prob(shield_chance)) + visible_message("\The [M] uses [G.affecting] as a shield!") + if(Bump(G.affecting, forced=1)) + return + else + visible_message("\The [M] tries to use [G.affecting] as a shield, but fails!") + else + visible_message("\The [M] uses [G.affecting] as a shield!") + if(Bump(G.affecting, forced=1)) + return //If Bump() returns 0 (keep going) then we continue on to attack M. passthrough = !attack_mob(M, distance) else @@ -410,6 +419,8 @@ return //cannot shoot yourself if(istype(A, /obj/item/projectile)) return + if(istype(A, /obj/structure/foamedmetal)) //Turrets can detect through foamed metal, but will have to blast through it. Similar to windows, if someone runs behind it, a person should probably just not shoot. + return if(istype(A, /mob/living) || istype(A, /obj/mecha) || istype(A, /obj/vehicle)) result = 2 //We hit someone, return 1! return diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm index 6fb44ad8145..99972f4708a 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm @@ -96,7 +96,6 @@ reagent_state = LIQUID color = "#0064C877" metabolism = REM * 10 - mrate_static = TRUE glass_name = "water" glass_desc = "The father of all refreshments." diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm index d0be0469c10..51ba5d3782d 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm @@ -16,7 +16,6 @@ reagent_state = SOLID color = "#1C1300" ingest_met = REM * 5 - mrate_static = TRUE /datum/reagent/carbon/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) if(alien == IS_DIONA) @@ -74,8 +73,6 @@ var/targ_temp = 310 var/halluci = 0 - mrate_static = TRUE - glass_name = "ethanol" glass_desc = "A well-known alcohol with a variety of applications." diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm index 3f660ca1643..8d49b4cb4a2 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm @@ -7,7 +7,6 @@ taste_mult = 4 reagent_state = SOLID metabolism = REM * 4 - mrate_static = TRUE var/nutriment_factor = 30 // Per unit var/injectable = 0 color = "#664330" diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm index a5fcab44308..8cfb75e20cb 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm @@ -9,7 +9,6 @@ color = "#00BFFF" overdose = REAGENTS_OVERDOSE * 2 metabolism = REM * 0.5 - mrate_static = TRUE scannable = 1 /datum/reagent/inaprovaline/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) @@ -141,7 +140,6 @@ taste_description = "bitterness" reagent_state = LIQUID color = "#0040FF" - mrate_static = TRUE //Until it's not crazy strong, at least overdose = REAGENTS_OVERDOSE * 0.5 scannable = 1 diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 4a936c6014d..97942f0d021 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -170,10 +170,10 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid). /obj/machinery/r_n_d/circuit_imprinter/proc/canBuild(var/datum/design/D) for(var/M in D.materials) - if(materials[M] < D.materials[M]) + if(materials[M] < (D.materials[M] * mat_efficiency)) return 0 for(var/C in D.chemicals) - if(!reagents.has_reagent(C, D.chemicals[C])) + if(!reagents.has_reagent(C, D.chemicals[C] * mat_efficiency)) return 0 return 1 diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 3bce9acd121..c34f8d94549 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -671,7 +671,7 @@ other types of metals and chemistry for reagents). id = "s-filter" req_tech = list(TECH_DATA = 3, TECH_MAGNET = 3) materials = list(DEFAULT_WALL_MATERIAL = 40, "silver" = 10) - build_path = /obj/item/weapon/stock_parts/subspace/filter + build_path = /obj/item/weapon/stock_parts/subspace/sub_filter sort_string = "UAAAB" /datum/design/item/stock_part/subspace_amplifier diff --git a/code/modules/research/prosfab_designs.dm b/code/modules/research/prosfab_designs.dm index f26c66bc9af..38b00c5f96e 100644 --- a/code/modules/research/prosfab_designs.dm +++ b/code/modules/research/prosfab_designs.dm @@ -156,6 +156,38 @@ materials = list(DEFAULT_WALL_MATERIAL = 5625, "glass" = 5625) // req_tech = list(TECH_ENGINEERING = 2, TECH_MATERIAL = 2) +/datum/design/item/prosfab/pros/heart + name = "Prosthetic heart" + id = "pros_heart" + build_path = /obj/item/organ/internal/heart + time = 15 + materials = list(DEFAULT_WALL_MATERIAL = 5625, "glass" = 1000) +// req_tech = list(TECH_ENGINEERING = 2, TECH_MATERIAL = 2) + +/datum/design/item/prosfab/pros/lungs + name = "Prosthetic lungs" + id = "pros_lung" + build_path = /obj/item/organ/internal/lungs + time = 15 + materials = list(DEFAULT_WALL_MATERIAL = 5625, "glass" = 1000) +// req_tech = list(TECH_ENGINEERING = 2, TECH_MATERIAL = 2) + +/datum/design/item/prosfab/pros/liver + name = "Prosthetic liver" + id = "pros_liver" + build_path = /obj/item/organ/internal/liver + time = 15 + materials = list(DEFAULT_WALL_MATERIAL = 5625, "glass" = 1000) +// req_tech = list(TECH_ENGINEERING = 2, TECH_MATERIAL = 2) + +/datum/design/item/prosfab/pros/kidneys + name = "Prosthetic liver" + id = "pros_kidney" + build_path = /obj/item/organ/internal/kidneys + time = 15 + materials = list(DEFAULT_WALL_MATERIAL = 5625, "glass" = 1000) +// req_tech = list(TECH_ENGINEERING = 2, TECH_MATERIAL = 2) + //////////////////// Cyborg Parts //////////////////// /datum/design/item/prosfab/cyborg category = "Cyborg Parts" diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index be489f96377..23334827614 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -164,10 +164,10 @@ /obj/machinery/r_n_d/protolathe/proc/canBuild(var/datum/design/D) for(var/M in D.materials) - if(materials[M] < D.materials[M]) + if(materials[M] < (D.materials[M] * mat_efficiency)) return 0 for(var/C in D.chemicals) - if(!reagents.has_reagent(C, D.chemicals[C])) + if(!reagents.has_reagent(C, D.chemicals[C] * mat_efficiency)) return 0 return 1 diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index 3310ffe6a50..99fa33d1cba 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -27,13 +27,16 @@ var/obj/item/organ/external/P = target.organs_by_name[E.parent_organ] var/obj/item/organ/external/affected = target.get_organ(target_zone) if (affected) - user << "Something is in the way! You can't attach [E] here!" + to_chat(user, "Something is in the way! You can't attach [E] here!") return 0 if(!P) - user << "There's nothing to attach [E] to!" + to_chat(user, "There's nothing to attach [E] to!") return 0 else if((P.robotic >= ORGAN_ROBOT) && (E.robotic < ORGAN_ROBOT)) - user << "Attaching [E] to [P] wouldn't work well." + to_chat(user, "Attaching [E] to [P] wouldn't work well.") + return 0 + else if(istype(E, /obj/item/organ/external/head) && E.robotic >= ORGAN_ROBOT && P.robotic < ORGAN_ROBOT) + to_chat(user, "Attaching [E] to [P] might break [E].") return 0 else return 1 diff --git a/code/modules/xenoarcheaology/finds/misc.dm b/code/modules/xenoarcheaology/finds/misc.dm index 4037de5176a..2729872876e 100644 --- a/code/modules/xenoarcheaology/finds/misc.dm +++ b/code/modules/xenoarcheaology/finds/misc.dm @@ -6,10 +6,15 @@ name = "Crystal" icon = 'icons/obj/mining.dmi' icon_state = "crystal" + density = TRUE + anchored = TRUE /obj/machinery/crystal/New() if(prob(50)) icon_state = "crystal2" + set_light(3, 3, "#CC00CC") + else + set_light(3, 3, "#33CC33") //large finds /* diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index cf745532374..1469c3e3bac 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/human_races/cyberlimbs/xion/xion_alt3.dmi b/icons/mob/human_races/cyberlimbs/xion/xion_alt3.dmi new file mode 100644 index 00000000000..a5aef281619 Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/xion/xion_alt3.dmi differ diff --git a/icons/mob/human_races/cyberlimbs/xion/xion_alt4.dmi b/icons/mob/human_races/cyberlimbs/xion/xion_alt4.dmi new file mode 100644 index 00000000000..e5fa42135be Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/xion/xion_alt4.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index a0e5df9f9d3..c4a79cf9248 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/mob/ties.dmi b/icons/mob/ties.dmi index d041818abb9..2c17ab4a320 100644 Binary files a/icons/mob/ties.dmi and b/icons/mob/ties.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 5ba6b502fc8..7b1b1b40857 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/rings.dmi b/icons/obj/clothing/rings.dmi new file mode 100644 index 00000000000..5274bf8735d Binary files /dev/null and b/icons/obj/clothing/rings.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index d60b03c9aad..382f19e8e11 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi index 84117e2754c..8f5aac8ff68 100644 Binary files a/icons/obj/clothing/ties.dmi and b/icons/obj/clothing/ties.dmi differ diff --git a/icons/obj/flora/deadtrees.dmi b/icons/obj/flora/deadtrees.dmi index 2ae1a5a6e07..7a0b164619c 100644 Binary files a/icons/obj/flora/deadtrees.dmi and b/icons/obj/flora/deadtrees.dmi differ diff --git a/icons/obj/flora/jungleflora.dmi b/icons/obj/flora/jungleflora.dmi new file mode 100644 index 00000000000..9a266e9226e Binary files /dev/null and b/icons/obj/flora/jungleflora.dmi differ diff --git a/icons/obj/flora/jungletree.dmi b/icons/obj/flora/jungletree.dmi new file mode 100644 index 00000000000..51f31413995 Binary files /dev/null and b/icons/obj/flora/jungletree.dmi differ diff --git a/icons/obj/flora/jungletreesmall.dmi b/icons/obj/flora/jungletreesmall.dmi new file mode 100644 index 00000000000..3abd375cc91 Binary files /dev/null and b/icons/obj/flora/jungletreesmall.dmi differ diff --git a/icons/obj/flora/largejungleflora.dmi b/icons/obj/flora/largejungleflora.dmi new file mode 100644 index 00000000000..bba0fd29f62 Binary files /dev/null and b/icons/obj/flora/largejungleflora.dmi differ diff --git a/icons/obj/flora/palmtrees.dmi b/icons/obj/flora/palmtrees.dmi new file mode 100644 index 00000000000..b8708b36d2a Binary files /dev/null and b/icons/obj/flora/palmtrees.dmi differ diff --git a/icons/obj/flora/pinetrees.dmi b/icons/obj/flora/pinetrees.dmi index 9ee04a5baf5..63073046f01 100644 Binary files a/icons/obj/flora/pinetrees.dmi and b/icons/obj/flora/pinetrees.dmi differ diff --git a/icons/obj/flora/rocks.dmi b/icons/obj/flora/rocks.dmi index a1f6a0df0a9..0974360e27b 100644 Binary files a/icons/obj/flora/rocks.dmi and b/icons/obj/flora/rocks.dmi differ diff --git a/icons/obj/robotics.dmi b/icons/obj/robotics.dmi index 85d5a8d0a0b..e45848975be 100644 Binary files a/icons/obj/robotics.dmi and b/icons/obj/robotics.dmi differ diff --git a/icons/obj/stacks.dmi b/icons/obj/stacks.dmi index 1713cacb671..5cdff4a1f33 100644 Binary files a/icons/obj/stacks.dmi and b/icons/obj/stacks.dmi differ diff --git a/icons/turf/outdoors.dmi b/icons/turf/outdoors.dmi index bcd81c28c9a..31fab0ec95c 100644 Binary files a/icons/turf/outdoors.dmi and b/icons/turf/outdoors.dmi differ diff --git a/icons/turf/outdoors_edge.dmi b/icons/turf/outdoors_edge.dmi index 02a52195c2b..fb0b04168e4 100644 Binary files a/icons/turf/outdoors_edge.dmi and b/icons/turf/outdoors_edge.dmi differ diff --git a/icons/turf/wall_masks.dmi b/icons/turf/wall_masks.dmi index 220e1b87e5d..d67671c4d63 100644 Binary files a/icons/turf/wall_masks.dmi and b/icons/turf/wall_masks.dmi differ diff --git a/maps/northern_star/polaris-1.dmm b/maps/northern_star/polaris-1.dmm index 83de065a7ba..4f8aedb853d 100644 --- a/maps/northern_star/polaris-1.dmm +++ b/maps/northern_star/polaris-1.dmm @@ -8373,7 +8373,7 @@ "dfa" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/atmos) "dfb" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue/full{dir = 8},/obj/machinery/camera/network/engineering{c_tag = "ENG - Atmospherics Port"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) "dfc" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/tiled,/area/engineering/atmos) -"dfd" = (/obj/machinery/atmospherics/omni/filter{tag_east = 0; tag_north = 2; tag_south = 1; tag_west = 3; use_power = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) +"dfd" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 0; tag_north = 2; tag_south = 1; tag_west = 3; use_power = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) "dfe" = (/obj/structure/dispenser,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) "dff" = (/turf/simulated/wall,/area/engineering/atmos) "dfg" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled,/area/engineering/atmos) @@ -8660,7 +8660,7 @@ "dkB" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 4; frequency = 1441; icon_state = "map_injector"; id = "n2_in"; use_power = 1},/turf/simulated/floor/reinforced/nitrogen,/area/engineering/atmos) "dkC" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/red/full{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos) "dkD" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor/tiled,/area/engineering/atmos) -"dkE" = (/obj/machinery/atmospherics/omni/filter{tag_east = 1; tag_north = 2; tag_south = 5; tag_west = 4; use_power = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) +"dkE" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 1; tag_north = 2; tag_south = 5; tag_west = 4; use_power = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) "dkF" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/floor/tiled,/area/engineering/atmos) "dkG" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/atmos) "dkH" = (/obj/machinery/atmospherics/pipe/manifold/visible/red,/turf/simulated/floor/tiled,/area/engineering/atmos) @@ -8712,8 +8712,8 @@ "dlB" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2_sensor"},/turf/simulated/floor/reinforced/nitrogen,/area/engineering/atmos) "dlC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2_in"; name = "Nitrogen Supply Control"; output_tag = "n2_out"; sensors = list("n2_sensor" = "Tank")},/obj/effect/floor_decal/corner/red{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/atmos) "dlD" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos) -"dlE" = (/obj/machinery/atmospherics/omni/filter{tag_east = 1; tag_north = 0; tag_south = 6; tag_west = 2; use_power = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) -"dlF" = (/obj/machinery/atmospherics/omni/filter{tag_east = 0; tag_north = 1; tag_south = 7; tag_west = 2; use_power = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/atmos) +"dlE" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 1; tag_north = 0; tag_south = 6; tag_west = 2; use_power = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) +"dlF" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 0; tag_north = 1; tag_south = 7; tag_west = 2; use_power = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/atmos) "dlG" = (/obj/machinery/portable_atmospherics/canister/air,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos) "dlH" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/tiled,/area/engineering/atmos) "dlI" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{dir = 5; icon_state = "intact"; tag = "icon-intact (SOUTHEAST)"},/turf/simulated/wall/r_wall,/area/engineering/workshop) @@ -9696,9 +9696,9 @@ "dEx" = (/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/engineering/aft_hallway) "dEy" = (/turf/simulated/floor,/area/shuttle/constructionsite/station) "dEz" = (/obj/structure/closet/crate,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/turf/simulated/floor/plating,/area/shuttle/constructionsite/station) -"dEA" = (/obj/machinery/atmospherics/omni/filter{tag_east = 1; tag_north = 4; tag_south = 2; tag_west = 0; use_power = 0},/obj/effect/engine_setup/filter,/turf/simulated/floor/plating,/area/engineering/engine_room) +"dEA" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 1; tag_north = 4; tag_south = 2; tag_west = 0; use_power = 0},/obj/effect/engine_setup/atmo_filter,/turf/simulated/floor/plating,/area/engineering/engine_room) "dEB" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan,/turf/simulated/floor,/area/engineering/engine_room) -"dEC" = (/obj/machinery/atmospherics/omni/filter{tag_east = 0; tag_north = 4; tag_south = 2; tag_west = 1; use_power = 0},/obj/effect/engine_setup/filter,/turf/simulated/floor/plating,/area/engineering/engine_room) +"dEC" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 0; tag_north = 4; tag_south = 2; tag_west = 1; use_power = 0},/obj/effect/engine_setup/atmo_filter,/turf/simulated/floor/plating,/area/engineering/engine_room) "dED" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor,/area/engineering/engine_room) "dEE" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/turf/simulated/floor,/area/engineering/engine_room) "dEF" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) @@ -9871,7 +9871,7 @@ "dHQ" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue,/obj/structure/closet/emcloset,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "dHR" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/clothing/shoes/magboots,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) "dHS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/light,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) - + (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/northern_star/polaris-2.dmm b/maps/northern_star/polaris-2.dmm index ee935ce4b09..e2a422d04c8 100644 --- a/maps/northern_star/polaris-2.dmm +++ b/maps/northern_star/polaris-2.dmm @@ -988,7 +988,7 @@ "sZ" = (/obj/structure/table/rack,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "ta" = (/obj/structure/table/rack,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "tb" = (/obj/structure/table/rack,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"tc" = (/obj/structure/table/rack,/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/obj/item/weapon/gun/projectile/automatic/sts35,/obj/item/weapon/gun/projectile/automatic/sts35,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"tc" = (/obj/structure/table/rack,/obj/item/ammo_magazine/m545,/obj/item/ammo_magazine/m545,/obj/item/ammo_magazine/m545,/obj/item/ammo_magazine/m545,/obj/item/weapon/gun/projectile/automatic/sts35,/obj/item/weapon/gun/projectile/automatic/sts35,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "td" = (/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops) "te" = (/obj/machinery/vending/boozeomat,/turf/simulated/shuttle/wall/dark,/area/shuttle/administration/centcom) "tf" = (/obj/machinery/vending/coffee,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom) diff --git a/maps/northern_star/polaris-3.dmm b/maps/northern_star/polaris-3.dmm index dd7fb784cfc..eacc4adfb85 100644 --- a/maps/northern_star/polaris-3.dmm +++ b/maps/northern_star/polaris-3.dmm @@ -280,7 +280,7 @@ "fL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcomsat) "fM" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor,/area/tcomsat) "fN" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/transmitter,/turf/simulated/floor,/area/tcomsat) -"fO" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/turf/simulated/floor,/area/tcomsat) +"fO" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/sub_filter,/obj/item/weapon/stock_parts/subspace/sub_filter,/obj/item/weapon/stock_parts/subspace/sub_filter,/obj/item/weapon/stock_parts/subspace/sub_filter,/obj/item/weapon/stock_parts/subspace/sub_filter,/turf/simulated/floor,/area/tcomsat) "fP" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/turf/simulated/floor,/area/tcomsat) "fQ" = (/obj/machinery/telecomms/server/presets/medical,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "fR" = (/obj/machinery/telecomms/server/presets/science,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) diff --git a/maps/northern_star/polaris-4.dmm b/maps/northern_star/polaris-4.dmm index a55043f6321..456048f5399 100644 --- a/maps/northern_star/polaris-4.dmm +++ b/maps/northern_star/polaris-4.dmm @@ -193,7 +193,7 @@ "dS" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes/buildable,/turf/simulated/floor,/area/outpost/abandoned) "dT" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'COMPRESSED GAS'."; name = "COMPRESSED GAS"; pixel_x = -32; pixel_y = 0},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor,/area/outpost/abandoned) "dU" = (/obj/machinery/atmospherics/pipe/simple/visible/blue,/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/outpost/abandoned) -"dV" = (/obj/machinery/atmospherics/omni/filter{power_rating = 15000; tag_east = 1; tag_north = 3; tag_south = 4; tag_west = 2},/turf/simulated/floor,/area/outpost/abandoned) +"dV" = (/obj/machinery/atmospherics/omni/atmos_filter{power_rating = 15000; tag_east = 1; tag_north = 3; tag_south = 4; tag_west = 2},/turf/simulated/floor,/area/outpost/abandoned) "dW" = (/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/turf/simulated/floor,/area/outpost/abandoned) "dX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/outpost/abandoned) "dY" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/obj/machinery/door/airlock/glass_engineering{name = "Atmospherics"; req_access = list(10)},/obj/machinery/door/firedoor/border_only,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/outpost/abandoned) diff --git a/maps/northern_star/polaris-5.dmm b/maps/northern_star/polaris-5.dmm index cf6ccecf5f8..d228eccef0e 100644 --- a/maps/northern_star/polaris-5.dmm +++ b/maps/northern_star/polaris-5.dmm @@ -246,7 +246,7 @@ "eL" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/outpost/research/mixing) "eM" = (/obj/machinery/atmospherics/omni/mixer{tag_east = 2; tag_east_con = null; tag_north = 1; tag_north_con = 0.5; tag_south = 0; tag_south_con = null; tag_west = 1; tag_west_con = 0.5; use_power = 0},/turf/simulated/floor/tiled,/area/outpost/research/mixing) "eN" = (/obj/machinery/atmospherics/pipe/manifold/visible,/obj/machinery/meter,/obj/machinery/light,/turf/simulated/floor/tiled,/area/outpost/research/mixing) -"eO" = (/obj/machinery/atmospherics/omni/filter{tag_east = 2; tag_north = 6; tag_south = 0; tag_west = 1; use_power = 0},/turf/simulated/floor/tiled,/area/outpost/research/mixing) +"eO" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 2; tag_north = 6; tag_south = 0; tag_west = 1; use_power = 0},/turf/simulated/floor/tiled,/area/outpost/research/mixing) "eP" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -29},/turf/simulated/floor/tiled,/area/outpost/research/mixing) "eQ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/purple{dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway/toxins_hallway) "eR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway/toxins_hallway) @@ -932,7 +932,7 @@ "rV" = (/obj/machinery/door/window/southright{name = "Spectrometry Lab"; req_access = list(65)},/obj/effect/floor_decal/corner/beige{dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/analysis) "rW" = (/obj/machinery/reagentgrinder,/obj/structure/table/glass,/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/beige/full{dir = 4},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Sample Preparation"; dir = 8},/obj/machinery/status_display{layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/outpost/research/analysis) "rX" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/outpost/research/anomaly) -"rY" = (/obj/machinery/atmospherics/omni/filter{tag_east = 1; tag_south = 2; tag_west = 3},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/anomaly) +"rY" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 1; tag_south = 2; tag_west = 3},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/anomaly) "rZ" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/outpost/research/anomaly) "sa" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/dropper{pixel_y = -4},/obj/effect/floor_decal/industrial/warning,/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Anomalous Materials Port"; dir = 4},/obj/machinery/status_display{layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly) "sb" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly) @@ -1319,9 +1319,9 @@ "zs" = (/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/outpost/engineering/mining/atmospherics) "zt" = (/obj/machinery/atmospherics/binary/pump/on{dir = 4},/turf/simulated/floor/plating,/area/outpost/engineering/mining/atmospherics) "zu" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/turf/simulated/floor/plating,/area/outpost/engineering/mining/atmospherics) -"zv" = (/obj/machinery/atmospherics/omni/filter{tag_east = 2; tag_north = 6; tag_south = 0; tag_west = 1},/turf/simulated/floor/plating,/area/outpost/engineering/mining/atmospherics) -"zw" = (/obj/machinery/atmospherics/omni/filter{tag_east = 2; tag_north = 7; tag_west = 1},/turf/simulated/floor/plating,/area/outpost/engineering/mining/atmospherics) -"zx" = (/obj/machinery/atmospherics/omni/filter{tag_east = 2; tag_north = 5; tag_west = 1},/turf/simulated/floor/plating,/area/outpost/engineering/mining/atmospherics) +"zv" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 2; tag_north = 6; tag_south = 0; tag_west = 1},/turf/simulated/floor/plating,/area/outpost/engineering/mining/atmospherics) +"zw" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 2; tag_north = 7; tag_west = 1},/turf/simulated/floor/plating,/area/outpost/engineering/mining/atmospherics) +"zx" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 2; tag_north = 5; tag_west = 1},/turf/simulated/floor/plating,/area/outpost/engineering/mining/atmospherics) "zy" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1},/turf/simulated/floor/plating,/area/outpost/engineering/mining/atmospherics) "zz" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/freezer,/area/outpost/mining_main/dorms) "zA" = (/obj/structure/mirror{pixel_x = 30; pixel_y = -2},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/freezer,/area/outpost/mining_main/dorms) @@ -1747,7 +1747,7 @@ "HE" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 6},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored) "HF" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/wall/r_wall,/area/outpost/engineering/atmospherics) "HG" = (/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Outpost Atmospherics"; dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'COMPRESSED GAS'."; name = "COMPRESSED GAS"; pixel_x = -32; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/machinery/meter,/turf/simulated/floor,/area/outpost/engineering/atmospherics) -"HH" = (/obj/machinery/atmospherics/omni/filter{power_rating = 15000; tag_east = 1; tag_north = 3; tag_south = 4; tag_west = 2},/turf/simulated/floor,/area/outpost/engineering/atmospherics) +"HH" = (/obj/machinery/atmospherics/omni/atmos_filter{power_rating = 15000; tag_east = 1; tag_north = 3; tag_south = 4; tag_west = 2},/turf/simulated/floor,/area/outpost/engineering/atmospherics) "HI" = (/obj/machinery/atmospherics/pipe/simple/visible/blue,/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/outpost/engineering/atmospherics) "HJ" = (/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/outpost/engineering/atmospherics) "HK" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/obj/machinery/door/airlock/glass_engineering{name = "Atmospherics"; req_access = list(10)},/obj/machinery/door/firedoor/border_only,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/outpost/engineering/atmospherics) @@ -1912,7 +1912,7 @@ "KN" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space) "KO" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) "KP" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/outpost/engineering/solarsoutside/aft) - + (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/nano/templates/omni_filter.tmpl b/nano/templates/omni_filter.tmpl index 8f2dbfc924e..7e99e73786d 100644 --- a/nano/templates/omni_filter.tmpl +++ b/nano/templates/omni_filter.tmpl @@ -36,7 +36,7 @@
Filter
{{for data.ports}}
- {{:helper.link(value.f_type ? value.f_type : 'None', null, {'command' : 'switch_filter', 'mode' : value.f_type, 'dir' : value.dir}, value.filter ? null : 'disabled', value.f_type ? 'selected' : null)}} + {{:helper.link(value.f_type ? value.f_type : 'None', null, {'command' : 'switch_filter', 'mode' : value.f_type, 'dir' : value.dir}, value.atmo_filter ? null : 'disabled', value.f_type ? 'selected' : null)}}
{{/for}} diff --git a/nano/templates/sleeper.tmpl b/nano/templates/sleeper.tmpl index edcb7b725d2..a0e9da787c5 100644 --- a/nano/templates/sleeper.tmpl +++ b/nano/templates/sleeper.tmpl @@ -49,7 +49,7 @@ {{:helper.displayBar(data.tox, 0, 100, (data.tox <= 25) ? 'good' : (data.tox <= 50) ? 'average' : 'bad')}}{{:helper.round(data.tox)}}
- {{:helper.link(data.filtering ? "Dialysis active" : "Dialysis inactive", null, {'filter' : !data.filtering})}} + {{:helper.link(data.filtering ? "Dialysis active" : "Dialysis inactive", null, {'sleeper_filter' : !data.filtering})}}
{{:helper.link("Eject occupant", null, {'eject' : 0})}} diff --git a/polaris.dme b/polaris.dme index 57ac9141833..5f12fb45653 100644 --- a/polaris.dme +++ b/polaris.dme @@ -234,6 +234,7 @@ #include "code\datums\outfits\spec_op.dm" #include "code\datums\outfits\tournament.dm" #include "code\datums\outfits\wizardry.dm" +#include "code\datums\outfits\costumes\halloween.dm" #include "code\datums\outfits\jobs\_defines.dm" #include "code\datums\outfits\jobs\cargo.dm" #include "code\datums\outfits\jobs\civilian.dm" @@ -1042,6 +1043,8 @@ #include "code\game\objects\structures\crates_lockers\closets\secure\scientist.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\security.dm" +#include "code\game\objects\structures\flora\grass.dm" +#include "code\game\objects\structures\flora\trees.dm" #include "code\game\objects\structures\ghost_pods\ghost_pods.dm" #include "code\game\objects\structures\ghost_pods\silicon.dm" #include "code\game\objects\structures\stool_bed_chair_nest\alien_nests.dm" @@ -1290,6 +1293,8 @@ #include "code\modules\clothing\masks\miscellaneous.dm" #include "code\modules\clothing\masks\monitor.dm" #include "code\modules\clothing\masks\voice.dm" +#include "code\modules\clothing\rings\material.dm" +#include "code\modules\clothing\rings\rings.dm" #include "code\modules\clothing\shoes\boots.dm" #include "code\modules\clothing\shoes\colour.dm" #include "code\modules\clothing\shoes\leg_guards.dm" diff --git a/sound/ambience/alarm4.ogg b/sound/ambience/alarm4.ogg index a86bfd155f8..0df767c0d23 100644 Binary files a/sound/ambience/alarm4.ogg and b/sound/ambience/alarm4.ogg differ diff --git a/sound/ambience/alarm4old.ogg b/sound/ambience/alarm4old.ogg new file mode 100644 index 00000000000..a86bfd155f8 Binary files /dev/null and b/sound/ambience/alarm4old.ogg differ