diff --git a/code/game/area/depot-areas.dm b/code/game/area/depot-areas.dm index 4505b94375f..af83e031858 100644 --- a/code/game/area/depot-areas.dm +++ b/code/game/area/depot-areas.dm @@ -57,11 +57,26 @@ /area/syndicate_depot/core/proc/reset_alert() if(used_self_destruct) - return + for(var/obj/effect/overload/O in src) + new /obj/structure/fusionreactor(O.loc) + qdel(O) + + if(on_peaceful) + peaceful_mode(FALSE, TRUE) local_alarm = FALSE called_backup = FALSE + unlock_computers() used_self_destruct = FALSE + + run_started = FALSE + run_finished = FALSE + + guard_list = list() + hostile_list = list() + dead_list = list() + peaceful_list = list() + something_looted = FALSE detected_mech = FALSE detected_pod = FALSE @@ -69,11 +84,6 @@ updateicon() despawn_guards() - guard_list = list() - hostile_list = list() - dead_list = list() - peaceful_list = list() - alert_log += "Alert level reset." /area/syndicate_depot/core/proc/increase_alert(reason) @@ -97,6 +107,13 @@ if(on_peaceful) increase_alert("Thieves!") +/area/syndicate_depot/core/proc/armory_locker_looted() + if(!run_finished && !used_self_destruct) + if(shield_list.len) + activate_self_destruct("Armory compromised despite armory shield being online.", FALSE) + return + declare_finished() + /area/syndicate_depot/core/proc/turret_died() something_looted = TRUE if(on_peaceful) @@ -133,19 +150,12 @@ if(L.opened) L.close() if(!L.locked) - L.locked = 1 + L.locked = !L.locked L.req_access = list(access_syndicate_leader) L.update_icon() for(var/obj/machinery/computer/syndicate_depot/teleporter/P in src) if(!P.portal_enabled) P.toggle_portal() - for(var/obj/machinery/door/airlock/hatch/syndicate/vault/V in src) - if(!V.density) - V.close() - V.emergency = 0 - if(!V.locked) - V.locked = !V.locked - V.update_icon() else log_game("Depot visit: ended") alert_log += "Visitor mode ended." @@ -250,7 +260,7 @@ if(user) var/turf/T = get_turf(user) var/area/A = get_area(T) - var/log_msg = "[key_name(user)] has armed the depot self destruct device at [A.name] ([T.x],[T.y],[T.z])" + var/log_msg = "[key_name(user)] has triggered the depot self destruct at [A.name] ([T.x],[T.y],[T.z])" message_admins(log_msg) log_game(log_msg) playsound(user, 'sound/machines/Alarm.ogg', 100, 0, 0) @@ -271,13 +281,17 @@ for(var/obj/machinery/door/airlock/A in src) spawn(0) A.close() - if(A.density) + if(A.density && !A.locked) A.lock() /area/syndicate_depot/core/proc/lockout_computers() for(var/obj/machinery/computer/syndicate_depot/C in src) C.activate_security_lockout() +/area/syndicate_depot/core/proc/unlock_computers() + for(var/obj/machinery/computer/syndicate_depot/C in src) + C.security_lockout = FALSE + /area/syndicate_depot/core/proc/toggle_door_locks() for(var/obj/machinery/door/airlock/A in src) A.emergency = !A.emergency @@ -315,6 +329,18 @@ if(L.name == "syndi_depot_shield") var/obj/machinery/shieldwall/syndicate/S = new /obj/machinery/shieldwall/syndicate(L.loc) shield_list += S.UID() + for(var/obj/structure/closet/secure_closet/syndicate/depot/armory/L in src) + if(L.opened) + L.close() + if(!L.locked) + L.locked = !L.locked + L.update_icon() + for(var/obj/machinery/door/airlock/hatch/syndicate/vault/V in src) + if(!V.density) + V.close() + if(!V.locked) + V.locked = !V.locked + V.update_icon() /area/syndicate_depot/core/proc/shields_key_check() if(!shield_list.len) @@ -329,6 +355,14 @@ if(S) qdel(S) shield_list = list() + for(var/obj/structure/closet/secure_closet/syndicate/depot/armory/L in src) + if(L.locked) + L.locked = !L.locked + L.update_icon() + for(var/obj/machinery/door/airlock/hatch/syndicate/vault/V in src) + if(V.locked) + V.locked = !V.locked + V.update_icon() /area/syndicate_depot/core/proc/despawn_guards() for(var/mob/thismob in list_getmobs(guard_list)) diff --git a/code/game/objects/effects/spawners/random_spawners.dm b/code/game/objects/effects/spawners/random_spawners.dm index 668bb52b467..0ce91ae0860 100644 --- a/code/game/objects/effects/spawners/random_spawners.dm +++ b/code/game/objects/effects/spawners/random_spawners.dm @@ -264,6 +264,7 @@ /obj/effect/spawner/random_spawners/syndicate/loot/level4 name = "armory loot" + spawn_inside = /obj/structure/closet/secure_closet/syndicate/depot/armory // Loot schema: high-power weapons (m90, esword, ebow, revolver), devices that negate depot challenges (thermal glasses, chameleon device), explosives result = list(/obj/item/gun/projectile/automatic/c20r = 1, /obj/item/gun/projectile/automatic/m90 = 1, diff --git a/code/game/objects/structures/crates_lockers/closets/secure/depot.dm b/code/game/objects/structures/crates_lockers/closets/secure/depot.dm index f3cf8d67c13..58eb8de7bde 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/depot.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/depot.dm @@ -6,6 +6,7 @@ anchored = 1 health = 200 req_access = list() + var/is_armory = FALSE var/ignore_use = FALSE @@ -29,8 +30,10 @@ /obj/structure/closet/secure_closet/syndicate/depot/proc/loot_pickup() if(!ignore_use) var/area/syndicate_depot/core/depotarea = areaMaster - if(depotarea) + if(istype(depotarea)) depotarea.locker_looted() + if(is_armory) + depotarea.armory_locker_looted() /obj/structure/closet/secure_closet/syndicate/depot/attack_animal(mob/M) if(isanimal(M) && "syndicate" in M.faction) @@ -50,4 +53,8 @@ if(user.can_advanced_admin_interact()) ignore_use = TRUE toggle(user) - ignore_use = FALSE \ No newline at end of file + ignore_use = FALSE + +/obj/structure/closet/secure_closet/syndicate/depot/armory + req_access = list(access_syndicate) + is_armory = TRUE \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index 4f55094c3f6..7159d16bf91 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -204,15 +204,6 @@ alert_on_timeout = TRUE alert_on_shield_breach = TRUE -/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory/death() - if(istype(depotarea)) - if(depotarea.shield_list.len) - depotarea.activate_self_destruct("[src] has died while the armory shield is up.", FALSE) - else - depotarea.declare_finished() - return ..() - - /mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory/Initialize() . = ..() if(istype(depotarea))