Merge pull request #15381 from neersighted/runtime_meet_proc

Fix a number of runtimes
This commit is contained in:
duncathan salt
2016-02-10 23:50:38 -06:00
15 changed files with 177 additions and 204 deletions
+2 -1
View File
@@ -343,5 +343,6 @@
C.swap_hand()
else
var/turf/T = screen_loc2turf(modifiers["screen-loc"], get_turf(usr))
T.Click(location, control, params)
if(T)
T.Click(location, control, params)
return 1
+4 -2
View File
@@ -45,7 +45,8 @@
A.mode = 1 // AALARM_MODE_SCRUB
A.apply_mode()
if(WIRE_ALARM) // Clear alarms.
if(A.alarm_area.atmosalert(0, holder))
var/area/AA = get_area_master(A)
if(AA.atmosalert(0, holder))
A.post_alert(0)
A.update_icon()
@@ -66,6 +67,7 @@
A.mode = 3 // AALARM_MODE_PANIC
A.apply_mode()
if(WIRE_ALARM) // Post alarm.
if(A.alarm_area.atmosalert(2, holder))
var/area/AA = get_area_master(A)
if(AA.atmosalert(2, holder))
A.post_alert(2)
A.update_icon()
+2 -2
View File
@@ -172,8 +172,8 @@
/mob/proc/set_species(datum/species/mrace, icon_update = 1)
return
/mob/living/carbon/set_species(datum/species/mrace, icon_update = 1)
if(has_dna())
/mob/living/carbon/set_species(datum/species/mrace = null, icon_update = 1)
if(mrace && has_dna())
if(dna.species.exotic_blood)
var/datum/reagent/EB = dna.species.exotic_blood
reagents.del_reagent(initial(EB.id))
+1 -1
View File
@@ -94,7 +94,7 @@
/datum/objective_item/steal/plasma/check_special_completion(obj/item/weapon/tank/T)
var/target_amount = text2num(name)
var/found_amount = 0
found_amount += T.air_contents.gases["plasma"][MOLES]
found_amount += T.air_contents.gases["plasma"] ? T.air_contents.gases["plasma"][MOLES] : 0
return found_amount>=target_amount
-5
View File
@@ -47,11 +47,6 @@
for(var/i in 1 to I)
available_chems |= possible_chems[i]
/obj/machinery/sleeper/Destroy()
var/turf/T = loc
T.contents += contents
return ..()
/obj/machinery/sleeper/update_icon()
if(state_open)
icon_state = "sleeper-open"
@@ -95,18 +95,17 @@
/obj/item/weapon/storage/proc/show_to(mob/user)
if(!user.client)
return
if(user.s_active != src && (user.stat == CONSCIOUS))
for(var/obj/item/I in src)
if(I.on_found(user))
return
if(user.s_active)
user.s_active.hide_from(user)
user.client.screen -= boxes
user.client.screen -= closer
user.client.screen -= contents
user.client.screen += boxes
user.client.screen += closer
user.client.screen += contents
user.client.screen |= boxes
user.client.screen |= closer
user.client.screen |= contents
user.s_active = src
is_seeing |= user
@@ -115,7 +114,6 @@
close_all()
return ..()
/obj/item/weapon/storage/proc/hide_from(mob/user)
if(!user.client)
return
+79 -86
View File
@@ -45,7 +45,7 @@
#define AALARM_REPORT_TIMEOUT 100
/obj/machinery/airalarm
name = "alarm"
name = "air alarm"
desc = "A machine that monitors atmosphere levels. Goes off if the area is dangerous."
icon = 'icons/obj/monitors.dmi'
icon_state = "alarm0"
@@ -55,22 +55,18 @@
active_power_usage = 8
power_channel = ENVIRON
req_access = list(access_atmospherics)
var/frequency = 1439
//var/skipprocess = 0 //Experimenting
var/alarm_frequency = 1437
var/datum/radio_frequency/radio_connection
var/danger_level = 0
var/mode = AALARM_MODE_SCRUBBING
var/locked = 1
var/aidisabled = 0
var/shorted = 0
var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone
var/mode = AALARM_MODE_SCRUBBING
var/area_uid
var/area/alarm_area
var/danger_level = 0
var/frequency = 1439
var/alarm_frequency = 1437
var/datum/radio_frequency/radio_connection
var/list/TLV = list( // Breathable air.
"pressure" = new/datum/tlv(ONE_ATMOSPHERE * 0.80, ONE_ATMOSPHERE* 0.90, ONE_ATMOSPHERE * 1.10, ONE_ATMOSPHERE * 1.20), // kPa
@@ -106,7 +102,6 @@
//all air alarms in area are connected via magic
/area
var/obj/machinery/airalarm/master_air_alarm
var/list/air_vent_names = list()
var/list/air_scrub_names = list()
var/list/air_vent_info = list()
@@ -122,18 +117,15 @@
buildstage = 0
panel_open = 1
pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24)
pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0
pixel_y = (dir & 3)? (dir == 1 ? -24 : 24) : 0
alarm_area = get_area(loc)
if (alarm_area.master)
alarm_area = alarm_area.master
area_uid = alarm_area.uid
if (name == "alarm")
name = "[alarm_area.name] Air Alarm"
var/area/A = get_area_master(src)
if(name == initial(name))
name = "[A.name] Air Alarm"
update_icon()
if(ticker && ticker.current_state == 3)//if the game is running
src.initialize()
initialize()
/obj/machinery/airalarm/Destroy()
if(SSradio)
@@ -144,19 +136,6 @@
/obj/machinery/airalarm/initialize()
set_frequency(frequency)
if(!master_is_operating())
elect_master()
/obj/machinery/airalarm/proc/master_is_operating()
return alarm_area.master_air_alarm && !(alarm_area.master_air_alarm.stat & (NOPOWER|BROKEN))
/obj/machinery/airalarm/proc/elect_master()
for(var/area/A in alarm_area.related)
for(var/obj/machinery/airalarm/AA in A)
if(!(AA.stat & (NOPOWER|BROKEN)))
alarm_area.master_air_alarm = AA
return 1
return 0
/obj/machinery/airalarm/ui_status(mob/user)
if(user.has_unlimited_silicon_privilege && aidisabled)
@@ -177,11 +156,13 @@
"locked" = locked,
"siliconUser" = user.has_unlimited_silicon_privilege,
"emagged" = emagged,
"atmos_alarm" = alarm_area.atmosalm,
"fire_alarm" = alarm_area.fire,
"danger_level" = danger_level,
)
var/area/A = get_area(src)
data["atmos_alarm"] = A.atmosalm
data["fire_alarm"] = A.fire
var/turf/T = get_turf(src)
var/datum/gas_mixture/environment = T.return_air()
var/datum/tlv/cur_tlv
@@ -218,9 +199,9 @@
if(!locked || user.has_unlimited_silicon_privilege)
data["vents"] = list()
for(var/id_tag in alarm_area.air_vent_names)
var/long_name = alarm_area.air_vent_names[id_tag]
var/list/info = alarm_area.air_vent_info[id_tag]
for(var/id_tag in A.air_vent_names)
var/long_name = A.air_vent_names[id_tag]
var/list/info = A.air_vent_info[id_tag]
if(!info || info["frequency"] != frequency)
continue
data["vents"] += list(list(
@@ -235,9 +216,9 @@
"extdefault"= (info["external"] == ONE_ATMOSPHERE)
))
data["scrubbers"] = list()
for(var/id_tag in alarm_area.air_scrub_names)
var/long_name = alarm_area.air_scrub_names[id_tag]
var/list/info = alarm_area.air_scrub_info[id_tag]
for(var/id_tag in A.air_scrub_names)
var/long_name = A.air_scrub_names[id_tag]
var/list/info = A.air_scrub_info[id_tag]
if(!info || info["frequency"] != frequency)
continue
data["scrubbers"] += list(list(
@@ -314,7 +295,8 @@
send_signal(device_id, list("checks" = text2num(params["val"])^2))
. = TRUE
if("set_external_pressure")
var/target = input("New target pressure:", name, alarm_area.air_vent_info[device_id]["external"]) as num|null
var/area/A = get_area_master(src)
var/target = input("New target pressure:", name, A.air_vent_info[device_id]["external"]) as num|null
if(!isnull(target) && !..())
send_signal(device_id, list("set_external_pressure" = target))
. = TRUE
@@ -339,11 +321,13 @@
apply_mode()
. = TRUE
if("alarm")
if(alarm_area.atmosalert(2, src))
var/area/A = get_area_master(src)
if(A.atmosalert(2, src))
post_alert(2)
. = TRUE
if("reset")
if(alarm_area.atmosalert(0, src))
var/area/A = get_area_master(src)
if(A.atmosalert(0, src))
post_alert(0)
. = TRUE
update_icon()
@@ -374,16 +358,17 @@
return 0
/obj/machinery/airalarm/proc/refresh_all()
for(var/id_tag in alarm_area.air_vent_names)
var/list/I = alarm_area.air_vent_info[id_tag]
if (I && I["timestamp"]+AALARM_REPORT_TIMEOUT/2 > world.time)
var/area/A = get_area_master(src)
for(var/id_tag in A.air_vent_names)
var/list/I = A.air_vent_info[id_tag]
if(I && I["timestamp"] + AALARM_REPORT_TIMEOUT / 2 > world.time)
continue
send_signal(id_tag, list("status") )
for(var/id_tag in alarm_area.air_scrub_names)
var/list/I = alarm_area.air_scrub_info[id_tag]
if (I && I["timestamp"]+AALARM_REPORT_TIMEOUT/2 > world.time)
send_signal(id_tag, list("status"))
for(var/id_tag in A.air_scrub_names)
var/list/I = A.air_scrub_info[id_tag]
if(I && I["timestamp"] + AALARM_REPORT_TIMEOUT / 2 > world.time)
continue
send_signal(id_tag, list("status") )
send_signal(id_tag, list("status"))
/obj/machinery/airalarm/proc/set_frequency(new_frequency)
SSradio.remove_object(src, frequency)
@@ -408,9 +393,10 @@
return 1
/obj/machinery/airalarm/proc/apply_mode()
var/area/A = get_area_master(src)
switch(mode)
if(AALARM_MODE_SCRUBBING)
for(var/device_id in alarm_area.air_scrub_names)
for(var/device_id in A.air_scrub_names)
send_signal(device_id, list(
"power" = 1,
"co2_scrub" = 1,
@@ -419,14 +405,14 @@
"scrubbing" = 1,
"widenet" = 0,
))
for(var/device_id in alarm_area.air_vent_names)
for(var/device_id in A.air_vent_names)
send_signal(device_id, list(
"power" = 1,
"checks" = 1,
"set_external_pressure" = ONE_ATMOSPHERE
))
if(AALARM_MODE_CONTAMINATED)
for(var/device_id in alarm_area.air_scrub_names)
for(var/device_id in A.air_scrub_names)
send_signal(device_id, list(
"power" = 1,
"co2_scrub" = 1,
@@ -435,27 +421,27 @@
"scrubbing" = 1,
"widenet" = 1,
))
for(var/device_id in alarm_area.air_vent_names)
for(var/device_id in A.air_vent_names)
send_signal(device_id, list(
"power" = 1,
"checks" = 1,
"set_external_pressure" = ONE_ATMOSPHERE
))
if(AALARM_MODE_VENTING)
for(var/device_id in alarm_area.air_scrub_names)
for(var/device_id in A.air_scrub_names)
send_signal(device_id, list(
"power" = 1,
"widenet" = 0,
"scrubbing" = 0
))
for(var/device_id in alarm_area.air_vent_names)
for(var/device_id in A.air_vent_names)
send_signal(device_id, list(
"power" = 1,
"checks" = 1,
"set_external_pressure" = ONE_ATMOSPHERE*2
))
if(AALARM_MODE_REFILL)
for(var/device_id in alarm_area.air_scrub_names)
for(var/device_id in A.air_scrub_names)
send_signal(device_id, list(
"power" = 1,
"co2_scrub" = 1,
@@ -464,7 +450,7 @@
"scrubbing" = 1,
"widenet" = 0,
))
for(var/device_id in alarm_area.air_vent_names)
for(var/device_id in A.air_vent_names)
send_signal(device_id, list(
"power" = 1,
"checks" = 1,
@@ -472,43 +458,43 @@
))
if(AALARM_MODE_PANIC,
AALARM_MODE_REPLACEMENT)
for(var/device_id in alarm_area.air_scrub_names)
for(var/device_id in A.air_scrub_names)
send_signal(device_id, list(
"power" = 1,
"widenet" = 1,
"scrubbing" = 0
))
for(var/device_id in alarm_area.air_vent_names)
for(var/device_id in A.air_vent_names)
send_signal(device_id, list(
"power" = 0
))
if(AALARM_MODE_SIPHON)
for(var/device_id in alarm_area.air_scrub_names)
for(var/device_id in A.air_scrub_names)
send_signal(device_id, list(
"power" = 1,
"widenet" = 0,
"scrubbing" = 0
))
for(var/device_id in alarm_area.air_vent_names)
for(var/device_id in A.air_vent_names)
send_signal(device_id, list(
"power" = 0
))
if(AALARM_MODE_OFF)
for(var/device_id in alarm_area.air_scrub_names)
for(var/device_id in A.air_scrub_names)
send_signal(device_id, list(
"power" = 0
))
for(var/device_id in alarm_area.air_vent_names)
for(var/device_id in A.air_vent_names)
send_signal(device_id, list(
"power" = 0
))
if(AALARM_MODE_FLOOD)
for(var/device_id in alarm_area.air_scrub_names)
for(var/device_id in A.air_scrub_names)
send_signal(device_id, list(
"power" = 0
))
for(var/device_id in alarm_area.air_vent_names)
for(var/device_id in A.air_vent_names)
send_signal(device_id, list(
"power" = 1,
"checks" = 2,
@@ -529,21 +515,23 @@
if((stat & (NOPOWER|BROKEN)) || shorted)
icon_state = "alarmp"
return
switch(max(danger_level, alarm_area.atmosalm))
if (0)
src.icon_state = "alarm0"
if (1)
src.icon_state = "alarm2" //yes, alarm2 is yellow alarm
if (2)
src.icon_state = "alarm1"
var/area/A = get_area_master(src)
switch(max(danger_level, A.atmosalm))
if(0)
icon_state = "alarm0"
if(1)
icon_state = "alarm2" //yes, alarm2 is yellow alarm
if(2)
icon_state = "alarm1"
/obj/machinery/airalarm/process()
if((stat & (NOPOWER|BROKEN)) || shorted)
return
var/turf/simulated/location = src.loc
if(!istype(location))
return 0
var/turf/simulated/location = get_turf(src)
if(!location)
return
var/datum/tlv/cur_tlv
@@ -570,23 +558,25 @@
var/old_danger_level = danger_level
danger_level = max(pressure_dangerlevel, temperature_dangerlevel, gas_dangerlevel)
if (old_danger_level != danger_level)
if(old_danger_level != danger_level)
apply_danger_level()
if (mode == AALARM_MODE_REPLACEMENT && environment_pressure < ONE_ATMOSPHERE * 0.05)
if(mode == AALARM_MODE_REPLACEMENT && environment_pressure < ONE_ATMOSPHERE * 0.05)
mode = AALARM_MODE_SCRUBBING
apply_mode()
return
/obj/machinery/airalarm/proc/post_alert(alert_level)
var/datum/radio_frequency/frequency = SSradio.return_frequency(alarm_frequency)
if(!frequency) return
if(!frequency)
return
var/area/A = get_area_master(src)
var/datum/signal/alert_signal = new
alert_signal.source = src
alert_signal.transmission_method = 1
alert_signal.data["zone"] = alarm_area.name
alert_signal.data["zone"] = A.name
alert_signal.data["type"] = "Atmospheric"
if(alert_level==2)
@@ -599,13 +589,16 @@
frequency.post_signal(src, alert_signal,null,-1)
/obj/machinery/airalarm/proc/apply_danger_level()
var/area/A = get_area_master(src)
var/new_area_danger_level = 0
for (var/area/A in alarm_area.related)
for (var/obj/machinery/airalarm/AA in A)
for(var/area/R in A.related)
for(var/obj/machinery/airalarm/AA in R)
if (!(AA.stat & (NOPOWER|BROKEN)) && !AA.shorted)
new_area_danger_level = max(new_area_danger_level,AA.danger_level)
if (alarm_area.atmosalert(new_area_danger_level,src)) //if area was in normal state or if area was in alert state
if(A.atmosalert(new_area_danger_level,src)) //if area was in normal state or if area was in alert state
post_alert(new_area_danger_level)
update_icon()
/obj/machinery/airalarm/attackby(obj/item/W, mob/user, params)
@@ -6,35 +6,26 @@
#define RELEASING 1
/obj/machinery/atmospherics/components/unary/vent_pump
icon_state = "vent_map"
name = "air vent"
desc = "Has a valve and pump attached to it"
icon_state = "vent_map"
use_power = 1
can_unwrench = 1
welded = 0
var/area/initial_loc
level = 1
var/area_uid
var/id_tag = null
var/on = 0
var/pump_direction = RELEASING
var/pressure_checks = EXT_BOUND
var/external_pressure_bound = ONE_ATMOSPHERE
var/internal_pressure_bound = 0
var/pressure_checks = EXT_BOUND
//EXT_BOUND: Do not pass external_pressure_bound
//INT_BOUND: Do not pass internal_pressure_bound
//NO_BOUND: Do not pass either
var/frequency = 1439
var/datum/radio_frequency/radio_connection
var/radio_filter_out
var/radio_filter_in
@@ -51,22 +42,19 @@
/obj/machinery/atmospherics/components/unary/vent_pump/New()
..()
initial_loc = get_area(loc)
if (initial_loc.master)
initial_loc = initial_loc.master
area_uid = initial_loc.uid
if (!id_tag)
if(!id_tag)
assign_uid()
id_tag = num2text(uid)
/obj/machinery/atmospherics/components/unary/vent_pump/Destroy()
var/area/A = get_area_master(src)
A.air_vent_names -= id_tag
A.air_vent_info -= id_tag
if(SSradio)
SSradio.remove_object(src,frequency)
radio_connection = null
if(initial_loc)
initial_loc.air_vent_info -= id_tag
initial_loc.air_vent_names -= id_tag
initial_loc = null
return ..()
/obj/machinery/atmospherics/components/unary/vent_pump/high_volume
@@ -164,24 +152,23 @@
signal.source = src
signal.data = list(
"area" = src.area_uid,
"tag" = src.id_tag,
"tag" = id_tag,
"frequency" = frequency,
"device" = "VP",
"timestamp" = world.time,
"power" = on,
"direction" = pump_direction?("release"):("siphon"),
"direction" = pump_direction ? "release" : "siphon",
"checks" = pressure_checks,
"internal" = internal_pressure_bound,
"external" = external_pressure_bound,
"timestamp" = world.time,
"sigtype" = "status"
)
if(!initial_loc.air_vent_names[id_tag])
var/new_name = "\improper [initial_loc.name] vent pump #[initial_loc.air_vent_names.len+1]"
initial_loc.air_vent_names[id_tag] = new_name
src.name = new_name
initial_loc.air_vent_info[id_tag] = signal.data
var/area/A = get_area_master(src)
if(!A.air_vent_names[id_tag])
name = "\improper [A.name] vent pump #[A.air_vent_names.len + 1]"
A.air_vent_names[id_tag] = name
A.air_vent_info[id_tag] = signal.data
radio_connection.post_signal(src, signal, radio_filter_out)
@@ -285,10 +272,7 @@
user << "It seems welded shut."
/obj/machinery/atmospherics/components/unary/vent_pump/power_change()
if(powered(power_channel))
stat &= ~NOPOWER
else
stat |= NOPOWER
..()
update_icon_nopipes()
/obj/machinery/atmospherics/components/unary/vent_pump/can_crawl_through()
@@ -2,67 +2,56 @@
#define SCRUBBING 1
/obj/machinery/atmospherics/components/unary/vent_scrubber
icon_state = "scrub_map"
name = "air scrubber"
desc = "Has a valve and pump attached to it"
icon_state = "scrub_map"
use_power = 1
idle_power_usage = 10
active_power_usage = 60
level = 1
can_unwrench = 1
welded = 0
var/area/initial_loc
var/id_tag = null
var/frequency = 1439
var/datum/radio_frequency/radio_connection
var/list/turf/simulated/adjacent_turfs = list()
var/on = 0
var/scrubbing = SCRUBBING //0 = siphoning, 1 = scrubbing
var/scrub_CO2 = 1
var/scrub_Toxins = 0
var/scrub_N2O = 0
var/volume_rate = 200
var/widenet = 0 //is this scrubber acting on the 3x3 area around it.
var/list/turf/simulated/adjacent_turfs = list()
var/area_uid
var/frequency = 1439
var/datum/radio_frequency/radio_connection
var/radio_filter_out
var/radio_filter_in
/obj/machinery/atmospherics/components/unary/vent_scrubber/New()
..()
initial_loc = get_area(loc)
if (initial_loc.master)
initial_loc = initial_loc.master
area_uid = initial_loc.uid
if (!id_tag)
if(!id_tag)
assign_uid()
id_tag = num2text(uid)
/obj/machinery/atmospherics/components/unary/vent_scrubber/Destroy()
var/area/A = get_area_master(src)
A.air_scrub_names -= id_tag
A.air_scrub_info -= id_tag
if(SSradio)
SSradio.remove_object(src,frequency)
radio_connection = null
if(initial_loc)
initial_loc.air_scrub_info -= id_tag
initial_loc.air_scrub_names -= id_tag
initial_loc = null
for(var/I in adjacent_turfs)
I = null
return ..()
/obj/machinery/atmospherics/components/unary/vent_scrubber/auto_use_power()
if(!powered(power_channel))
return 0
if (!on || welded)
if(!on || welded)
return 0
if(stat & (NOPOWER|BROKEN))
return 0
@@ -80,7 +69,7 @@
amount = active_power_usage
if (widenet)
amount += amount*(adjacent_turfs.len*(adjacent_turfs.len/2))
amount += amount * (adjacent_turfs.len * (adjacent_turfs.len / 2))
use_power(amount, power_channel)
return 1
@@ -115,7 +104,6 @@
signal.transmission_method = 1 //radio signal
signal.source = src
signal.data = list(
"area" = area_uid,
"tag" = id_tag,
"frequency" = frequency,
"device" = "VS",
@@ -128,11 +116,13 @@
"filter_n2o" = scrub_N2O,
"sigtype" = "status"
)
if(!initial_loc.air_scrub_names[id_tag])
var/new_name = "\improper [initial_loc.name] air scrubber #[initial_loc.air_scrub_names.len+1]"
initial_loc.air_scrub_names[id_tag] = new_name
src.name = new_name
initial_loc.air_scrub_info[id_tag] = signal.data
var/area/A = get_area_master(src)
if(!A.air_scrub_names[id_tag])
name = "\improper [A.name] air scrubber #[A.air_scrub_names.len + 1]"
A.air_scrub_names[id_tag] = name
A.air_scrub_info[id_tag] = signal.data
radio_connection.post_signal(src, signal, radio_filter_out)
return 1
@@ -140,7 +130,7 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/atmosinit()
radio_filter_in = frequency==initial(frequency)?(RADIO_FROM_AIRALARM):null
radio_filter_out = frequency==initial(frequency)?(RADIO_TO_AIRALARM):null
if (frequency)
if(frequency)
set_frequency(frequency)
broadcast_status()
check_turfs()
@@ -159,8 +149,6 @@
for (var/turf/simulated/tile in adjacent_turfs)
scrub(tile)
/obj/machinery/atmospherics/components/unary/vent_scrubber/proc/scrub(var/turf/simulated/tile)
if (!istype(tile))
return 0
@@ -245,9 +233,9 @@
// diagonal turfs that can share atmos with *both* of the cardinal turfs
/obj/machinery/atmospherics/components/unary/vent_scrubber/proc/check_turfs()
adjacent_turfs.Cut()
var/turf/T = loc
if (istype(T))
adjacent_turfs = T.GetAtmosAdjacentTurfs(alldir=1)
var/turf/T = get_turf(src)
if(istype(T))
adjacent_turfs = T.GetAtmosAdjacentTurfs(alldir = 1)
/obj/machinery/atmospherics/components/unary/vent_scrubber/receive_signal(datum/signal/signal)
@@ -299,10 +287,7 @@
return
/obj/machinery/atmospherics/components/unary/vent_scrubber/power_change()
if(powered(power_channel))
stat &= ~NOPOWER
else
stat |= NOPOWER
..()
update_icon_nopipes()
/obj/machinery/atmospherics/components/unary/vent_scrubber/attackby(obj/item/weapon/W, mob/user, params)
@@ -66,13 +66,18 @@
desc = "Pre-mixed air."
icon_state = "grey"
/obj/machinery/portable_atmospherics/canister/New(loc)
/obj/machinery/portable_atmospherics/canister/New(loc, datum/gas_mixture/existing_mixture)
..()
create_gas()
if(existing_mixture)
air_contents.copy_from(existing_mixture)
else
create_gas()
pump = new(src, FALSE)
pump.on = TRUE
pump.stat = 0
pump.build_network()
update_icon()
/obj/machinery/portable_atmospherics/canister/Destroy()
@@ -256,8 +261,7 @@
if(label && !..())
var/newtype = label2types[label]
if(newtype)
var/obj/machinery/portable_atmospherics/canister/replacement = new newtype(loc)
replacement.air_contents.copy_from(air_contents)
var/obj/machinery/portable_atmospherics/canister/replacement = new newtype(loc, air_contents)
replacement.interact(usr)
qdel(src)
if("pressure")
@@ -3,7 +3,7 @@
icon = 'icons/obj/atmos.dmi'
use_power = 0
var/datum/gas_mixture/air_contents = new
var/datum/gas_mixture/air_contents
var/obj/machinery/atmospherics/components/unary/portables_connector/connected_port
var/obj/item/weapon/tank/holding
@@ -15,22 +15,27 @@
/obj/machinery/portable_atmospherics/New()
..()
SSair.atmos_machinery += src
air_contents = new
air_contents.volume = volume
air_contents.temperature = T20C
return 1
/obj/machinery/portable_atmospherics/Destroy()
SSair.atmos_machinery -= src
qdel(air_contents)
air_contents = null
return ..()
/obj/machinery/portable_atmospherics/process_atmos()
if(!connected_port) // Pipe network handles reactions if connected.
air_contents.react()
else
update_icon()
/obj/machinery/portable_atmospherics/Destroy()
qdel(air_contents)
air_contents = null
SSair.atmos_machinery -= src
return ..()
/obj/machinery/portable_atmospherics/return_air()
return air_contents
+2 -1
View File
@@ -89,7 +89,8 @@
age = rand(AGE_MIN,AGE_MAX)
//job handling
var/list/jobs = SSjob.occupations.Copy()
for(var/datum/job/J in jobs)
for(var/job in jobs)
var/datum/job/J = job
if(J.title == "Cyborg" || J.title == "AI" || J.title == "Chaplain" || J.title == "Mime")
jobs -= J
myjob = pick(jobs)
@@ -626,7 +626,7 @@ var/global/list/synth_flesh_disguises = list()
/datum/species/synth/proc/handle_disguise(mob/living/carbon/human/H)
if(H)
if(H && fake_species) // Obviously we only are disguise when we're... disguised.
H.updatehealth()
var/add_overlay = FALSE
if(H.health < disguise_fail_health)
+9 -4
View File
@@ -395,7 +395,12 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
return
/proc/IsAdminGhost(var/mob/user)
if(check_rights_for(user.client, R_ADMIN) && istype(user, /mob/dead/observer) && user.client.AI_Interact)
return 1
else
return 0
if(!user.client) // Do they have a client?
return
if(!isobserver(user)) // Are they a ghost?
return
if(!check_rights_for(user.client, R_ADMIN)) // Are they allowed?
return
if(!user.client.AI_Interact) // Do they have it enabled?
return
return TRUE
+8 -8
View File
@@ -288,7 +288,7 @@ var/const/GRAV_NEEDS_WRENCH = 3
// Sound the alert if gravity was just enabled or disabled.
var/alert = 0
var/area/area = get_area(src)
if(new_state) // If we turned on
if(on && ticker && ticker.current_state == GAME_STATE_PLAYING) // If we turned on and the game is live.
if(gravity_in_level() == 0)
alert = 1
investigate_log("was brought online and is now producing gravity for this level.", "gravity")
@@ -354,14 +354,14 @@ var/const/GRAV_NEEDS_WRENCH = 3
// Shake everyone on the z level to let them know that gravity was enagaged/disenagaged.
/obj/machinery/gravity_generator/main/proc/shake_everyone()
var/turf/our_turf = get_turf(src)
var/turf/T = get_turf(src)
for(var/mob/M in mob_list)
var/turf/their_turf = get_turf(M)
if(their_turf.z == our_turf.z)
M.update_gravity(M.mob_has_gravity())
if(M.client)
shake_camera(M, 15, 1)
M.playsound_local(our_turf, 'sound/effects/alert.ogg', 100, 1, 0.5)
if(M.z != z)
continue
M.update_gravity(M.mob_has_gravity())
if(M.client)
shake_camera(M, 15, 1)
M.playsound_local(T, 'sound/effects/alert.ogg', 100, 1, 0.5)
/obj/machinery/gravity_generator/main/proc/gravity_in_level()
var/turf/T = get_turf(src)