@@ -14,16 +14,30 @@ SUBSYSTEM_DEF(bluespace_locker)
1414 if (external_locker)
1515 return
1616 // basically any normal-looking locker that isn't a secure one
17- var /list /valid_lockers = typecacheof(typesof(/ obj / structure/ closet) - typesof(/ obj / structure/ closet/ body_bag)\
18- - typesof(/ obj / structure/ closet/ secure_closet) - typesof(/ obj / structure/ closet/ cabinet)\
19- - typesof(/ obj / structure/ closet/ cardboard) - typesof(/ obj / structure/ closet/ crate)\
20- - typesof(/ obj / structure/ closet/ supplypod) - typesof(/ obj / structure/ closet/ stasis)\
21- - typesof(/ obj / structure/ closet/ abductor) - typesof(/ obj / structure/ closet/ bluespace), only_root_path = TRUE )
17+ var /list /valid_lockers = typecacheof(typesof(/ obj / structure/ closet) - typesof(/ obj / structure/ closet/ body_bag) \
18+ - typesof(/ obj / structure/ closet/ secure_closet) - typesof(/ obj / structure/ closet/ cabinet) \
19+ - typesof(/ obj / structure/ closet/ cardboard) - typesof(/ obj / structure/ closet/ crate) \
20+ - typesof(/ obj / structure/ closet/ supplypod) - typesof(/ obj / structure/ closet/ stasis) \
21+ - typesof(/ obj / structure/ closet/ abductor) - typesof(/ obj / structure/ closet/ bluespace), only_root_path = TRUE )
22+ var /list /invalid_areas = typecacheof(list (/ area / bridge, / area / crew_quarters/ heads, / area / comms, / area / server, \
23+ / area / engine/ engine_smes, / area / engine/ gravity_generator, / area / teleporter, / area / gateway, / area / medical/ virology, \
24+ / area / security, / area / quartermaster/ qm, / area / storage/ eva, / area / ai_monitored, / area / tcommsat))
2225
2326 var /list /lockers_list = list ()
2427 for (var /obj /structure/closet/L in GLOB . lockers)
25- if (is_station_level(L. z) && is_type_in_typecache(L, valid_lockers))
26- lockers_list += L
28+ if (! is_station_level(L. z))
29+ continue
30+ if (! is_type_in_typecache(L, valid_lockers))
31+ continue
32+ var /area /A = get_area(L)
33+ if (is_type_in_typecache(A, invalid_areas))
34+ continue
35+ if (L. secure || L. welded || L. wall_mounted)
36+ continue
37+ var /score = 1
38+ if (L. locked)
39+ score -= 0.25
40+ lockers_list[L] = score
2741 if (! lockers_list. len)
2842 // Congratulations, you managed to destroy all the lockers somehow.
2943 // Now let's make a new one.
@@ -33,8 +47,8 @@ SUBSYSTEM_DEF(bluespace_locker)
3347 targetturf = get_turf(pick (GLOB . blobstart))
3448 else
3549 CRASH (" Unable to find a blobstart landmark" )
36- lockers_list += new / obj / structure/ closet(targetturf)
37- var /obj /structure/closet/L = pick (lockers_list)
50+ lockers_list[ new / obj / structure/ closet(targetturf)] = 1
51+ var /obj /structure/closet/L = pickweight (lockers_list)
3852
3953 var /obj /structure/closet/bluespace/external/E = new (L. loc)
4054 E. contents = L. contents
0 commit comments