From 19a3aca61950b18376b0efd4cf8d224e4926466a Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Tue, 10 Dec 2019 15:33:15 +0100 Subject: [PATCH] I fear for my powernet --- code/__HELPERS/areas.dm | 131 ++++++++++++++++++ code/__HELPERS/game.dm | 4 +- code/__HELPERS/unsorted.dm | 76 ---------- code/datums/components/virtual_reality.dm | 2 +- code/datums/diseases/wizarditis.dm | 2 +- code/datums/weather/weather.dm | 5 +- code/datums/wires/airalarm.dm | 4 +- code/game/area/Space_Station_13_areas.dm | 24 +++- code/game/area/areas.dm | 105 ++++++++++---- code/game/gamemodes/events.dm | 5 +- code/game/machinery/cell_charger.dm | 2 +- code/game/machinery/doors/firedoor.dm | 2 +- code/game/machinery/firealarm.dm | 14 +- code/game/machinery/recharger.dm | 2 +- .../game/mecha/equipment/tools/other_tools.dm | 4 +- .../effects/effect_system/effects_foam.dm | 2 +- code/game/objects/items/crayons.dm | 4 +- code/game/objects/structures/ai_core.dm | 2 +- code/game/objects/structures/displaycase.dm | 2 +- code/modules/VR/vr_sleeper.dm | 27 ++-- code/modules/admin/verbs/debug.dm | 16 ++- .../atmospherics/machinery/airalarm.dm | 20 +-- .../components/unary_devices/vent_pump.dm | 4 +- .../components/unary_devices/vent_scrubber.dm | 4 +- code/modules/mob/living/silicon/ai/life.dm | 10 +- .../hostile/megafauna/colossus.dm | 58 ++++---- .../simple_animal/hostile/megafauna/legion.dm | 2 +- code/modules/power/apc.dm | 80 +++++------ code/modules/power/lighting.dm | 4 +- code/modules/power/power.dm | 3 +- .../xenobiology/crossbreeding/consuming.dm | 2 +- icons/turf/areas.dmi | Bin 38318 -> 38605 bytes .../code/game/gamemodes/gangs/dominator.dm | 4 +- .../code/game/gamemodes/gangs/gang_decals.dm | 4 +- .../code/game/gamemodes/gangs/gang_items.dm | 2 +- .../code/game/machinery/firealarm.dm | 2 +- 36 files changed, 386 insertions(+), 248 deletions(-) diff --git a/code/__HELPERS/areas.dm b/code/__HELPERS/areas.dm index 1f5b82f7bf..316c159fb8 100644 --- a/code/__HELPERS/areas.dm +++ b/code/__HELPERS/areas.dm @@ -1,5 +1,81 @@ #define BP_MAX_ROOM_SIZE 300 +//Repopulates sortedAreas list +/proc/repopulate_sorted_areas() + GLOB.sortedAreas = list() + + for(var/area/A in world) + GLOB.sortedAreas.Add(A) + + sortTim(GLOB.sortedAreas, /proc/cmp_name_asc) + +/area/proc/addSorted() + GLOB.sortedAreas.Add(src) + sortTim(GLOB.sortedAreas, /proc/cmp_name_asc) + +//Takes: Area type as a text string from a variable. +//Returns: Instance for the area in the world. +/proc/get_area_instance_from_text(areatext) + if(istext(areatext)) + areatext = text2path(areatext) + return GLOB.areas_by_type[areatext] + +//Takes: Area type as text string or as typepath OR an instance of the area. +//Returns: A list of all areas of that type in the world. +/proc/get_areas(areatype, subtypes=TRUE) + if(istext(areatype)) + areatype = text2path(areatype) + else if(isarea(areatype)) + var/area/areatemp = areatype + areatype = areatemp.type + else if(!ispath(areatype)) + return null + + var/list/areas = list() + if(subtypes) + var/list/cache = typecacheof(areatype) + for(var/V in GLOB.sortedAreas) + var/area/A = V + if(cache[A.type]) + areas += V + else + for(var/V in GLOB.sortedAreas) + var/area/A = V + if(A.type == areatype) + areas += V + return areas + +//Takes: Area type as text string or as typepath OR an instance of the area. +//Returns: A list of all turfs in areas of that type of that type in the world. +/proc/get_area_turfs(areatype, target_z = 0, subtypes=FALSE) + if(istext(areatype)) + areatype = text2path(areatype) + else if(isarea(areatype)) + var/area/areatemp = areatype + areatype = areatemp.type + else if(!ispath(areatype)) + return null + + var/list/turfs = list() + if(subtypes) + var/list/cache = typecacheof(areatype) + for(var/V in GLOB.sortedAreas) + var/area/A = V + if(!cache[A.type]) + continue + for(var/turf/T in A) + if(target_z == 0 || target_z == T.z) + turfs += T + else + for(var/V in GLOB.sortedAreas) + var/area/A = V + if(A.type != areatype) + continue + for(var/turf/T in A) + if(target_z == 0 || target_z == T.z) + turfs += T + return turfs + // Gets an atmos isolated contained space // Returns an associative list of turf|dirs pairs // The dirs are connected turfs in the same space @@ -96,4 +172,59 @@ to_chat(creator, "You have created a new area, named [newA.name]. It is now weather proof, and constructing an APC will allow it to be powered.") return TRUE + +/** + * Returns either the base area the target's belongs to or the target's area itself. + */ +/proc/get_base_area(atom/target) + var/area/A = get_area(target) + if(A?.master_area) + return A.master_area + return A + +/** + * Returns either null, or a list containing all the sub_areas associated with the base area the target is located in. + * If include_base is TRUE, the base area will also be added to the return list. + */ +/proc/get_sub_areas(atom/target, include_base = FALSE) + var/area/A = get_area(target) + if(!A) + return + . = list() + if(A.master_area) + A = A.master_area + if(include_base) + . += A + if(A.sub_areas) + . += A.sub_areas + +/** + * Proc for purposes similar to the get_areas_turfs(), but aimed to include associated areas. + * Only takes area (A) instances and paths, no text strings. + * Returns a list of all turfs found in the associated sub_areas (including the base's if include_base is TRUE) + * and located in the same z as target_z, or anywhere if the latter is 0 + */ + +/proc/get_sub_areas_turfs(area/A, target_z = 0, include_base = TRUE) + var/list/contents = get_sub_areas_contents(A, include_base) + . = list() + for(var/turf/T in contents) + if(target_z == 0 || target_z == T.z) + . += T +/** + * Simple proc that returns all a sum of all contents from all associated areas, + * Think of the above but for all contents, not just turfs, and without target z. + */ + +/proc/get_sub_areas_contents(area/A, include_base = TRUE) + if(ispath(A)) + A = GLOB.areas_by_type[A] + if(!A) + return + if(A.master_area) + A = A.master_area + . = list(A.contents) + for(var/i in A.sub_areas) + . += A.sub_areas[i].contents + #undef BP_MAX_ROOM_SIZE diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index d76fc7731a..4b43782b12 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -8,8 +8,8 @@ #define Z_TURFS(ZLEVEL) block(locate(1,1,ZLEVEL), locate(world.maxx, world.maxy, ZLEVEL)) #define CULT_POLL_WAIT 2400 -/proc/get_area_name(atom/X, format_text = FALSE) - var/area/A = isarea(X) ? X : get_area(X) +/proc/get_area_name(atom/X, format_text = FALSE, get_base_area = FALSE) + var/area/A = get_base_area ? get_base_area(X) : get_area(X) if(!A) return null return format_text ? format_text(A.name) : A.name diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 9abe42ea8e..1080dc5710 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -566,82 +566,6 @@ Turf and target are separate in case you want to teleport some distance from a t else return 0 -//Repopulates sortedAreas list -/proc/repopulate_sorted_areas() - GLOB.sortedAreas = list() - - for(var/area/A in world) - GLOB.sortedAreas.Add(A) - - sortTim(GLOB.sortedAreas, /proc/cmp_name_asc) - -/area/proc/addSorted() - GLOB.sortedAreas.Add(src) - sortTim(GLOB.sortedAreas, /proc/cmp_name_asc) - -//Takes: Area type as a text string from a variable. -//Returns: Instance for the area in the world. -/proc/get_area_instance_from_text(areatext) - if(istext(areatext)) - areatext = text2path(areatext) - return GLOB.areas_by_type[areatext] - -//Takes: Area type as text string or as typepath OR an instance of the area. -//Returns: A list of all areas of that type in the world. -/proc/get_areas(areatype, subtypes=TRUE) - if(istext(areatype)) - areatype = text2path(areatype) - else if(isarea(areatype)) - var/area/areatemp = areatype - areatype = areatemp.type - else if(!ispath(areatype)) - return null - - var/list/areas = list() - if(subtypes) - var/list/cache = typecacheof(areatype) - for(var/V in GLOB.sortedAreas) - var/area/A = V - if(cache[A.type]) - areas += V - else - for(var/V in GLOB.sortedAreas) - var/area/A = V - if(A.type == areatype) - areas += V - return areas - -//Takes: Area type as text string or as typepath OR an instance of the area. -//Returns: A list of all turfs in areas of that type of that type in the world. -/proc/get_area_turfs(areatype, target_z = 0, subtypes=FALSE) - if(istext(areatype)) - areatype = text2path(areatype) - else if(isarea(areatype)) - var/area/areatemp = areatype - areatype = areatemp.type - else if(!ispath(areatype)) - return null - - var/list/turfs = list() - if(subtypes) - var/list/cache = typecacheof(areatype) - for(var/V in GLOB.sortedAreas) - var/area/A = V - if(!cache[A.type]) - continue - for(var/turf/T in A) - if(target_z == 0 || target_z == T.z) - turfs += T - else - for(var/V in GLOB.sortedAreas) - var/area/A = V - if(A.type != areatype) - continue - for(var/turf/T in A) - if(target_z == 0 || target_z == T.z) - turfs += T - return turfs - /proc/get_cardinal_dir(atom/A, atom/B) var/dx = abs(B.x - A.x) var/dy = abs(B.y - A.y) diff --git a/code/datums/components/virtual_reality.dm b/code/datums/components/virtual_reality.dm index 7bad836e47..d72b741abe 100644 --- a/code/datums/components/virtual_reality.dm +++ b/code/datums/components/virtual_reality.dm @@ -114,7 +114,7 @@ to_chat(mastermind, "You feel everything fading away...") dreamer.death(FALSE) if(cleanup) - var/obj/effect/vr_clean_master/cleanbot = locate() in get_area(M) + var/obj/effect/vr_clean_master/cleanbot = locate() in get_base_area(M) if(cleanbot) LAZYADD(cleanbot.corpse_party, M) if(vr_sleeper) diff --git a/code/datums/diseases/wizarditis.dm b/code/datums/diseases/wizarditis.dm index b288046380..3a74663643 100644 --- a/code/datums/diseases/wizarditis.dm +++ b/code/datums/diseases/wizarditis.dm @@ -94,7 +94,7 @@ STI KALY - blind var/area/thearea = pick(theareas) var/list/L = list() - for(var/turf/T in get_area_turfs(thearea.type)) + for(var/turf/T in thearea) if(T.z != affected_mob.z) continue if(T.name == "space") diff --git a/code/datums/weather/weather.dm b/code/datums/weather/weather.dm index a3b666dcc6..01b9facbb8 100644 --- a/code/datums/weather/weather.dm +++ b/code/datums/weather/weather.dm @@ -50,7 +50,10 @@ stage = STARTUP_STAGE var/list/affectareas = list() for(var/V in get_areas(area_type)) - affectareas += V + var/area/A = V + affectareas |= A + if(A.sub_areas) + affectareas |= A.sub_areas for(var/V in protected_areas) affectareas -= get_areas(V) for(var/V in affectareas) diff --git a/code/datums/wires/airalarm.dm b/code/datums/wires/airalarm.dm index 6eb4dc04db..0c4715e27e 100644 --- a/code/datums/wires/airalarm.dm +++ b/code/datums/wires/airalarm.dm @@ -46,7 +46,7 @@ A.mode = 1 // AALARM_MODE_SCRUB A.apply_mode() if(WIRE_ALARM) // Clear alarms. - var/area/AA = get_area(A) + var/area/AA = get_base_area(A) if(AA.atmosalert(0, holder)) A.post_alert(0) A.update_icon() @@ -68,7 +68,7 @@ A.mode = 3 // AALARM_MODE_PANIC A.apply_mode() if(WIRE_ALARM) // Post alarm. - var/area/AA = get_area(A) + var/area/AA = get_base_area(A) if(AA.atmosalert(2, holder)) A.post_alert(2) A.update_icon() \ No newline at end of file diff --git a/code/game/area/Space_Station_13_areas.dm b/code/game/area/Space_Station_13_areas.dm index fa66306302..733a5ace75 100644 --- a/code/game/area/Space_Station_13_areas.dm +++ b/code/game/area/Space_Station_13_areas.dm @@ -403,7 +403,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/crew_quarters/dorms name = "Dormitories" icon_state = "Sleep" - safe = TRUE /area/crew_quarters/dorms/male name = "Male Dorm" @@ -413,6 +412,29 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "Female Dorm" icon_state = "Sleep" +/area/crew_quarters/dorms/cabin + name = "Dorms Cabin One" + icon_state = "sleep_cabin" + safe = TRUE + +/area/crew_quarters/dorms/cabin/two + name = "Dorms Cabin Two" + +/area/crew_quarters/dorms/cabin/three + name = "Dorms Cabin Three" + +/area/crew_quarters/dorms/cabin/four + name = "Dorms Cabin Four" + +/area/crew_quarters/dorms/cabin/five + name = "Dorms Cabin Five" + +/area/crew_quarters/dorms/cabin/six + name = "Dorms Cabin Six" + +/area/crew_quarters/dorms/cabin/seven + name = "Dorms Cabin Seven" + /area/crew_quarters/rehab_dome name = "Rehabilitation Dome" icon_state = "Sleep" diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 612c3cba42..74e238cdc0 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -63,6 +63,15 @@ var/xenobiology_compatible = FALSE //Can the Xenobio management console transverse this area by default? var/list/canSmoothWithAreas //typecache to limit the areas that atoms in this area can smooth with +/** + * These two vars allow for multiple unique areas to be linked to a master area + * for reasons such as APC powernet nodes, fire alarms and similar, without sacrificing + * their own flags, statuses, variables and uniqueness. + * Friendly reminder: don't varedit area paths, make new typepaths instead. + */ + var/list/area/sub_areas //list of typepaths of the areas you wish to link here, will be replaced with a list of references on mapload. + var/area/master_area //The area we wish to use in place of src for certain actions such as APC area linking. + /*Adding a wizard area teleport list because motherfucking lag -- Urist*/ /*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/ GLOBAL_LIST_EMPTY(teleportlocs) @@ -121,10 +130,31 @@ GLOBAL_LIST_EMPTY(teleportlocs) reg_in_areas_in_z() + //so far I'm only implementing it on mapped unique areas, it's easier this way. + if(unique && LAZYLEN(sub_areas)) + var/paths = sub_areas.Copy() + sub_areas = null + for(var/type in paths) + var/area/A = GLOB.areas_by_type[type] + if(!A) + /* By chance an area not loaded in the station, ruin or map, let's not bother for now. + WARNING("No area of type [type] found in GLOB.areas_by_type for [src]'s linked areas.") + */ + continue + if(A == src) + WARNING("\"[src]\" area a attempted to link with itself.") + continue + if(A.master_area) + WARNING("[src] attempted to link with [A] while the latter is already linked to another area ([A.master_area]).") + continue + LAZYADD(sub_areas, A) + A.master_area = src + return INITIALIZE_HINT_LATELOAD /area/LateInitialize() - power_change() // all machines set to current power level, also updates icon + if(!master_area) //we don't want to run it twice. + power_change() // all machines set to current power level, also updates icon /area/proc/reg_in_areas_in_z() if(contents.len) @@ -147,6 +177,19 @@ GLOBAL_LIST_EMPTY(teleportlocs) /area/Destroy() if(GLOB.areas_by_type[type] == src) GLOB.areas_by_type[type] = null + if(master_area) + LAZYREMOVE(master_area, src) + master_area = null + if(sub_areas) + for(var/i in sub_areas) + var/area/A = i + A.master_area = null + sub_areas -= A + if(A.requires_power) + A.power_light = FALSE + A.power_equip = FALSE + A.power_environ = FALSE + INVOKE_ASYNC(A, .proc/power_change) STOP_PROCESSING(SSobj, src) return ..() @@ -212,9 +255,11 @@ GLOBAL_LIST_EMPTY(teleportlocs) var/datum/computer_file/program/alarm_monitor/p = item p.cancelAlarm("Atmosphere", src, source) - src.atmosalm = danger_level - return 1 - return 0 + atmosalm = danger_level + for(var/i in sub_areas) + sub_areas[i].atmosalm = danger_level + return TRUE + return FALSE /area/proc/ModifyFiredoors(opening) if(firedoors) @@ -239,7 +284,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) return if (!fire) - set_fire_alarm_effect() + set_fire_alarm_effects(TRUE) ModifyFiredoors(FALSE) for(var/item in firealarms) var/obj/machinery/firealarm/F = item @@ -262,7 +307,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) /area/proc/firereset(obj/source) if (fire) - unset_fire_alarm_effects() + set_fire_alarm_effects(FALSE) ModifyFiredoors(TRUE) for(var/item in firealarms) var/obj/machinery/firealarm/F = item @@ -298,9 +343,9 @@ GLOBAL_LIST_EMPTY(teleportlocs) return //Trigger alarm effect - set_fire_alarm_effect() + set_fire_alarm_effects(TRUE) //Lockdown airlocks - for(var/obj/machinery/door/DOOR in src) + for(var/obj/machinery/door/DOOR in get_sub_areas_contents(src)) close_and_lock_door(DOOR) for (var/i in GLOB.silicon_mobs) @@ -309,23 +354,16 @@ GLOBAL_LIST_EMPTY(teleportlocs) //Cancel silicon alert after 1 minute addtimer(CALLBACK(SILICON, /mob/living/silicon.proc/cancelAlarm,"Burglar",src,trigger), 600) -/area/proc/set_fire_alarm_effect() - fire = TRUE - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - for(var/alarm in firealarms) - var/obj/machinery/firealarm/F = alarm - F.update_fire_light(fire) - for(var/obj/machinery/light/L in src) - L.update() - -/area/proc/unset_fire_alarm_effects() - fire = FALSE +/area/proc/set_fire_alarm_effects(boolean) + fire = boolean mouse_opacity = MOUSE_OPACITY_TRANSPARENT for(var/alarm in firealarms) var/obj/machinery/firealarm/F = alarm F.update_fire_light(fire) for(var/obj/machinery/light/L in src) L.update() + for(var/i in sub_areas) + sub_areas[i].fire = boolean /area/proc/updateicon() var/weather_icon @@ -370,26 +408,34 @@ GLOBAL_LIST_EMPTY(teleportlocs) /area/proc/power_change() for(var/obj/machinery/M in src) // for each machine in the area M.power_change() // reverify power status (to update icons etc.) + if(sub_areas) + for(var/i in sub_areas) + var/area/A = i + A.power_light = power_light + A.power_equip = power_equip + A.power_environ = power_environ + INVOKE_ASYNC(A, .proc/power_change) updateicon() /area/proc/usage(chan) - var/used = 0 switch(chan) if(LIGHT) - used += used_light + . += used_light if(EQUIP) - used += used_equip + . += used_equip if(ENVIRON) - used += used_environ + . += used_environ if(TOTAL) - used += used_light + used_equip + used_environ + . += used_light + used_equip + used_environ if(STATIC_EQUIP) - used += static_equip + . += static_equip if(STATIC_LIGHT) - used += static_light + . += static_light if(STATIC_ENVIRON) - used += static_environ - return used + . += static_environ + if(sub_areas) + for(var/i in sub_areas) + . += sub_areas[i].usage(chan) /area/proc/addStaticPower(value, powerchannel) switch(powerchannel) @@ -404,6 +450,9 @@ GLOBAL_LIST_EMPTY(teleportlocs) used_equip = 0 used_light = 0 used_environ = 0 + if(sub_areas) + for(var/i in sub_areas) + sub_areas[i].clear_usage() /area/proc/use_power(amount, chan) diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index 8d3254933a..d0671dd285 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -12,7 +12,7 @@ var/list/skipped_areas = list(/area/engine/engineering, /area/engine/supermatter, /area/engine/atmospherics_engine, /area/ai_monitored/turret_protected/ai) for(var/area/A in world) - if( !A.requires_power || A.always_unpowered ) + if( !A.requires_power || A.always_unpowered || A.master_area) continue var/skip = 0 @@ -61,8 +61,9 @@ S.output_attempt = 1 S.update_icon() S.power_change() + for(var/area/A in world) - if(!istype(A, /area/space) && !istype(A, /area/shuttle) && !istype(A, /area/arrival)) + if(!istype(A, /area/space) && !istype(A, /area/shuttle) && !istype(A, /area/arrival) && !A.always_unpowered && !A.master_area) A.power_light = TRUE A.power_equip = TRUE A.power_environ = TRUE diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index 1839e44e3b..c0317f0c94 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -44,7 +44,7 @@ var/area/a = loc.loc // Gets our locations location, like a dream within a dream if(!isarea(a)) return - if(a.power_equip == 0) // There's no APC in this area, don't try to cheat power! + if(!a.powered(EQUIP)) // There's no APC in this area, don't try to cheat power! to_chat(user, "[src] blinks red as you try to insert the cell!") return if(!user.transferItemToLoc(W,src)) diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index dec41b0a59..61ad9f7c41 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -44,7 +44,7 @@ /obj/machinery/door/firedoor/proc/CalculateAffectingAreas() remove_from_areas() - affecting_areas = get_adjacent_open_areas(src) | get_area(src) + affecting_areas = get_adjacent_open_areas(src) | get_base_area(src) for(var/I in affecting_areas) var/area/A = I LAZYADD(A.firedoors, src) diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 5c2676c2b9..fd7d2216ce 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -44,7 +44,7 @@ pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0 update_icon() - myarea = get_area(src) + myarea = get_base_area(src) LAZYADD(myarea.firealarms, src) /obj/machinery/firealarm/Destroy() @@ -116,14 +116,14 @@ if(!is_operational() && (last_alarm+FIREALARM_COOLDOWN < world.time)) return last_alarm = world.time - var/area/A = get_area(src) + var/area/A = get_base_area(src) A.firealert(src) playsound(src.loc, 'goon/sound/machinery/FireAlarm.ogg', 75) /obj/machinery/firealarm/proc/reset() if(!is_operational()) return - var/area/A = get_area(src) + var/area/A = get_base_area(src) A.firereset(src) /obj/machinery/firealarm/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ @@ -142,7 +142,7 @@ else data["seclevel"] = "green" - var/area/A = get_area(src) + var/area/A = get_base_area(src) data["alarm"] = A.fire return data @@ -306,7 +306,7 @@ /obj/machinery/firealarm/partyalarm/reset() if (stat & (NOPOWER|BROKEN)) return - var/area/A = get_area(src) + var/area/A = get_base_area(src) if (!A || !A.party) return A.party = FALSE @@ -315,7 +315,7 @@ /obj/machinery/firealarm/partyalarm/alarm() if (stat & (NOPOWER|BROKEN)) return - var/area/A = get_area(src) + var/area/A = get_base_area(src) if (!A || A.party || A.name == "Space") return A.party = TRUE @@ -325,5 +325,5 @@ /obj/machinery/firealarm/partyalarm/ui_data(mob/user) . = ..() - var/area/A = get_area(src) + var/area/A = get_base_area(src) .["alarm"] = A && A.party diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 927608d3d5..001ef94163 100755 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -53,7 +53,7 @@ //Checks to make sure he's not in space doing it, and that the area got proper power. var/area/a = get_area(src) - if(!isarea(a) || a.power_equip == 0) + if(!a || !a.powered(EQUIP)) to_chat(user, "[src] blinks red as you try to insert [G].") return 1 diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index a8ba9850ff..579273d5e5 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -283,7 +283,7 @@ /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/proc/get_charge() if(equip_ready) //disabled return - var/area/A = get_area(chassis) + var/area/A = get_base_area(chassis) var/pow_chan = get_power_channel(A) if(pow_chan) return 1000 //making magic @@ -328,7 +328,7 @@ occupant_message("No powercell detected.") return if(cur_charge < chassis.cell.maxcharge) - var/area/A = get_area(chassis) + var/area/A = get_base_area(chassis) if(A) var/pow_chan for(var/c in list(EQUIP,ENVIRON,LIGHT)) diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index 10ee73915c..a3ba63108c 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -126,7 +126,7 @@ T.PlaceOnTop(/turf/open/floor/plating/foam) for(var/direction in GLOB.cardinals) var/turf/cardinal_turf = get_step(T, direction) - if(get_area(cardinal_turf) != get_area(T)) //We're at an area boundary, so let's block off this turf! + if(get_base_area(cardinal_turf) != get_area(T)) //We're at an area boundary, so let's block off this turf! new/obj/structure/foamedmetal(T) break flick("[icon_state]-disolve", src) diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 2a7b5d24cd..4a8c46e551 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -425,7 +425,7 @@ /obj/item/toy/crayon/proc/can_claim_for_gang(mob/user, atom/target) // Check area validity. // Reject space, player-created areas, and non-station z-levels. - var/area/A = get_area(target) + var/area/A = get_base_area(target) if(!A || (!is_station_level(A.z)) || !A.valid_territory) to_chat(user, "[A] is unsuitable for tagging.") return FALSE @@ -459,7 +459,7 @@ qdel(old_marking) var/datum/antagonist/gang/G = user.mind.has_antag_datum(/datum/antagonist/gang) - var/area/territory = get_area(target) + var/area/territory = get_base_area(target) new /obj/effect/decal/cleanable/crayon/gang(target,G.gang,"graffiti",0,user) // Heres the gang tag. to_chat(user, "You tagged [territory] for your gang!") diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index 8964d1ca41..0b8732fb1c 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -52,7 +52,7 @@ var/area/A = get_area(src) if(!A.blob_allowed) return FALSE - if(!A.power_equip) + if(!A.powered(EQUIP)) return FALSE if(!SSmapping.level_trait(T.z,ZTRAIT_STATION)) return FALSE diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 771b4bc04e..df1b6cadf8 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -80,7 +80,7 @@ /obj/structure/displaycase/proc/trigger_alarm() //Activate Anti-theft if(alert) - var/area/alarmed = get_area(src) + var/area/alarmed = get_base_area(src) alarmed.burglaralert(src) playsound(src, 'sound/effects/alert.ogg', 50, 1) diff --git a/code/modules/VR/vr_sleeper.dm b/code/modules/VR/vr_sleeper.dm index 72cbdc1409..dd9620e3be 100644 --- a/code/modules/VR/vr_sleeper.dm +++ b/code/modules/VR/vr_sleeper.dm @@ -211,17 +211,20 @@ /obj/effect/vr_clean_master/Initialize() . = ..() - vr_area = get_area(src) - addtimer(CALLBACK(src, .proc/clean_up), 3 MINUTES) + vr_area = get_base_area(src) + addtimer(CALLBACK(src, .proc/clean_up), 3 MINUTES, TIMER_LOOP) /obj/effect/vr_clean_master/proc/clean_up() - if (vr_area) - for (var/obj/item/ammo_casing/casing in vr_area) - qdel(casing) - for(var/obj/effect/decal/cleanable/C in vr_area) - qdel(C) - for (var/A in corpse_party) - var/mob/M = A - if(get_area(M) == vr_area && M.stat == DEAD) - qdel(M) - addtimer(CALLBACK(src, .proc/clean_up), 3 MINUTES) + if (!vr_area) + qdel(src) + return + var/list/contents = get_sub_areas_contents(src) + for (var/obj/item/ammo_casing/casing in contents) + qdel(casing) + for(var/obj/effect/decal/cleanable/C in contents) + qdel(C) + for (var/A in corpse_party) + var/mob/M = A + if(!QDELETED(M) && (M in contents) && M.stat == DEAD) + qdel(M) + corpse_party -= M diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 53fdb315b5..e474e4c9fe 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -541,7 +541,9 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) var/list/areas_all = list() var/list/areas_with_APC = list() var/list/areas_with_multiple_APCs = list() + var/list/sub_areas_APC = list() var/list/areas_with_air_alarm = list() + var/list/sub_areas_air_alarm = list() var/list/areas_with_RC = list() var/list/areas_with_light = list() var/list/areas_with_LS = list() @@ -578,6 +580,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) if(!A) dat += "Skipped over [APC] in invalid location, [APC.loc]." continue + LAZYSET(sub_areas_APC, A.type, get_sub_areas(A, FALSE)) if(!(A.type in areas_with_APC)) areas_with_APC.Add(A.type) else if(A.type in areas_all) @@ -585,10 +588,11 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) CHECK_TICK for(var/obj/machinery/airalarm/AA in GLOB.machines) - var/area/A = get_area(AA) + var/area/A = get_base_area(AA) if(!A) //Make sure the target isn't inside an object, which results in runtimes. dat += "Skipped over [AA] in invalid location, [AA.loc].
" continue + LAZYSET(sub_areas_air_alarm, A.type, get_sub_areas(A, FALSE)) if(!(A.type in areas_with_air_alarm)) areas_with_air_alarm.Add(A.type) CHECK_TICK @@ -638,8 +642,8 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) areas_with_camera.Add(A.type) CHECK_TICK - var/list/areas_without_APC = areas_all - areas_with_APC - var/list/areas_without_air_alarm = areas_all - areas_with_air_alarm + var/list/areas_without_APC = areas_all - (areas_with_APC + flatten_list(sub_areas_APC)) + var/list/areas_without_air_alarm = areas_all - (areas_with_air_alarm + flatten_list(sub_areas_air_alarm)) var/list/areas_without_RC = areas_all - areas_with_RC var/list/areas_without_light = areas_all - areas_with_light var/list/areas_without_LS = areas_all - areas_with_LS @@ -656,12 +660,18 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) dat += "

AREAS WITH MULTIPLE APCS:

" for(var/areatype in areas_with_multiple_APCs) dat += "[areatype]
" + if(sub_areas_APC[areatype]) + dat += "  SUB-AREAS:
  " + dat += jointext(sub_areas_APC[areatype], "
  ") CHECK_TICK if(areas_without_air_alarm.len) dat += "

AREAS WITHOUT AN AIR ALARM:

" for(var/areatype in areas_without_air_alarm) dat += "[areatype]
" + if(sub_areas_air_alarm[areatype]) + dat += "  SUB-AREAS:
  " + dat += jointext(sub_areas_air_alarm[areatype], "
  ") CHECK_TICK if(areas_without_RC.len) diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index 58ab9c6183..9ef04d8641 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -207,7 +207,7 @@ pixel_y = (dir & 3)? (dir == 1 ? -24 : 24) : 0 if(name == initial(name)) - name = "[get_area_name(src)] Air Alarm" + name = "[get_area_name(src, get_base_area = TRUE)] Air Alarm" power_change() set_frequency(frequency) @@ -250,7 +250,7 @@ "danger_level" = danger_level, ) - var/area/A = get_area(src) + var/area/A = get_base_area(src) data["atmos_alarm"] = A.atmosalm data["fire_alarm"] = A.fire @@ -386,7 +386,7 @@ send_signal(device_id, list("checks" = text2num(params["val"])^2), usr) . = TRUE if("set_external_pressure", "set_internal_pressure") - var/area/A = get_area(src) + var/area/A = get_base_area(src) var/target = input("New target pressure:", name, A.air_vent_info[device_id][(action == "set_external_pressure" ? "external" : "internal")]) as num|null if(!isnull(target) && !..()) send_signal(device_id, list("[action]" = target), usr) @@ -420,12 +420,12 @@ apply_mode() . = TRUE if("alarm") - var/area/A = get_area(src) + var/area/A = get_base_area(src) if(A.atmosalert(2, src)) post_alert(2) . = TRUE if("reset") - var/area/A = get_area(src) + var/area/A = get_base_area(src) if(A.atmosalert(0, src)) post_alert(0) . = TRUE @@ -456,7 +456,7 @@ return 0 /obj/machinery/airalarm/proc/refresh_all() - var/area/A = get_area(src) + var/area/A = get_base_area(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) @@ -507,7 +507,7 @@ return "Flood" /obj/machinery/airalarm/proc/apply_mode() - var/area/A = get_area(src) + var/area/A = get_base_area(src) switch(mode) if(AALARM_MODE_SCRUBBING) for(var/device_id in A.air_scrub_names) @@ -645,7 +645,7 @@ icon_state = "alarm1" var/overlay_state = AALARM_OVERLAY_OFF - var/area/A = get_area(src) + var/area/A = get_base_area(src) switch(max(danger_level, A.atmosalm)) if(0) add_overlay(AALARM_OVERLAY_GREEN) @@ -715,7 +715,7 @@ return var/datum/signal/alert_signal = new(list( - "zone" = get_area_name(src), + "zone" = get_area_name(src, get_base_area = TRUE), "type" = "Atmospheric" )) if(alert_level==2) @@ -728,7 +728,7 @@ frequency.post_signal(src, alert_signal, range = -1) /obj/machinery/airalarm/proc/apply_danger_level() - var/area/A = get_area(src) + var/area/A = get_base_area(src) var/new_area_danger_level = 0 for(var/obj/machinery/airalarm/AA in A) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index 75f2a60f80..c98204d274 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -124,7 +124,7 @@ id_tag = assign_uid_vents() /obj/machinery/atmospherics/components/unary/vent_pump/Destroy() - var/area/A = get_area(src) + var/area/A = get_base_area(src) if (A) A.air_vent_names -= id_tag A.air_vent_info -= id_tag @@ -312,7 +312,7 @@ "sigtype" = "status" )) - var/area/A = get_area(src) + var/area/A = get_base_area(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 diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index 8585471ea4..d31c35dd16 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -63,7 +63,7 @@ pixel_y = PIPING_LAYER_P_Y /obj/machinery/atmospherics/components/unary/vent_scrubber/Destroy() - var/area/A = get_area(src) + var/area/A = get_base_area(src) if (A) A.air_scrub_names -= id_tag A.air_scrub_info -= id_tag @@ -135,7 +135,7 @@ "sigtype" = "status" )) - var/area/A = get_area(src) + var/area/A = get_base_area(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 diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index 15a04235cc..1147042c8c 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -53,11 +53,11 @@ if(NONE) return FALSE if(POWER_REQ_ALL) - return !T || !A || ((!A.power_equip || isspaceturf(T)) && !is_type_in_list(loc, list(/obj/item, /obj/mecha))) + return !T || !A || ((!A.powered(EQUIP) || isspaceturf(T)) && !is_type_in_list(loc, list(/obj/item, /obj/mecha))) if(POWER_REQ_CLOCKCULT) for(var/obj/effect/clockwork/sigil/transmission/ST in range(src, SIGIL_ACCESS_RANGE)) return FALSE - return !T || !A || (!istype(T, /turf/open/floor/clockwork) && (!A.power_equip || isspaceturf(T)) && !is_type_in_list(loc, list(/obj/item, /obj/mecha))) + return !T || !A || (!istype(T, /turf/open/floor/clockwork) && (!A.powered(EQUIP) || isspaceturf(T)) && !is_type_in_list(loc, list(/obj/item, /obj/mecha))) /mob/living/silicon/ai/updatehealth() if(status_flags & GODMODE) @@ -100,7 +100,7 @@ sleep(50) var/turf/T = get_turf(src) var/area/AIarea = get_area(src) - if(AIarea && AIarea.power_equip) + if(AIarea && AIarea.powered(EQUIP)) if(!isspaceturf(T)) ai_restore_power() return @@ -120,7 +120,7 @@ var/PRP //like ERP with the code, at least this stuff is no more 4x sametext for (PRP=1, PRP<=4, PRP++) T = get_turf(src) - AIarea = get_area(src) + AIarea = get_base_area(src) if(AIarea) for (var/obj/machinery/power/apc/APC in AIarea) if (!(APC.stat & BROKEN)) @@ -134,7 +134,7 @@ to_chat(src, "Lost connection with the APC!") aiRestorePowerRoutine = POWER_RESTORATION_SEARCH_APC return - if(AIarea.power_equip) + if(AIarea.powered(EQUIP)) if(!isspaceturf(T)) ai_restore_power() return diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 51a9d8d62b..e691a30d3a 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -479,34 +479,36 @@ Difficulty: Very Hard NewTerrainTables = /obj/structure/table/abductor /obj/machinery/anomalous_crystal/theme_warp/ActivationReaction(mob/user, method) - if(..()) - var/area/A = get_area(src) - if(!A.outdoors && !(A in affected_targets)) - for(var/atom/Stuff in A) - if(isturf(Stuff)) - var/turf/T = Stuff - if((isspaceturf(T) || isfloorturf(T)) && NewTerrainFloors) - var/turf/open/O = T.ChangeTurf(NewTerrainFloors) - if(O.air) - var/datum/gas_mixture/G = O.air - G.copy_from_turf(O) - if(prob(florachance) && NewFlora.len && !is_blocked_turf(O, TRUE)) - var/atom/Picked = pick(NewFlora) - new Picked(O) - continue - if(iswallturf(T) && NewTerrainWalls) - T.ChangeTurf(NewTerrainWalls) - continue - if(istype(Stuff, /obj/structure/chair) && NewTerrainChairs) - var/obj/structure/chair/Original = Stuff - var/obj/structure/chair/C = new NewTerrainChairs(Original.loc) - C.setDir(Original.dir) - qdel(Stuff) - continue - if(istype(Stuff, /obj/structure/table) && NewTerrainTables) - new NewTerrainTables(Stuff.loc) - continue - affected_targets += A + . = ..() + if(!.) + return + for(var/i in get_sub_areas(src, include_base = TRUE)) + var/area/A = i + if(A.outdoors || (A in affected_targets)) + continue + affected_targets += A + for(var/stuff in A) + var/atom/target = stuff + if(isturf(target)) + var/turf/T = target + if((isspaceturf(T) || isfloorturf(T)) && NewTerrainFloors) + var/turf/open/O = T.ChangeTurf(NewTerrainFloors) + if(O.air) + var/datum/gas_mixture/G = O.air + G.copy_from_turf(O) + if(NewFlora.len && prob(florachance) && !is_blocked_turf(O, TRUE)) + var/atom/Picked = pick(NewFlora) + new Picked(O) + else if(iswallturf(T) && NewTerrainWalls) + T.ChangeTurf(NewTerrainWalls) + else if(NewTerrainChairs && istype(target, /obj/structure/chair)) + var/obj/structure/chair/Original = target + var/obj/structure/chair/C = new NewTerrainChairs(Original.loc) + C.setDir(Original.dir) + qdel(target) + else if(NewTerrainTables && istype(target, /obj/structure/table)) + new NewTerrainTables(target.loc) + qdel(target) /obj/machinery/anomalous_crystal/emitter //Generates a projectile when interacted with observer_desc = "This crystal generates a projectile when activated." diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm index 5bfabe376e..fa7103dc0d 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm @@ -170,7 +170,7 @@ Difficulty: Medium to_chat(user, "The staff is still recharging!") return - var/area/user_area = get_area(user) + var/area/user_area = get_base_area(user) var/turf/user_turf = get_turf(user) if(!user_area || !user_turf || (user_area.type in excluded_areas)) to_chat(user, "Something is preventing you from using the staff here.") diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 5e3888a8c5..ecb2d6c29d 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -56,6 +56,8 @@ integrity_failure = 50 var/damage_deflection = 10 resistance_flags = FIRE_PROOF + armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 100, "bomb" = 30, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 50) + req_access = list(ACCESS_ENGINE_EQUIP) interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON var/lon_range = 1.5 @@ -147,12 +149,39 @@ if(terminal) terminal.connect_to_network() -/obj/machinery/power/apc/New(turf/loc, var/ndir, var/building=0) - if (!req_access) - req_access = list(ACCESS_ENGINE_EQUIP) - if (!armor) - armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 100, "bomb" = 30, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 50) - ..() +/obj/machinery/power/apc/Initialize(mapload, ndir, building = FALSE) + . = ..() + var/area/A = get_base_area(src) + if(!building) + has_electronics = APC_ELECTRONICS_SECURED + // is starting with a power cell installed, create it and set its charge level + if(cell_type) + cell = new cell_type + cell.charge = start_charge * cell.maxcharge / 100 // (convert percentage to actual value) + + //if area isn't specified use current + if(areastring) + area = get_area_instance_from_text(areastring) + if(!area) + area = A + stack_trace("Bad areastring path for [src], [src.areastring]") + else if(isarea(A) && !areastring) + area = A + if(auto_name) + name = "\improper [A.name] APC" + update_icon() + + make_terminal() + + else + area = A + opened = APC_COVER_OPENED + operating = FALSE + name = "\improper [A.name] APC" + stat |= MAINT + update_icon() + addtimer(CALLBACK(src, .proc/update), 5) + GLOB.apcs_list += src wires = new /datum/wires/apc(src) @@ -163,9 +192,6 @@ src.tdir = dir // to fix Vars bug setDir(SOUTH) - if(auto_name) - name = "\improper [get_area(src)] APC" - switch(tdir) if(NORTH) pixel_y = 23 @@ -175,14 +201,6 @@ pixel_x = 24 if(WEST) pixel_x = -25 - if (building) - area = get_area(src) - opened = APC_COVER_OPENED - operating = FALSE - name = "[area.name] APC" - stat |= MAINT - src.update_icon() - addtimer(CALLBACK(src, .proc/update), 5) /obj/machinery/power/apc/Destroy() GLOB.apcs_list -= src @@ -216,32 +234,6 @@ terminal.setDir(tdir) terminal.master = src -/obj/machinery/power/apc/Initialize(mapload) - . = ..() - if(!mapload) - return - has_electronics = APC_ELECTRONICS_SECURED - // is starting with a power cell installed, create it and set its charge level - if(cell_type) - cell = new cell_type - cell.charge = start_charge * cell.maxcharge / 100 // (convert percentage to actual value) - - var/area/A = src.loc.loc - - //if area isn't specified use current - if(areastring) - src.area = get_area_instance_from_text(areastring) - if(!src.area) - src.area = A - stack_trace("Bad areastring path for [src], [src.areastring]") - else if(isarea(A) && src.areastring == null) - src.area = A - update_icon() - - make_terminal() - - addtimer(CALLBACK(src, .proc/update), 5) - /obj/machinery/power/apc/examine(mob/user) . = ..() if(stat & BROKEN) @@ -1376,7 +1368,7 @@ return for(var/A in GLOB.ai_list) var/mob/living/silicon/ai/I = A - if(get_area(I) == area) + if(get_base_area(I) == area) return failure_timer = max(failure_timer, round(duration)) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index cdbaa29a3b..782d9e89ed 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -294,7 +294,7 @@ cut_overlays() switch(status) // set icon_states if(LIGHT_OK) - var/area/A = get_area(src) + var/area/A = get_base_area(src) if(emergency_mode || (A && A.fire)) icon_state = "[base_state]_emergency" else @@ -323,7 +323,7 @@ var/CO = bulb_colour if(color) CO = color - var/area/A = get_area(src) + var/area/A = get_base_area(src) if (A && A.fire) CO = bulb_emergency_colour else if (nightshift_enabled) diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 58a259de3a..5f8d1e822b 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -382,6 +382,7 @@ return null /area/proc/get_apc() + var/target = master_area ? master_area : src for(var/obj/machinery/power/apc/APC in GLOB.apcs_list) - if(APC.area == src) + if(APC.area == target) return APC \ No newline at end of file diff --git a/code/modules/research/xenobiology/crossbreeding/consuming.dm b/code/modules/research/xenobiology/crossbreeding/consuming.dm index d6536f4fdd..e976016a0b 100644 --- a/code/modules/research/xenobiology/crossbreeding/consuming.dm +++ b/code/modules/research/xenobiology/crossbreeding/consuming.dm @@ -212,7 +212,7 @@ Consuming extracts: taste = "sugar and starlight" /obj/item/slime_cookie/bluespace/do_effect(mob/living/M, mob/user) - var/list/L = get_area_turfs(get_area(get_turf(M))) + var/list/L = get_sub_areas_turfs(get_area(M)) var/turf/target while (L.len && !target) var/I = rand(1, L.len) diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi index fe60cf6c0d63504c16c97738d39175d735f290fc..aad3e78590e9d275cf62bee4a4e1bea67b2ef47a 100644 GIT binary patch delta 36061 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 delta 35754 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 dominator can be spawned only on territory controlled by your gang!") return FALSE diff --git a/modular_citadel/code/game/machinery/firealarm.dm b/modular_citadel/code/game/machinery/firealarm.dm index 7c136f4e4d..cd55c70764 100644 --- a/modular_citadel/code/game/machinery/firealarm.dm +++ b/modular_citadel/code/game/machinery/firealarm.dm @@ -1,6 +1,6 @@ /obj/machinery/firealarm/alt_attack_hand(mob/user) if(can_interact(usr)) - var/area/A = get_area(src) + var/area/A = get_base_area(src) if(istype(A)) if(A.fire) reset()