Merge branch 'master' into modsuits

This commit is contained in:
Jerry Wester
2022-12-13 19:18:24 -07:00
committed by GitHub
57 changed files with 454 additions and 273 deletions
+28 -2
View File
@@ -15,7 +15,10 @@
var/area_flags = VALID_TERRITORY | BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED
var/fire = null
///Do we have an active fire alarm?
var/fire = FALSE
///How many fire alarm sources do we have?
var/triggered_firealarms = 0
///Whether there is an atmos alarm in this area
var/atmosalm = FALSE
var/poweralm = FALSE
@@ -443,7 +446,18 @@ GLOBAL_LIST_EMPTY(teleportlocs)
START_PROCESSING(SSobj, src)
/area/proc/firereset(obj/source)
if (fire)
var/should_reset_alarms = fire
if(source)
if(istype(source, /obj/machinery/firealarm))
var/obj/machinery/firealarm/alarm = source
if(alarm.triggered)
alarm.triggered = FALSE
triggered_firealarms -= 1
if(triggered_firealarms > 0)
should_reset_alarms = FALSE
should_reset_alarms = should_reset_alarms & power_environ //No resetting if there's no power
if (should_reset_alarms) // if there's a source, make sure there's no fire alarms left
set_fire_alarm_effects(FALSE)
ModifyFiredoors(TRUE)
@@ -463,6 +477,18 @@ GLOBAL_LIST_EMPTY(teleportlocs)
STOP_PROCESSING(SSobj, src)
///Get rid of any dangling camera refs
/area/proc/clear_camera(obj/machinery/camera/cam)
LAZYREMOVE(cameras, cam)
for (var/mob/living/silicon/aiPlayer as anything in GLOB.silicon_mobs)
aiPlayer.freeCamera(src, cam)
for (var/obj/machinery/computer/station_alert/comp as anything in GLOB.alert_consoles)
comp.freeCamera(src, cam)
for (var/mob/living/simple_animal/drone/drone_on as anything in GLOB.drones_list)
drone_on.freeCamera(src, cam)
for(var/datum/computer_file/program/alarm_monitor/monitor as anything in GLOB.alarmdisplay)
monitor.freeCamera(src, cam)
/area/process()
if(firedoors_last_closed_on + 100 < world.time) //every 10 seconds
ModifyFiredoors(FALSE)
+5
View File
@@ -117,11 +117,16 @@
. = ..()
//We add ourselves to this list, best to clear it out
// LAZYCLEARLIST(area_sensitive_contents)
for(var/movable_content in contents)
qdel(movable_content)
moveToNullspace()
vis_contents.Cut()
/atom/movable/proc/update_emissive_block()
if(blocks_emissive != EMISSIVE_BLOCK_GENERIC)
return
+1 -1
View File
@@ -38,7 +38,7 @@
icon_state = "[state]"
/obj/machinery/bluespace_beacon/process()
if(!Beacon)
if(QDELETED(Beacon)) //Don't move it out of nullspace BACK INTO THE GAME for the love of god
var/turf/T = loc
Beacon = new(T)
Beacon.invisibility = INVISIBILITY_MAXIMUM
+3 -3
View File
@@ -81,15 +81,15 @@
if(can_use())
toggle_cam(null, 0) //kick anyone viewing out and remove from the camera chunks
GLOB.cameranet.cameras -= src
cancelCameraAlarm()
if(isarea(myarea))
LAZYREMOVE(myarea.cameras, src)
myarea.clear_camera(src)
QDEL_NULL(assembly)
if(bug)
bug.bugged_cameras -= src.c_tag
bug.bugged_cameras -= c_tag
if(bug.current == src)
bug.current = null
bug = null
cancelCameraAlarm()
return ..()
/obj/machinery/camera/emp_act(severity)
+31 -16
View File
@@ -33,31 +33,46 @@
return data
/obj/machinery/computer/station_alert/proc/triggerAlarm(class, area/A, O, obj/source)
/obj/machinery/computer/station_alert/proc/triggerAlarm(class, area/home, cameras, obj/source)
if(source.z != z)
return
if(stat & (BROKEN))
return
var/list/L = alarms[class]
for(var/I in L)
if (I == A.name)
var/list/alarm = L[I]
var/list/our_sort = alarms[class]
for(var/areaname in our_sort)
if (areaname == home.name)
var/list/alarm = our_sort[areaname]
var/list/sources = alarm[3]
if (!(source in sources))
sources += source
return 1
var/obj/machinery/camera/C = null
var/list/CL = null
if(O && islist(O))
CL = O
if (CL.len == 1)
C = CL[1]
else if(O && istype(O, /obj/machinery/camera))
C = O
L[A.name] = list(A, (C ? C : O), list(source))
return 1
return TRUE
var/obj/machinery/camera/cam = null
var/list/our_cams = null
if(cameras && islist(cameras))
our_cams = cameras
if (our_cams.len == 1)
cam = our_cams[1]
else if(cameras && istype(cameras, /obj/machinery/camera))
cam = cameras
our_sort[home.name] = list(home, (cam ? cam : cameras), list(source))
return TRUE
/obj/machinery/computer/station_alert/proc/freeCamera(area/home, obj/machinery/camera/cam)
for(var/class in alarms)
var/our_area = alarms[class][home.name]
if(!our_area)
continue
var/cams = our_area[2] //Get the cameras
if(!cams)
continue
if(islist(cams))
cams -= cam
if(length(cams) == 1)
our_area[2] = cams[1]
else
our_area[2] = null
/obj/machinery/computer/station_alert/proc/cancelAlarm(class, area/A, obj/origin)
if(stat & (BROKEN))
@@ -3,6 +3,10 @@
var/state
var/obj/machinery/embedded_controller/master
/datum/computer/file/embedded_program/Destroy()
master = null
. = ..()
/datum/computer/file/embedded_program/proc/post_signal(datum/signal/signal, comm_line)
if(master)
master.post_signal(signal, comm_line)
@@ -25,6 +29,11 @@
var/on = TRUE
/obj/machinery/embedded_controller/Destroy()
if(program)
QDEL_NULL(program)
. = ..()
/obj/machinery/embedded_controller/ui_interact(mob/user)
. = ..()
user.set_machine(src)
+10 -7
View File
@@ -33,8 +33,10 @@
var/detecting = 1
var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone
var/last_alarm = 0
COOLDOWN_DECLARE(last_alarm)
var/area/myarea = null
//Has this firealarm been triggered by its enviroment?
var/triggered = FALSE
/obj/machinery/firealarm/Initialize(mapload, dir, building)
. = ..()
@@ -50,6 +52,7 @@
LAZYADD(myarea.firealarms, src)
/obj/machinery/firealarm/Destroy()
myarea.firereset(src)
LAZYREMOVE(myarea.firealarms, src)
return ..()
@@ -102,7 +105,7 @@
. += mutable_appearance(icon, "fire_on")
. += emissive_appearance(icon, "fire_on")
if(!panel_open && detecting) //It just looks horrible with the panel open
if(!panel_open && detecting && triggered) //It just looks horrible with the panel open
. += "fire_detected"
. += mutable_appearance(icon, "fire_detected")
. += emissive_appearance(icon, "fire_detected") //Pain
@@ -129,14 +132,14 @@
return TRUE
/obj/machinery/firealarm/temperature_expose(datum/gas_mixture/air, temperature, volume)
if((temperature > T0C + 200 || temperature < BODYTEMP_COLD_DAMAGE_LIMIT) && (last_alarm+FIREALARM_COOLDOWN < world.time) && !(obj_flags & EMAGGED) && detecting && !stat)
if((temperature > T0C + 200 || temperature < BODYTEMP_COLD_DAMAGE_LIMIT) && COOLDOWN_FINISHED(src, last_alarm) && !(obj_flags & EMAGGED) && detecting && !stat)
alarm()
..()
return ..()
/obj/machinery/firealarm/proc/alarm(mob/user)
if(!is_operational() || (last_alarm+FIREALARM_COOLDOWN > world.time))
if(!is_operational() || !COOLDOWN_FINISHED(src, last_alarm))
return
last_alarm = world.time
COOLDOWN_START(src, last_alarm, FIREALARM_COOLDOWN)
var/area/A = get_base_area(src)
A.firealert(src)
playsound(loc, 'goon/sound/machinery/FireAlarm.ogg', 75)
@@ -147,7 +150,7 @@
if(!is_operational())
return
var/area/A = get_base_area(src)
A.firereset(src)
A.firereset()
if(user)
log_game("[user] reset a fire alarm at [COORD(src)]")
+1
View File
@@ -24,6 +24,7 @@
connected_console = null
for(var/obj/machinery/computer/mechpad/console in consoles)
console.mechpads -= src
GLOB.mechpad_list -= src
return ..()
/obj/machinery/mechpad/screwdriver_act(mob/user, obj/item/tool)
@@ -11,6 +11,7 @@
var/body_colors = "#e3ba84" //a default color just in case.
var/gibs_reagent_id = /datum/reagent/liquidgibs
var/gibs_bloodtype = "A+"
turf_loc_check = FALSE
/obj/effect/decal/cleanable/blood/gibs/Initialize(mapload, list/datum/disease/diseases, list/blood_data)
. = ..()
@@ -22,6 +23,9 @@
add_blood_DNA(list("Non-human DNA" = gibs_bloodtype), diseases)
update_icon()
/obj/effect/decal/cleanable/blood/gibs/replace_decal(obj/effect/decal/cleanable/C)
return FALSE //Never fail to place us
/obj/effect/decal/cleanable/blood/gibs/update_icon()
add_atom_colour(blood_DNA_to_color(), FIXED_COLOUR_PRIORITY)
cut_overlays()
@@ -725,6 +725,26 @@
def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high)
needs_anchored = FALSE
/obj/item/circuitboard/machine/chem_dispenser/fullupgrade
build_path = /obj/machinery/chem_dispenser/fullupgrade
req_components = list(
/obj/item/stock_parts/matter_bin/bluespace = 2,
/obj/item/stock_parts/capacitor/quadratic = 2,
/obj/item/stock_parts/manipulator/femto = 2,
/obj/item/stack/sheet/glass = 1,
/obj/item/stock_parts/cell/bluespace = 1,
)
/obj/item/circuitboard/machine/chem_dispenser/mutagensaltpeter
build_path = /obj/machinery/chem_dispenser/mutagensaltpeter
req_components = list(
/obj/item/stock_parts/matter_bin/bluespace = 2,
/obj/item/stock_parts/capacitor/quadratic = 2,
/obj/item/stock_parts/manipulator/femto = 2,
/obj/item/stack/sheet/glass = 1,
/obj/item/stock_parts/cell/bluespace = 1,
)
/obj/item/circuitboard/machine/chem_dispenser/apothecary
name = "Apotechary Chem Dispenser (Machine Board)"
build_path = /obj/machinery/chem_dispenser/apothecary
@@ -740,7 +760,13 @@
name = "Reagent Synthesizer (Abductor Machine Board)"
icon_state = "abductor_mod"
build_path = /obj/machinery/chem_dispenser/abductor
def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high)
req_components = list(
/obj/item/stock_parts/matter_bin/bluespace = 2,
/obj/item/stock_parts/capacitor/quadratic = 2,
/obj/item/stock_parts/manipulator/femto = 2,
/obj/item/stack/sheet/glass = 1,
/obj/item/stock_parts/cell/bluespace = 1,
)
needs_anchored = FALSE
/obj/item/circuitboard/machine/chem_heater
@@ -1175,11 +1201,31 @@
icon_state = "service"
build_path = /obj/machinery/chem_dispenser/drinks
/obj/item/circuitboard/machine/chem_dispenser/drinks/fullupgrade
build_path = /obj/machinery/chem_dispenser/drinks/fullupgrade
req_components = list(
/obj/item/stock_parts/matter_bin/bluespace = 2,
/obj/item/stock_parts/capacitor/quadratic = 2,
/obj/item/stock_parts/manipulator/femto = 2,
/obj/item/stack/sheet/glass = 1,
/obj/item/stock_parts/cell/bluespace = 1,
)
/obj/item/circuitboard/machine/chem_dispenser/drinks/beer
name = "Booze Dispenser (Machine Board)"
icon_state = "service"
build_path = /obj/machinery/chem_dispenser/drinks/beer
/obj/item/circuitboard/machine/chem_dispenser/drinks/beer/fullupgrade
build_path = /obj/machinery/chem_dispenser/drinks/beer/fullupgrade
req_components = list(
/obj/item/stock_parts/matter_bin/bluespace = 2,
/obj/item/stock_parts/capacitor/quadratic = 2,
/obj/item/stock_parts/manipulator/femto = 2,
/obj/item/stack/sheet/glass = 1,
/obj/item/stock_parts/cell/bluespace = 1,
)
/obj/item/circuitboard/machine/chem_master/condi
name = "CondiMaster 3000 (Machine Board)"
icon_state = "service"
+2 -2
View File
@@ -17,7 +17,7 @@
icon_state = "beacon-off"
/obj/item/beacon/Destroy()
GLOB.teleportbeacons.Remove(src)
GLOB.teleportbeacons -= src
return ..()
/obj/item/beacon/attack_self(mob/user)
@@ -27,7 +27,7 @@
GLOB.teleportbeacons += src
else
icon_state = "beacon-off"
GLOB.teleportbeacons.Remove(src)
GLOB.teleportbeacons -= src
to_chat(user, "<span class='notice'>You [enabled ? "enable" : "disable"] the beacon.</span>")
return
@@ -28,6 +28,10 @@
mytape = new starting_tape_type(src)
update_icon()
/obj/item/taperecorder/Destroy()
// QDEL_NULL(soundloop)
QDEL_NULL(mytape)
return ..()
/obj/item/taperecorder/examine(mob/user)
. = ..()
@@ -139,7 +139,7 @@
/obj/structure/closet/crate/freezer/Destroy()
recursive_organ_check(src)
..()
return ..()
/obj/structure/closet/crate/freezer/Initialize(mapload)
. = ..()
+2
View File
@@ -137,6 +137,8 @@ GLOBAL_LIST_EMPTY(station_turfs)
requires_activation = FALSE
..()
vis_contents.Cut()
/turf/on_attack_hand(mob/user)
user.Move_Pulled(src)