From acda8e77306c40f5b174723e04820548abe8ade4 Mon Sep 17 00:00:00 2001 From: Markolie Date: Fri, 30 Jan 2015 15:42:55 +0100 Subject: [PATCH 1/5] Atmos bug fixes --- code/ATMOSPHERICS/components/valve.dm | 2 +- code/game/machinery/alarm.dm | 5 +++-- code/game/machinery/pipe/construction.dm | 2 +- code/modules/power/apc.dm | 1 - maps/cyberiad.dmm | 12 ++++++------ nano/templates/air_alarm.tmpl | 14 +++++++------- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/code/ATMOSPHERICS/components/valve.dm b/code/ATMOSPHERICS/components/valve.dm index 0120590d2d3..e8b99a9fb99 100644 --- a/code/ATMOSPHERICS/components/valve.dm +++ b/code/ATMOSPHERICS/components/valve.dm @@ -302,7 +302,7 @@ /obj/machinery/atmospherics/valve/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) if (!istype(W, /obj/item/weapon/wrench)) return ..() - if (istype(src, /obj/machinery/atmospherics/valve/digital)) + if (istype(src, /obj/machinery/atmospherics/valve/digital) && src:frequency) user << "\red You cannot unwrench this [src], it's too complicated." return 1 var/datum/gas_mixture/int_air = return_air() diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 6de87e93a12..0ab30e69690 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -691,7 +691,7 @@ } if (!ui) // the ui does not exist, so we'll create a new one - ui = new(user, src, ui_key, "air_alarm.tmpl", name, 550, 410) + ui = new(user, src, ui_key, "air_alarm.tmpl", name, 570, 410) // When the UI is first opened this is the data it will use ui.set_initial_data(data) ui.open() @@ -758,7 +758,8 @@ "n2o_scrub", "o2_scrub", "panic_siphon", - "scrubbing") + "scrubbing", + "direction") var/val if(href_list["val"]) val=text2num(href_list["val"]) diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 017856952ca..d52a08a9960 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -104,7 +104,7 @@ Buildable meters src.pipe_type = PIPE_UVENT else if(istype(make_from, /obj/machinery/atmospherics/valve)) src.pipe_type = PIPE_MVALVE - else if(istype(make_from, /obj/machinery/atmospherics/binary/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)) src.pipe_type = PIPE_GAS_FILTER_M diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index acea2b9849c..9697509e5e1 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -1206,7 +1206,6 @@ update() else if (last_ch != charging) queue_icon_update() - src.updateDialog() // val 0=off, 1=off(auto) 2=on 3=on(auto) // on 0=off, 1=on, 2=autooff diff --git a/maps/cyberiad.dmm b/maps/cyberiad.dmm index d718966739a..b752f8aeb97 100644 --- a/maps/cyberiad.dmm +++ b/maps/cyberiad.dmm @@ -3284,7 +3284,7 @@ "blh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/hallway/primary/starboard/east) "bli" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/power/apc{dir = 1; name = "Starboard Hall East APC"; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/hallway/primary/starboard/east) "blj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor,/area/hallway/primary/starboard/east) -"blk" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/machinery/camera{c_tag = "Starboard Primary Hallway 6"; dir = 2; network = list("SS13")},/turf/simulated/floor,/area/hallway/primary/starboard/east) +"blk" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/machinery/camera{c_tag = "Starboard Primary Hallway 7"; dir = 2; network = list("SS13")},/turf/simulated/floor,/area/hallway/primary/starboard/east) "bll" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/hallway/primary/starboard/east) "blm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor{dir = 4; icon_state = "whitecorner"},/area/hallway/secondary/exit) "bln" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/hallway/secondary/exit) @@ -3405,7 +3405,7 @@ "bny" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/hallway/primary/starboard/west) "bnz" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor,/area/hallway/primary/starboard/east) "bnA" = (/obj/machinery/light,/turf/simulated/floor,/area/hallway/primary/starboard/east) -"bnB" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/machinery/camera{c_tag = "Starboard Primary Hallway 5"; dir = 1; network = list("SS13")},/turf/simulated/floor,/area/hallway/primary/starboard/east) +"bnB" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/machinery/camera{c_tag = "Starboard Primary Hallway 6"; dir = 1; network = list("SS13")},/turf/simulated/floor,/area/hallway/primary/starboard/east) "bnC" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = -29; pixel_y = -29},/turf/simulated/floor,/area/hallway/primary/starboard/east) "bnD" = (/obj/machinery/light,/turf/simulated/floor{dir = 2; icon_state = "purple"},/area/hallway/primary/starboard/east) "bnE" = (/turf/simulated/floor{dir = 2; icon_state = "purple"},/area/hallway/primary/starboard/east) @@ -3703,7 +3703,7 @@ "btk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) "btl" = (/obj/structure/table/reinforced,/obj/item/weapon/hand_labeler,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; name = "Chemistry Cleaner"},/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) "btm" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/airless{icon_state = "white"},/area/medical/reception) -"btn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera{c_tag = "Medbay Psych Office Corridor"; network = list("SS13")},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) +"btn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera{c_tag = "Medbay Psych Office Corridor West"; network = list("SS13")},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bto" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "btp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment,/obj/structure/closet/walllocker/emerglocker/north,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "btq" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/apmaint) @@ -5418,7 +5418,7 @@ "caj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay2) "cak" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay2) "cal" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay2) -"cam" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/power/apc{dir = 2; name = "Medbay APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay2) +"cam" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/power/apc{dir = 2; name = "Medbay APC"; pixel_y = -24},/obj/structure/cable,/obj/machinery/camera{c_tag = "Medbay Psych Office Corridor East"; dir = 1; network = list("SS13")},/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay2) "can" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay2) "cao" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small{dir = 4},/obj/machinery/vending/medical,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "cap" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) @@ -6898,7 +6898,7 @@ "cCH" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk0"; icon_state = "catwalk0"},/area/solar/starboard) "cCI" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk1"; icon_state = "catwalk1"},/area/solar/port) "cCJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor,/area/engine/engineering) -"cCK" = (/obj/machinery/door/airlock/maintenance{name = "Engineering Shuttle"; req_access_txt = "10;24"; req_one_access_txt = null},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) +"cCK" = (/obj/machinery/door/airlock/maintenance{name = "Engineering Shuttle"; req_access_txt = "0"; req_one_access_txt = "10;24"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) "cCL" = (/obj/structure/table,/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) "cCM" = (/obj/machinery/power/apc{cell_type = 2500; dir = 1; name = "Engineering Shuttle Access APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) "cCN" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor,/area/engine/engineering) @@ -7064,7 +7064,7 @@ "cFR" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor,/area/engine/engineering) "cFS" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/engine/engineering) "cFT" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/obj/machinery/door/airlock/external{name = "Engineering Escape Pod"; req_access = null; req_access_txt = "10"},/turf/simulated/floor/plating,/area/engine/engineering) -"cFU" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor,/area/atmos) +"cFU" = (/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor,/area/atmos) "cFV" = (/obj/machinery/portable_atmospherics/pump,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/atmos) "cFW" = (/obj/machinery/atmospherics/binary/pump{dir = 0; name = "Port to Filter"; on = 0},/turf/simulated/floor,/area/atmos) "cFX" = (/obj/machinery/camera{c_tag = "Atmospherics Central"; dir = 8; network = list("SS13")},/turf/simulated/floor,/area/atmos) diff --git a/nano/templates/air_alarm.tmpl b/nano/templates/air_alarm.tmpl index 4f4b425cbb0..5d5437390f5 100644 --- a/nano/templates/air_alarm.tmpl +++ b/nano/templates/air_alarm.tmpl @@ -127,24 +127,24 @@ Used In File(s): /code/game/machinery/alarm.dm {{for data.vents}}
- {{>value.name}}: {{:value.state}} + {{>value.name}}:
Operating:
{{:helper.link(value.power ? 'On':'Off','power',{'id_tag':value.id_tag,'command':'power','val':value.power?0:1},null,(value.power?'linkOn':'red'))}} {{if value.direction=="siphon"}} - {{:helper.link('Siphoning','arrowthickstop-1-s',{'id_tag':value.id_tag,'command':'set_dir','dir':'release'})}} + {{:helper.link('Siphoning','arrowthickstop-1-s',{'id_tag':value.id_tag,'command':'direction','val':'1'})}} {{else}} - {{:helper.link('Blowing','arrowthick-1-n',{'id_tag':value.id_tag,'command':'set_dir','dir':'siphon'})}} + {{:helper.link('Blowing','arrowthick-1-n',{'id_tag':value.id_tag,'command':'direction','val':'0'})}} {{/if}}
Pressure checks:
- {{:helper.link('External','power',{'id_tag':value.id_tag,'command':'checks','val':helper.xor(value.checks,1)},null,(value.checks == 1 ?'linkOn':'red'))}} - {{:helper.link('Internal','power',{'id_tag':value.id_tag,'command':'checks','val':helper.xor(value.checks,2)},null,(value.checks == 2 ?'linkOn':'red'))}} + {{:helper.link('External','power',{'id_tag':value.id_tag,'command':'checks','val':1},null,(value.checks == 1 ?'linkOn':''))}} + {{:helper.link('Internal','power',{'id_tag':value.id_tag,'command':'checks','val':2},null,(value.checks == 2 ?'linkOn':''))}}
@@ -165,7 +165,7 @@ Used In File(s): /code/game/machinery/alarm.dm {{for data.scrubbers}}
- {{>value.name}}: {{:value.state}} + {{>value.name}}:
Operating:
@@ -188,7 +188,7 @@ Used In File(s): /code/game/machinery/alarm.dm
Filtering:
{{:helper.link('CO2',null,{'id_tag':value.id_tag,'command':'co2_scrub','val':(value.filter_co2==0?1:0)},null,(value.filter_co2?'linkOn':''))}} - {{:helper.link('Plasma', null,{'id_tag':value.id_tag,'command':'tox_scrub','val':(value.filter_tox==0?1:0)},null,(value.filter_tox?'linkOn':''))}} + {{:helper.link('Plasma', null,{'id_tag':value.id_tag,'command':'tox_scrub','val':(value.filter_toxins==0?1:0)},null,(value.filter_toxins?'linkOn':''))}} {{:helper.link('N2O',null,{'id_tag':value.id_tag,'command':'n2o_scrub','val':(value.filter_n2o==0?1:0)},null,(value.filter_n2o?'linkOn':''))}} {{:helper.link('O2', null,{'id_tag':value.id_tag,'command':'o2_scrub', 'val':(value.filter_o2 ==0?1:0)},null,(value.filter_o2 ?'linkOn':''))}}
From 8b10abf46de77465e53630fa75e1573d97d5625b Mon Sep 17 00:00:00 2001 From: Markolie Date: Fri, 30 Jan 2015 16:24:13 +0100 Subject: [PATCH 2/5] Syndiborg pinpointer, adds antag preferences and send back to lobby to player panel --- code/datums/mind.dm | 80 +++++++++++++------ code/game/gamemodes/nuclear/pinpointer.dm | 62 ++++++++++++++ code/modules/admin/admin.dm | 1 + code/modules/admin/topic.dm | 24 ++++++ .../mob/living/silicon/robot/robot_modules.dm | 1 + maps/cyberiad.dmm | 11 +-- 6 files changed, 151 insertions(+), 28 deletions(-) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 08fedbd7c32..5b7387e5867 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -177,6 +177,13 @@ datum/mind text += "employee|headrev|REV" else text += "EMPLOYEE|headrev|rev" + + + if(current && current.client && current.client.prefs.be_special & BE_REV) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + sections["revolution"] = text /** CULT ***/ @@ -195,6 +202,13 @@ datum/mind */ else text += "EMPLOYEE|cultist" + + + if(current && current.client && current.client.prefs.be_special & BE_CULTIST) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + sections["cult"] = text /** WIZARD ***/ @@ -209,6 +223,12 @@ datum/mind text += "
Objectives are empty! Randomize!" else text += "yes|NO" + + if(current && current.client && current.client.prefs.be_special & BE_WIZARD) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + sections["wizard"] = text /** CHANGELING ***/ @@ -224,12 +244,15 @@ datum/mind text += "
Transform to initial appearance." else text += "yes|NO" -// var/datum/game_mode/changeling/changeling = ticker.mode -// if (istype(changeling) && changeling.changelingdeath) -// text += "
All the changelings are dead! Restart in [round((changeling.TIME_TO_GET_REVIVED-(world.time-changeling.changelingdeathtime))/10)] seconds." + + if(current && current.client && current.client.prefs.be_special & BE_CHANGELING) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + sections["changeling"] = text - /** NINJA ***/ + /** NINJA ***/ text = "ninja" if (ticker.mode.config_tag=="ninja") text = uppertext(text) @@ -241,26 +264,13 @@ datum/mind //text += "
Objectives are empty! Randomize!" else text += "yes|NO" - sections["ninja"] = text - - /** CHANGELING ***/ - text = "changeling" - if (ticker.mode.config_tag=="changeling" || ticker.mode.config_tag=="traitorchan") - text = uppertext(text) - text = "[text]: " - if (src in ticker.mode.changelings) - text += "YES|no" - if (objectives.len==0) - text += "
Objectives are empty! Randomize!" - if( changeling && changeling.absorbed_dna.len && (current.real_name != changeling.absorbed_dna[1]) ) - text += "
Transform to initial appearance." + + if(current && current.client && current.client.prefs.be_special & BE_NINJA) + text += "|Enabled in Prefs" else - text += "yes|NO" -// var/datum/game_mode/changeling/changeling = ticker.mode -// if (istype(changeling) && changeling.changelingdeath) -// text += "
All the changelings are dead! Restart in [round((changeling.TIME_TO_GET_REVIVED-(world.time-changeling.changelingdeathtime))/10)] seconds." - sections["changeling"] = text - + text += "|Disabled in Prefs" + + sections["ninja"] = text /** VAMPIRE ***/ text = "vampire" @@ -279,6 +289,12 @@ datum/mind text += " YES | no" else text += " yes | NO" + + if(current && current.client && current.client.prefs.be_special & BE_VAMPIRE) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + sections["vampire"] = text @@ -299,6 +315,12 @@ datum/mind text += " Code is [code]. tell the code." else text += "operative|NANOTRASEN" + + if(current && current.client && current.client.prefs.be_special & BE_OPERATIVE) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + sections["nuclear"] = text /** TRAITOR ***/ @@ -315,6 +337,12 @@ datum/mind text += "
Objectives are empty! Randomize!" else text += "traitor|EMPLOYEE" + + if(current && current.client && current.client.prefs.be_special & BE_TRAITOR) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + sections["traitor"] = text /** MONKEY ***/ @@ -335,6 +363,12 @@ datum/mind else text += "healthy|infected|human|OTHER" + + /*if(current && current.client && current.client.prefs.be_special & BE_MONKEY) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs"*/ + sections["monkey"] = text diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index ce93498919c..a0b777d75dd 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -342,5 +342,67 @@ icon_state = "pinonmedium" if(16 to INFINITY) icon_state = "pinonfar" + spawn(5) + .() + +/obj/item/weapon/pinpointer/operative + name = "operative pinpointer" + icon = 'icons/obj/device.dmi' + desc = "A pinpointer that leads to the first Syndicate operative detected." + var/mob/living/carbon/nearest_op = null + +/obj/item/weapon/pinpointer/operative/attack_self() + if(!active) + active = 1 + workop() + usr << "You activate the pinpointer." + else + active = 0 + icon_state = "pinoff" + usr << "You deactivate the pinpointer." + +/obj/item/weapon/pinpointer/operative/proc/scan_for_ops() + if(!nearest_op) + for(var/mob/living/carbon/M in mob_list) + if(M.mind in ticker.mode.syndicates) + nearest_op = M + +/obj/item/weapon/pinpointer/operative/proc/workop() + scan_for_ops() + point_at(nearest_op, 0) + spawn(5) + .() + +/obj/item/weapon/pinpointer/operative/examine(mob/user) + ..() + if(nearest_op != null) + user << "Nearest operative: [nearest_op]." + if(nearest_op == null && active) + user << "No operatives detected within scanning range." + +/obj/item/weapon/pinpointer/operative/proc/point_at(atom/target, spawnself = 1) + if(!active) + return + if(!target) + icon_state = "pinonnull" + return + + var/turf/T = get_turf(target) + var/turf/L = get_turf(src) + + if(T.z != L.z) + icon_state = "pinonnull" + else + dir = get_dir(L, T) + switch(get_dist(L, T)) + if(-1) + icon_state = "pinondirect" + if(1 to 8) + icon_state = "pinonclose" + if(9 to 16) + icon_state = "pinonmedium" + if(16 to INFINITY) + icon_state = "pinonfar" + if(spawnself) spawn(5) .() \ No newline at end of file diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index a9bafc2e71e..f4b35c40ba2 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -68,6 +68,7 @@ var/global/nologevent = 0 if(M.client) body += "| Prison | " + body += "\ Send back to Lobby | " var/muted = M.client.prefs.muted body += {"
Mute: \[IC | diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index ce09a172a00..01f003bfd95 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1141,6 +1141,30 @@ M << "\red You have been sent to the prison station!" log_admin("[key_name(usr)] sent [key_name(M)] to the prison station.") message_admins("\blue [key_name_admin(usr)] sent [key_name_admin(M)] to the prison station.", 1) + + else if(href_list["sendbacktolobby"]) + if(!check_rights(R_ADMIN)) + return + + var/mob/M = locate(href_list["sendbacktolobby"]) + + if(!isobserver(M)) + usr << "You can only send ghost players back to the Lobby." + return + + if(!M.client) + usr << "[M] doesn't seem to have an active client." + return + + if(alert(usr, "Send [key_name(M)] back to Lobby?", "Message", "Yes", "No") != "Yes") + return + + log_admin("[key_name(usr)] has sent [key_name(M)] back to the Lobby.") + message_admins("[key_name(usr)] has sent [key_name(M)] back to the Lobby.") + + var/mob/new_player/NP = new() + NP.ckey = M.ckey + qdel(M) else if(href_list["tdome1"]) if(!check_rights(R_SERVER|R_EVENT)) return diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 3c8710caf1a..294e5859bb8 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -343,6 +343,7 @@ src.modules += new /obj/item/weapon/card/emag(src) src.modules += new /obj/item/weapon/tank/jetpack/carbondioxide(src) src.modules += new /obj/item/weapon/crowbar(src) + src.modules += new /obj/item/weapon/pinpointer/operative(src) src.emag = null return diff --git a/maps/cyberiad.dmm b/maps/cyberiad.dmm index b752f8aeb97..53bf50e7e66 100644 --- a/maps/cyberiad.dmm +++ b/maps/cyberiad.dmm @@ -236,7 +236,7 @@ "aeB" = (/obj/structure/reagent_dispensers/fueltank,/obj/machinery/atmospherics/unary/vent_pump,/obj/effect/decal/warning_stripes/yellow/hollow,/obj/effect/decal/warning_stripes/northeastcorner,/turf/simulated/floor,/area/security/podbay) "aeC" = (/obj/effect/decal/warning_stripes/north,/turf/simulated/floor,/area/security/podbay) "aeD" = (/turf/simulated/floor{tag = "icon-stage_stairs"; icon_state = "stage_stairs"},/area/security/podbay) -"aeE" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/table,/obj/item/device/modkit/unathi,/obj/item/device/modkit/tajaran,/obj/effect/decal/warning_stripes/north,/turf/simulated/floor,/area/security/podbay) +"aeE" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/effect/decal/warning_stripes/north,/turf/simulated/floor,/area/security/podbay) "aeF" = (/obj/effect/decal/warning_stripes/northwest,/turf/simulated/floor,/area/security/range) "aeG" = (/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/range) "aeH" = (/obj/effect/decal/warning_stripes/northeast,/turf/simulated/floor,/area/security/range) @@ -280,7 +280,7 @@ "aft" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/security/securearmoury) "afu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/door/window/brigdoor{dir = 2; name = "Secure Armory"; req_access_txt = "3"},/obj/machinery/door/window/brigdoor{dir = 1; name = "Secure Armory"; req_access_txt = "3"},/obj/machinery/door/firedoor,/turf/simulated/floor{icon_state = "dark"},/area/security/securearmoury) "afv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/securearmoury) -"afw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{icon_state = "red"; dir = 9},/area/security/securehallway) +"afw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/vending/eva,/turf/simulated/floor{icon_state = "red"; dir = 9},/area/security/securehallway) "afx" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/securehallway) "afy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/securehallway) "afz" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/securehallway) @@ -595,7 +595,7 @@ "alw" = (/obj/structure/reagent_dispensers/peppertank{pixel_y = -30},/obj/machinery/light,/turf/simulated/floor{icon_state = "red"},/area/security/main) "alx" = (/obj/structure/closet/secure_closet/security,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{icon_state = "red"; dir = 6},/area/security/main) "aly" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/main) -"alz" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/structure/table/reinforced,/obj/item/stack/medical/bruise_pack{pixel_x = 10; pixel_y = 2},/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/ointment{pixel_y = 4},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{name = "Security Office APC"; pixel_y = -24},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/main) +"alz" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/structure/table/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{name = "Security Office APC"; pixel_y = -24},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/item/stack/medical/advanced/bruise_pack,/turf/simulated/floor{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/main) "alA" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = 0; pixel_y = -32; req_access_txt = "0"},/turf/simulated/floor,/area/security/main) "alB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/security/main) "alC" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/landmark/start{name = "Security Officer"},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/security/main) @@ -6704,7 +6704,7 @@ "cyV" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 1; level = 2},/turf/simulated/floor,/area/atmos) "cyW" = (/obj/machinery/atmospherics/pipe/simple/visible/green{level = 2},/obj/machinery/atmospherics/binary/pump{dir = 8; name = "N2O to Pure"; on = 0},/turf/simulated/floor,/area/atmos) "cyX" = (/obj/machinery/atmospherics/valve/digital{color = ""; dir = 4; name = "N2O Outlet Valve"},/turf/simulated/floor{icon_state = "escape"; dir = 5},/area/atmos) -"cyY" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; icon_state = "in"; id_tag = "n2o_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/obj/machinery/bot/secbot/buzzsky,/turf/simulated/floor/engine,/area/atmos) +"cyY" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; icon_state = "in"; id_tag = "n2o_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine,/area/atmos) "cyZ" = (/turf/simulated/floor/engine,/area/atmos) "cza" = (/obj/machinery/light,/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor{dir = 10; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/medical/virology/lab) "czb" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/light,/obj/machinery/camera{c_tag = "Virology Decontamination West"; dir = 1; network = list("SS13")},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/obj/structure/sign/biohazard{pixel_x = 0; pixel_y = -32},/turf/simulated/floor{dir = 6; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/medical/virology/lab) @@ -7561,6 +7561,7 @@ "cPu" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor,/area/research_outpost/gearstore) "cPv" = (/obj/structure/reagent_dispensers/fueltank,/obj/machinery/atmospherics/pipe/simple/visible{dir = 5},/turf/simulated/floor/plating,/area/mine/laborcamp/security) "cPw" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/storage/box/autoinjectors,/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/firstaid/adv,/obj/item/bodybag/cryobag,/obj/item/weapon/reagent_containers/hypospray/CMO,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops) +"cPx" = (/obj/machinery/bot/secbot/buzzsky,/turf/simulated/floor,/area/derelict/bridge) "cPy" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/effect/decal/warning_stripes/north,/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/aisat/maintenance) "cPz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/effect/decal/warning_stripes/northwestcorner,/turf/simulated/floor,/area/aisat/maintenance) "cPA" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor,/area/aisat/maintenance) @@ -13906,7 +13907,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabesuesuesuesueszesuesAesuesBesCesDesuesuesuesuesuesuaabaabaaaaaaaaaaaaaaaespaaaaaaaaaaaiaaiaaierRerUerUerYerUerUesEesFesGesHesIesJesKesHesLesMcLOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaesuesuesuesNesOesPesQesNesCesResResSesResNesPesNesuesuesuaabaaaaaaaaaaaaaaaaaaaaaespaaaaaaaaaaaaerResqerUesrerUerUesEesTesTesUesTesTesTesTesVesWcLOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaesuesuesXesYesZetaesZesNetbesBetcesResSetdesNesNesNeteetfesuaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaerResveswetgesvesvethesTesTesUesTesTesTesUesTetietjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaesuesuetketketketketlesRetmesuesSetnesuesRetoesPetoetoesResuaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaerRerUesgetperUerUetqesTesTesTesTetresTesTetsettcLOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaesuesuetketketketketlesRetmesuesSetnesuesRetoesPetoetoesResuaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaerRerUesgetperUerUetqesTesTcPxesTetresTesTetsettcLOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaesuesuesRetoetoetoetuesOesNetvetoesRetoetoesNesOesOetoetoesuaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaberRerUerUetwetxetyetzetAetAetBetCesUesTesTesTeticLOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabesuesuetoesOesPesNetDesNesPesNesResRetoesNesNesNesNesPesNesuaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaberRerUerUetperUerUetEesHesHesTetFetGesTetGetHesWaacetIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabesuesuesNesPesNetJetKetLetMesRetNesResRetOetPetQetoesOesPesuaaiaabaaaaaaaaaaaaaaaespaaaaaaaabaabaaberRerRerRerYerRerUesEetRetSetTetUetVesFesFesHesWetjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From 5c188559679455d430616cd529ebe2a1f3234bf5 Mon Sep 17 00:00:00 2001 From: Markolie Date: Fri, 30 Jan 2015 16:47:09 +0100 Subject: [PATCH 3/5] Additional sight options for ghosts, makes AI eye visible to ghosts --- code/datums/mind.dm | 16 ++++----- code/game/jobs/job/medical.dm | 2 ++ code/modules/mob/dead/observer/observer.dm | 34 +++++++++++++----- .../mob/living/silicon/ai/freelook/eye.dm | 8 +++-- code/setup.dm | 3 ++ icons/mob/AI.dmi | Bin 250712 -> 251331 bytes 6 files changed, 41 insertions(+), 22 deletions(-) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 5b7387e5867..146b7b318ff 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -178,7 +178,6 @@ datum/mind else text += "EMPLOYEE|headrev|rev" - if(current && current.client && current.client.prefs.be_special & BE_REV) text += "|Enabled in Prefs" else @@ -283,17 +282,14 @@ datum/mind text += "
Objectives are empty! Randomize!" else text += "yes|NO" + + if(src in ticker.mode.enthralled) + text += "YES|no" + else + text += "yes|NO" + /** Enthralled ***/ text += "
enthralled" - if(src in ticker.mode.enthralled) - text += " YES | no" - else - text += " yes | NO" - - if(current && current.client && current.client.prefs.be_special & BE_VAMPIRE) - text += "|Enabled in Prefs" - else - text += "|Disabled in Prefs" sections["vampire"] = text diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 876dca62e30..4a6a299f318 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -216,6 +216,8 @@ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/psych(H), slot_w_uniform) if("Psychologist") H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/psych/turtleneck(H), slot_w_uniform) + if("Therapist") + H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform) else H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index af5790222ed..9893665e225 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -23,10 +23,11 @@ universal_speak = 1 var/atom/movable/following = null var/medHUD = 0 + var/secHUD = 0 /mob/dead/observer/New(var/mob/body=null, var/flags=1) sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF - see_invisible = SEE_INVISIBLE_OBSERVER + see_invisible = SEE_INVISIBLE_OBSERVER_AI_EYE see_in_dark = 100 verbs += /mob/dead/observer/proc/dead_tele @@ -103,6 +104,8 @@ Works together with spawning an observer, noted above. assess_targets(target_list, src) if(medHUD) process_medHUD(src) + if(secHUD) + process_secHUD(src) /mob/dead/proc/process_medHUD(var/mob/M) @@ -110,6 +113,13 @@ Works together with spawning an observer, noted above. for(var/mob/living/carbon/human/patient in oview(M, 14)) C.images += patient.hud_list[HEALTH_HUD] C.images += patient.hud_list[STATUS_HUD_OOC] + +/mob/dead/proc/process_secHUD(var/mob/M) + var/client/C = M.client + for(var/mob/living/carbon/human/target in oview(M, 14)) + C.images += target.hud_list[IMPTRACK_HUD] + C.images += target.hud_list[IMPLOYAL_HUD] + C.images += target.hud_list[IMPCHEM_HUD] /mob/dead/proc/assess_targets(list/target_list, mob/dead/observer/U) var/client/C = U.client @@ -257,8 +267,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/dead/observer/verb/toggle_medHUD() set category = "Ghost" - set name = "Toggle MedicHUD" - set desc = "Toggles Medical HUD allowing you to see how everyone is doing" + set name = "Toggle HUD" + set desc = "Toggles the security and medical HUD." if(!client) return if(medHUD) @@ -450,14 +460,20 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp src << "\blue Heat Capacity: [round(environment.heat_capacity(),0.1)]" -/mob/dead/observer/verb/toggle_darkness() - set name = "Toggle Darkness" +/mob/dead/observer/verb/toggle_sight() + set name = "Toggle Sight" set category = "Ghost" - if (see_invisible == SEE_INVISIBLE_OBSERVER_NOLIGHTING) - see_invisible = SEE_INVISIBLE_OBSERVER - else - see_invisible = SEE_INVISIBLE_OBSERVER_NOLIGHTING + switch(see_invisible) + if(SEE_INVISIBLE_OBSERVER_AI_EYE) + see_invisible = SEE_INVISIBLE_OBSERVER_NOOBSERVERS + usr << "You no longer see other observers or the AI eye." + if(SEE_INVISIBLE_OBSERVER_NOOBSERVERS) + see_invisible = SEE_INVISIBLE_OBSERVER_NOLIGHTING + usr << "You no longer see darkness." + else + see_invisible = SEE_INVISIBLE_OBSERVER_AI_EYE + usr << "You again see everything." /mob/dead/observer/verb/view_manfiest() set name = "View Crew Manifest" diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index 3d833c8de21..c2c23b02188 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -1,17 +1,19 @@ // AI EYE // -// An invisible (no icon) mob that the AI controls to look around the station with. +// A mob that the AI controls to look around the station with. // It streams chunks as it moves around, which will show it what the AI can and cannot see. /mob/aiEye name = "Inactive AI Eye" - icon = 'icons/obj/status_display.dmi' // For AI friend secret shh :o + icon = 'icons/mob/AI.dmi' + icon_state = "eye" + alpha = 127 var/mob/living/silicon/ai/ai = null density = 0 status_flags = GODMODE // You can't damage it. mouse_opacity = 0 see_in_dark = 7 - invisibility = INVISIBILITY_MAXIMUM + invisibility = INVISIBILITY_AI_EYE /mob/aiEye/New() ..() diff --git a/code/setup.dm b/code/setup.dm index 8584fbf24b4..ce7ec7b3d02 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -596,8 +596,11 @@ var/list/liftable_structures = list(\ #define INVISIBILITY_SPIRIT 50 #define SEE_SPIRITS 50 +#define SEE_INVISIBLE_OBSERVER_NOOBSERVERS 59 #define INVISIBILITY_OBSERVER 60 #define SEE_INVISIBLE_OBSERVER 60 +#define INVISIBILITY_AI_EYE 61 +#define SEE_INVISIBLE_OBSERVER_AI_EYE 61 #define INVISIBILITY_MAXIMUM 100 diff --git a/icons/mob/AI.dmi b/icons/mob/AI.dmi index b8cb5064aae38f5774124ed99d776e5c98dce626..c13a97fa50d117764604327b125001999a7dd107 100644 GIT binary patch delta 19145 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 WKN*ZE<(jX(ywIssc#xKK3 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 From 895063b095bc3b8bf18b0f0ef0be62f062022ffb Mon Sep 17 00:00:00 2001 From: Markolie Date: Fri, 30 Jan 2015 16:49:50 +0100 Subject: [PATCH 4/5] Pump construction fix --- code/game/machinery/pipe/construction.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index d52a08a9960..0a29da013ab 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -709,7 +709,7 @@ Buildable meters V.node2.build_network() if(PIPE_PUMP) //gas pump - var/obj/machinery/atmospherics/binary/volume_pump/P = new(src.loc) + var/obj/machinery/atmospherics/binary/pump/P = new(src.loc) P.dir = dir P.initialize_directions = pipe_dir if (pipename) From 6a2c1e59fa41ab88c2969a2492a941ee06bbe4fd Mon Sep 17 00:00:00 2001 From: Markolie Date: Fri, 30 Jan 2015 16:53:36 +0100 Subject: [PATCH 5/5] HUD wording fix --- code/modules/mob/dead/observer/observer.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 9893665e225..4be7623c8ff 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -267,8 +267,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/dead/observer/verb/toggle_medHUD() set category = "Ghost" - set name = "Toggle HUD" - set desc = "Toggles the security and medical HUD." + set name = "Toggle MedicHUD" + set desc = "Toggles the medical HUD." if(!client) return if(medHUD)