Files
2020-08-18 23:29:04 -03:00

70 lines
2.4 KiB
Plaintext

SUBSYSTEM_DEF(bluespace_locker)
name = "Bluespace Locker"
flags = SS_NO_FIRE
var/obj/structure/closet/bluespace/internal/internal_locker = null
var/obj/structure/closet/bluespace/external/external_locker = null
/datum/controller/subsystem/bluespace_locker/Initialize()
bluespaceify_random_locker()
if(external_locker)
external_locker.take_contents()
return ..()
/datum/controller/subsystem/bluespace_locker/proc/bluespaceify_random_locker()
if(external_locker)
return
// basically any normal-looking locker that isn't a secure one
var/list/valid_lockers = typecacheof(typesof(/obj/structure/closet) - typesof(/obj/structure/closet/body_bag)\
- typesof(/obj/structure/closet/secure_closet) - typesof(/obj/structure/closet/cabinet)\
- typesof(/obj/structure/closet/cardboard) - typesof(/obj/structure/closet/crate)\
- typesof(/obj/structure/closet/supplypod) - typesof(/obj/structure/closet/stasis)\
- typesof(/obj/structure/closet/abductor) - typesof(/obj/structure/closet/bluespace), only_root_path = TRUE)
var/list/lockers_list = list()
for(var/obj/structure/closet/L in world)
if(is_station_level(L.z) && is_type_in_typecache(L, valid_lockers))
lockers_list += L
if(!lockers_list.len)
// Congratulations, you managed to destroy all the lockers somehow.
// Now let's make a new one.
var/targetturf = find_safe_turf()
if(!targetturf)
if(GLOB.blobstart.len > 0)
targetturf = get_turf(pick(GLOB.blobstart))
else
CRASH("Unable to find a blobstart landmark")
lockers_list += new /obj/structure/closet(targetturf)
var/obj/structure/closet/L = pick(lockers_list)
var/obj/structure/closet/bluespace/external/E = new(L.loc)
E.contents = L.contents
E.name = L.name
E.desc = L.desc
if(L.opened)
E.open()
E.icon = L.icon
E.icon_state = L.icon_state
E.icon_door = L.icon_door
E.icon_door_override = L.icon_door_override
E.icon_welded = L.icon_welded
qdel(L)
relink_lockers()
/datum/controller/subsystem/bluespace_locker/proc/relink_lockers()
if(!internal_locker)
return
//var/area/A = get_area(internal_locker)
//A.global_turf_object = external_locker
internal_locker.update_mirage()
if(!external_locker)
return
if(external_locker.opened)
internal_locker.close()
else
internal_locker.contents += external_locker.contents
internal_locker.open()
internal_locker.dump_contents()
internal_locker.update_icon()
external_locker.update_icon()