diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm index c0cf15616f..66468a516c 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 feb1b5cb93..8710623dfd 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 38d889f37b..2ab891424c 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 5bc9f8d20f..e9fe37f8a1 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 19e5615291..9ebf60632c 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 8ac42dc0b9..eb1ef73eb7 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 ef83e95f77..4b56d94f0d 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 0000000000..d4ad8fa8f9 --- /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 1a6b284c63..5958cf5586 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 c200e2edda..cbe52301df 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 5be62b2a58..5a3bb038bb 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 dc6c5e170d..69965ef7f0 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 3b642ffd2f..a092ed7b65 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 630a9bdb10..0056675afc 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 95809c63f4..88a448c571 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 be0a0bbd07..f74b1d6185 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 ded2ccdde8..f510688733 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 546e6acd88..ac1e21051a 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 66d25dda5a..f88d8a4837 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 ba8aa85b2c..c87e78cfd5 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 a128e6c4e4..5a6b77931f 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 049289c7c7..87eba96324 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 a7d5c780c3..fde455ae51 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 4547b4eaf3..e9f693e431 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 8eba407e72..1b181aebb5 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 17797e2a68..4f33f1703f 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 77087ed32f..5d692b39b9 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 acd680ba57..4e895b2b62 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 1292a3747b..fa511bf412 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 8cea4b22c3..5a665dfd43 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 56149a254c..db8fc51992 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 00a0654cc1..de1f20fe0a 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 2c28dd7ecb..03f743db6b 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 019425db0e..9de35c2582 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 e2f4137cb4..d10a57c952 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 888af9124b..32a4580c7e 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 1d806a2710..6d683cd9a8 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 835971b012..856104dcce 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 6f8e1782eb..46543b901b 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 87afb34fa4..7e543b75cd 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 e08dba0a0f..5976c35703 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 0000000000..d5e7e965a8 --- /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 0000000000..d7960b5982 --- /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 6597f62107..ac231eb947 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 c4fb053e32..daa6e8c94a 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 98bae005f8..ea52ed3845 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 be376e0f65..2d07f0ffbd 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 82421dc3ac..4d708b2944 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 b50ac335d9..86a7ac1a32 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 007108c72e..9a7fec800a 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 16678d7c98..22f9085a8c 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 6b793d6061..ce4451ff12 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 bf2c579afb..24f5669618 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 b416cb661a..b78b473e65 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 9b3bdde66c..c6500143f0 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 44a814ac67..ecd61cae71 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 bbae19a02a..6bc944552c 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 5734563187..1a894704ca 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 2656e221db..18eb05f882 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 16beab3c06..f7737c9dde 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 82540018fb..ba2d995b27 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 dbacf45e34..82631635af 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 9edc5e81a1..836146d11f 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 a1a375a9aa..0431ac611b 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 da80a98832..2913968b1e 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 d364332018..4709fb3e81 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 80009147ce..e8ec514e56 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 ef7d0b28dc..80a5cfd735 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 94956ec714..bc65252d38 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 cda6411b1c..bb8f29e892 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 876340cb2a..4facc9fef7 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 0000000000..355d6acf58 --- /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 0000000000..0bd745ed91 --- /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 63e4d93965..4a53a24405 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 c5de388c0f..aa2e95c349 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 3298541540..602b854287 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 ee6eba13d6..4392a26492 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 dff0740ace..3f117d6ade 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 87e6fa5bf9..a9757e3026 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 02dde0f815..9680de4884 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 7f9586b6a0..f9a0a9ab37 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 54c3ee4e5c..ef2333a0af 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 e5c707325b..57b6d3e9da 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 b2ed64032a..1ece266f0c 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 3e3099bbbc..c0c1eecd9e 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 7ba518f6ef..f66d2425c6 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 2daa7501c0..0db3a1016e 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 a017476af3..8fcba9aee3 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 f3f510a4b0..824343c41c 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 354a26221c..d11043ebf7 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 a4c5efb1fe..a09dad7dba 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 652e11f6a3..2d726f765d 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 0e3309a149..0d24cea1e4 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 161adfb80d..636918c5e8 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 42dee28f2b..5874bd4d80 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 4e381d47ad..48759ae1cf 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 55fe50db39..d06ea3332f 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 439e9f7b2e..b775f93a8e 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 cee809d596..0af9770434 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 9c0aab68dc..99c91a6b74 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 559f035cb2..f797e14f9e 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 76c4249092..5e599230cf 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 6fb44ad814..99972f4708 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 d0be0469c1..51ba5d3782 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 3f660ca164..8d49b4cb4a 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 a5fcab4430..8cfb75e20c 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 4a936c6014..97942f0d02 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 3bce9acd12..c34f8d9454 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 f26c66bc9a..38b00c5f96 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 be489f9637..2333482761 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 3310ffe6a5..99fa33d1cb 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 4037de5176..2729872876 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 cf74553237..1469c3e3ba 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 0000000000..a5aef28161 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 0000000000..e5fa42135b 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 a0e5df9f9d..c4a79cf924 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 d041818abb..2c17ab4a32 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 5ba6b502fc..7b1b1b4085 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 0000000000..5274bf8735 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 d60b03c9aa..382f19e8e1 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 84117e2754..8f5aac8ff6 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 2ae1a5a6e0..7a0b164619 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 0000000000..9a266e9226 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 0000000000..51f3141399 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 0000000000..3abd375cc9 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 0000000000..bba0fd29f6 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 0000000000..b8708b36d2 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 9ee04a5baf..63073046f0 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 a1f6a0df0a..0974360e27 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 85d5a8d0a0..e45848975b 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 1713cacb67..5cdff4a1f3 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 bcd81c28c9..31fab0ec95 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 02a52195c2..fb0b04168e 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 220e1b87e5..d67671c4d6 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 83de065a7b..4f8aedb853 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 ee935ce4b0..e2a422d04c 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 dd7fb784cf..eacc4adfb8 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 a55043f632..456048f539 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 cf6ccecf5f..d228eccef0 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 8f2dbfc924..7e99e73786 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 edcb7b725d..a0e9da787c 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 57ac914183..5f12fb4565 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 a86bfd155f..0df767c0d2 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 0000000000..a86bfd155f Binary files /dev/null and b/sound/ambience/alarm4old.ogg differ