mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 03:57:13 +01:00
@@ -57,22 +57,32 @@
|
||||
/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
|
||||
|
||||
despawn_guards()
|
||||
hostile_list = list()
|
||||
dead_list = list()
|
||||
peaceful_list = list()
|
||||
|
||||
something_looted = FALSE
|
||||
detected_mech = FALSE
|
||||
detected_pod = FALSE
|
||||
detected_double_agent = FALSE
|
||||
updateicon()
|
||||
despawn_guards()
|
||||
|
||||
guard_list = list()
|
||||
hostile_list = list()
|
||||
dead_list = list()
|
||||
peaceful_list = list()
|
||||
|
||||
alert_log += "Alert level reset."
|
||||
|
||||
@@ -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,15 +260,17 @@
|
||||
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)
|
||||
else
|
||||
log_game("Depot self destruct activated.")
|
||||
if(reactor)
|
||||
reactor.overload(containment_failure)
|
||||
if(!reactor.has_overloaded)
|
||||
reactor.overload(containment_failure)
|
||||
else
|
||||
log_debug("Depot: [src] called activate_self_destruct with no reactor.");
|
||||
message_admins("<span class='adminnotice'>Syndicate Depot lacks reactor to initiate self-destruct. Must be destroyed manually.</span>")
|
||||
updateicon()
|
||||
|
||||
@@ -269,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
|
||||
@@ -313,6 +329,12 @@
|
||||
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()
|
||||
|
||||
/area/syndicate_depot/core/proc/shields_key_check()
|
||||
if(!shield_list.len)
|
||||
@@ -327,6 +349,10 @@
|
||||
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()
|
||||
|
||||
/area/syndicate_depot/core/proc/despawn_guards()
|
||||
for(var/mob/thismob in list_getmobs(guard_list))
|
||||
|
||||
@@ -305,6 +305,10 @@
|
||||
/atom/proc/rpd_act()
|
||||
return
|
||||
|
||||
/atom/proc/rpd_blocksusage()
|
||||
// Atoms that return TRUE prevent RPDs placing any kind of pipes on their turf.
|
||||
return FALSE
|
||||
|
||||
/atom/proc/hitby(atom/movable/AM, skipcatch, hitpush, blocked)
|
||||
if(density && !has_gravity(AM)) //thrown stuff bounces off dense stuff in no grav, unless the thrown stuff ends up inside what it hit(embedding, bola, etc...).
|
||||
addtimer(CALLBACK(src, .proc/hitby_react, AM), 2)
|
||||
|
||||
@@ -138,6 +138,7 @@
|
||||
if(depotarea)
|
||||
depotarea.toggle_door_locks(src)
|
||||
to_chat(user, "<span class='notice'>Door locks toggled.</span>")
|
||||
playsound(user, sound_yes, 50, 0)
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/doors/secondary(mob/user, subcommand)
|
||||
if(..())
|
||||
@@ -145,6 +146,7 @@
|
||||
if(depotarea)
|
||||
depotarea.toggle_falsewalls(src)
|
||||
to_chat(user, "<span class='notice'>False walls toggled.</span>")
|
||||
playsound(user, sound_yes, 50, 0)
|
||||
|
||||
|
||||
// Engineering AKA self destruct computer, no useful functions, just a trap for the people who can't resist pushing dangerous-sounding buttons.
|
||||
@@ -167,9 +169,9 @@
|
||||
if(depotarea.used_self_destruct)
|
||||
playsound(user, sound_no, 50, 0)
|
||||
return
|
||||
playsound(user, sound_click, 20, 1)
|
||||
if(depotarea)
|
||||
depotarea.activate_self_destruct("Fusion reactor containment field disengaged. All hands, evacuate. All hands, evacuate!", TRUE, user)
|
||||
playsound(user, sound_click, 20, 1)
|
||||
|
||||
|
||||
// Shield computer, used to manipulate base shield, and armory shield
|
||||
@@ -285,6 +287,7 @@
|
||||
to_chat(user, "<span class='warning'>[src] requires authentication with syndicate codewords, which you do not know.</span>")
|
||||
raise_alert("Detected unauthorized access by [user] to [src]!")
|
||||
updateUsrDialog()
|
||||
playsound(user, sound_yes, 50, 0)
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/syndiecomms/secondary(mob/user, subcommand)
|
||||
if(..())
|
||||
@@ -319,6 +322,7 @@
|
||||
else
|
||||
to_chat(user, "<span class='warning'>ERROR: [src] is unable to uplink to depot network.</span>")
|
||||
updateUsrDialog()
|
||||
playsound(user, sound_yes, 50, 0)
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/syndiecomms/proc/grant_syndie_faction(mob/user)
|
||||
user.faction += "syndicate"
|
||||
@@ -432,6 +436,7 @@
|
||||
var/bresult = mybeacon.toggle()
|
||||
to_chat(user, "<span class='notice'>Syndicate Teleporter Beacon: [bresult ? "<span class='green'>ON</span>" : "<span class='red'>OFF</span>"]</span>")
|
||||
updateUsrDialog()
|
||||
playsound(user, sound_yes, 50, 0)
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/teleporter/secondary(mob/user)
|
||||
if(..())
|
||||
@@ -444,6 +449,7 @@
|
||||
toggle_portal()
|
||||
to_chat(user, "<span class='notice'>Outgoing Teleport Portal: [portal_enabled ? "<span class='green'>ON</span>" : "<span class='red'>OFF</span>"]</span>")
|
||||
updateUsrDialog()
|
||||
playsound(user, sound_yes, 50, 0)
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/teleporter/proc/toggle_portal()
|
||||
portal_enabled = !portal_enabled
|
||||
@@ -507,6 +513,7 @@
|
||||
if(depotarea)
|
||||
depotarea.reset_alert()
|
||||
to_chat(user, "Alert level reset.")
|
||||
playsound(user, sound_yes, 50, 0)
|
||||
|
||||
/obj/machinery/computer/syndicate_depot/aiterminal/secondary(mob/user)
|
||||
if(..())
|
||||
@@ -516,4 +523,5 @@
|
||||
new /obj/effect/portal(get_turf(B))
|
||||
to_chat(user, "[B] has been recalled.")
|
||||
qdel(B)
|
||||
raise_alert("Sentry bot removed via emergency recall.")
|
||||
raise_alert("Sentry bot removed via emergency recall.")
|
||||
playsound(user, sound_yes, 50, 0)
|
||||
@@ -140,6 +140,7 @@
|
||||
//update the name and icon of the pipe item depending on the type
|
||||
|
||||
/obj/item/pipe/rpd_act(mob/user, obj/item/rpd/our_rpd)
|
||||
. = TRUE
|
||||
if(our_rpd.mode == RPD_ROTATE_MODE)
|
||||
rotate()
|
||||
else if(our_rpd.mode == RPD_FLIP_MODE)
|
||||
@@ -147,7 +148,7 @@
|
||||
else if(our_rpd.mode == RPD_DELETE_MODE)
|
||||
our_rpd.delete_single_pipe(user, src)
|
||||
else
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/pipe/proc/update(var/obj/machinery/atmospherics/make_from)
|
||||
name = "[get_pipe_name(pipe_type, PIPETYPE_ATMOS)] fitting"
|
||||
|
||||
@@ -1013,15 +1013,14 @@ var/list/turret_icons
|
||||
check_anomalies = 1
|
||||
check_synth = 1
|
||||
ailock = 1
|
||||
var/area/syndicate_depot/core/depotarea
|
||||
|
||||
/obj/machinery/porta_turret/syndicate/die()
|
||||
. = ..()
|
||||
var/area/syndicate_depot/core/depotarea = areaMaster
|
||||
if(istype(depotarea))
|
||||
depotarea.turret_died()
|
||||
|
||||
/obj/machinery/porta_turret/syndicate/shootAt(mob/living/target)
|
||||
var/area/syndicate_depot/core/depotarea = areaMaster
|
||||
if(istype(depotarea))
|
||||
depotarea.list_add(target, depotarea.hostile_list)
|
||||
depotarea.declare_started()
|
||||
|
||||
@@ -541,6 +541,8 @@
|
||||
/obj/machinery/shieldwall/attack_hand(mob/user as mob)
|
||||
return
|
||||
|
||||
/obj/machinery/shieldwall/rpd_blocksusage()
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/shieldwall/process()
|
||||
if(needs_power)
|
||||
|
||||
@@ -14,14 +14,12 @@
|
||||
/obj/effect/mine/Crossed(AM as mob|obj)
|
||||
if(!isliving(AM))
|
||||
return
|
||||
if(isanimal(AM))
|
||||
var/mob/living/simple_animal/SA = AM
|
||||
if(faction && (faction in SA.faction))
|
||||
return
|
||||
if(!SA.flying)
|
||||
triggermine(SA)
|
||||
else
|
||||
triggermine(AM)
|
||||
var/mob/living/M = AM
|
||||
if(faction && (faction in M.faction))
|
||||
return
|
||||
if(M.flying)
|
||||
return
|
||||
triggermine(M)
|
||||
|
||||
/obj/effect/mine/proc/triggermine(mob/living/victim)
|
||||
if(triggered)
|
||||
@@ -34,6 +32,11 @@
|
||||
triggered = 1
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/mine/ex_act(severity)
|
||||
// Necessary because, as effects, they have infinite health, and wouldn't be destroyed otherwise.
|
||||
// Also, they're pressure-sensitive mines, it makes sense that an explosion (wave of pressure) triggers/destroys them.
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/mine/explosive
|
||||
name = "explosive mine"
|
||||
var/range_devastation = 0
|
||||
|
||||
@@ -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,
|
||||
@@ -299,10 +300,9 @@
|
||||
/obj/structure/falsewall/reinforced = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/layout/door/vault
|
||||
name = "60pc vaultdoor 20pc falsewall 20pc wall"
|
||||
result = list(/obj/machinery/door/airlock/hatch/syndicate/vault = 6,
|
||||
/turf/simulated/wall/r_wall = 2,
|
||||
/obj/structure/falsewall/reinforced = 2)
|
||||
name = "80pc vaultdoor 20pc wall"
|
||||
result = list(/obj/machinery/door/airlock/hatch/syndicate/vault = 4,
|
||||
/turf/simulated/wall/r_wall = 1)
|
||||
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/layout/spacepod
|
||||
|
||||
@@ -192,7 +192,27 @@ var/list/pipemenu = list(
|
||||
return
|
||||
if(world.time < lastused + spawndelay)
|
||||
return
|
||||
target.rpd_act(user, src) //Handle RPD effects in separate procs
|
||||
|
||||
|
||||
var/turf/T = get_turf(target)
|
||||
if(target != T)
|
||||
// We only check the rpd_act of the target if it isn't the turf, because otherwise
|
||||
// (A) blocked turfs can be acted on, and (B) unblocked turfs get acted on twice.
|
||||
if(target.rpd_act(user, src) == TRUE)
|
||||
// If the object we are clicking on has a valid RPD interaction for just that specific object, do that and nothing else.
|
||||
// Example: clicking on a pipe with a RPD in rotate mode should rotate that pipe and ignore everything else on the tile.
|
||||
return
|
||||
|
||||
// If we get this far, we have to check every object in the tile, to make sure that none of them block RPD usage on this tile.
|
||||
// This is done by calling rpd_blocksusage on every /obj in the tile. If any block usage, fail at this point.
|
||||
|
||||
for(var/obj/O in T)
|
||||
if(O.rpd_blocksusage() == TRUE)
|
||||
to_chat(user, "<span class='warning'>[O] blocks the [src]!</span>")
|
||||
return
|
||||
|
||||
// If we get here, then we're effectively acting on the turf, probably placing a pipe.
|
||||
T.rpd_act(user, src)
|
||||
|
||||
#undef RPD_COOLDOWN_TIME
|
||||
#undef RPD_WALLBUILD_TIME
|
||||
|
||||
@@ -71,10 +71,6 @@
|
||||
SSnanoui.close_uis(src)
|
||||
return ..()
|
||||
|
||||
/obj/rpd_act(mob/user, obj/item/rpd/our_rpd)
|
||||
var/turf/T = get_turf(src) //This preserves RPD behaviour on specific turfs
|
||||
T.rpd_act(user, our_rpd)
|
||||
|
||||
/obj/proc/process()
|
||||
set waitfor = 0
|
||||
processing_objects.Remove(src)
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
anchored = 1
|
||||
health = 200
|
||||
req_access = list()
|
||||
var/is_armory = FALSE
|
||||
var/ignore_use = FALSE
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot/New()
|
||||
@@ -26,9 +28,12 @@
|
||||
. = ..()
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot/proc/loot_pickup()
|
||||
var/area/syndicate_depot/core/depotarea = areaMaster
|
||||
if(depotarea)
|
||||
depotarea.locker_looted()
|
||||
if(!ignore_use)
|
||||
var/area/syndicate_depot/core/depotarea = areaMaster
|
||||
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)
|
||||
@@ -36,10 +41,26 @@
|
||||
return
|
||||
return ..(M)
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/rcs))
|
||||
to_chat(user, "<span class='warning'>Bluespace interference prevents the [W] from locking onto [src]!</span>")
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot/emp_act(severity)
|
||||
return
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot/togglelock(mob/user)
|
||||
. = ..()
|
||||
if(!locked)
|
||||
loot_pickup()
|
||||
loot_pickup()
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot/attack_ghost(mob/user)
|
||||
if(user.can_advanced_admin_interact())
|
||||
ignore_use = TRUE
|
||||
toggle(user)
|
||||
ignore_use = FALSE
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot/armory
|
||||
req_access = list(access_syndicate)
|
||||
is_armory = TRUE
|
||||
@@ -7,15 +7,24 @@
|
||||
anchored = 1
|
||||
max_integrity = 50
|
||||
var/area/syndicate_depot/core/depotarea
|
||||
var/has_overloaded = FALSE
|
||||
|
||||
/obj/structure/fusionreactor/Initialize()
|
||||
. = ..()
|
||||
..()
|
||||
depotarea = areaMaster
|
||||
if(depotarea)
|
||||
if(istype(depotarea))
|
||||
depotarea.reactor = src
|
||||
return INITIALIZE_HINT_LATELOAD
|
||||
|
||||
/obj/structure/fusionreactor/LateInitialize()
|
||||
for(var/obj/machinery/porta_turret/syndicate/T in range(50, loc))
|
||||
if(!istype(T.depotarea))
|
||||
T.depotarea = depotarea
|
||||
|
||||
/obj/structure/fusionreactor/Destroy()
|
||||
if(depotarea)
|
||||
if(istype(depotarea))
|
||||
if(!has_overloaded)
|
||||
overload(TRUE, TRUE)
|
||||
depotarea.reactor = null
|
||||
..()
|
||||
|
||||
@@ -30,7 +39,7 @@
|
||||
healthcheck()
|
||||
|
||||
/obj/structure/fusionreactor/proc/healthcheck()
|
||||
if(obj_integrity <= 0)
|
||||
if(obj_integrity <= 0 && istype(depotarea))
|
||||
overload(TRUE)
|
||||
|
||||
/obj/structure/fusionreactor/attackby(obj/item/I, mob/user, params)
|
||||
@@ -47,13 +56,20 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/structure/fusionreactor/proc/overload(containment_failure)
|
||||
/obj/structure/fusionreactor/proc/overload(containment_failure = FALSE, skip_qdel = FALSE)
|
||||
if(has_overloaded)
|
||||
return
|
||||
has_overloaded = TRUE
|
||||
if(istype(depotarea) && !depotarea.used_self_destruct)
|
||||
depotarea.activate_self_destruct("Fusion reactor cracked open. Core loose!", TRUE)
|
||||
var/obj/effect/overload/O = new /obj/effect/overload(get_turf(src))
|
||||
if(containment_failure)
|
||||
playsound(loc, 'sound/machines/Alarm.ogg', 100, 0, 0)
|
||||
O.deliberate = TRUE
|
||||
O.max_cycles = 6
|
||||
qdel(src)
|
||||
if(!skip_qdel)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/effect/overload
|
||||
icon = 'icons/obj/tesla_engine/energy_ball.dmi'
|
||||
|
||||
@@ -17,12 +17,12 @@
|
||||
if(announce)
|
||||
event_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure", new_sound = 'sound/AI/poweroff.ogg')
|
||||
|
||||
var/list/skipped_areas = list(/area/turret_protected/ai, /area/syndicate_depot)
|
||||
var/list/skipped_areas_apc = list(/area/engine/engineering, /area/syndicate_depot)
|
||||
var/list/skipped_areas = list(/area/turret_protected/ai)
|
||||
var/list/skipped_areas_apc = list(/area/engine/engineering)
|
||||
|
||||
for(var/obj/machinery/power/smes/S in machines)
|
||||
var/area/current_area = get_area(S)
|
||||
if(current_area.type in skipped_areas || !is_station_level(S.z))
|
||||
if((current_area.type in skipped_areas) || !is_station_level(S.z))
|
||||
continue
|
||||
S.last_charge = S.charge
|
||||
S.last_output_attempt = S.output_attempt
|
||||
@@ -35,26 +35,26 @@
|
||||
|
||||
for(var/obj/machinery/power/apc/C in apcs)
|
||||
var/area/current_area = get_area(C)
|
||||
if(current_area.type in skipped_areas_apc || !is_station_level(C.z))
|
||||
if((current_area.type in skipped_areas_apc) || !is_station_level(C.z))
|
||||
continue
|
||||
if(C.cell)
|
||||
C.cell.charge = 0
|
||||
|
||||
/proc/power_restore(var/announce = 1)
|
||||
var/list/skipped_areas = list(/area/turret_protected/ai, /area/syndicate_depot)
|
||||
var/list/skipped_areas_apc = list(/area/engine/engineering, /area/syndicate_depot)
|
||||
var/list/skipped_areas = list(/area/turret_protected/ai)
|
||||
var/list/skipped_areas_apc = list(/area/engine/engineering)
|
||||
|
||||
if(announce)
|
||||
event_announcement.Announce("Power has been restored to [station_name()]. We apologize for the inconvenience.", "Power Systems Nominal", new_sound = 'sound/AI/poweron.ogg')
|
||||
for(var/obj/machinery/power/apc/C in apcs)
|
||||
var/area/current_area = get_area(C)
|
||||
if(current_area.type in skipped_areas_apc || !is_station_level(C.z))
|
||||
if((current_area.type in skipped_areas_apc) || !is_station_level(C.z))
|
||||
continue
|
||||
if(C.cell)
|
||||
C.cell.charge = C.cell.maxcharge
|
||||
for(var/obj/machinery/power/smes/S in machines)
|
||||
var/area/current_area = get_area(S)
|
||||
if(current_area.type in skipped_areas || !is_station_level(S.z))
|
||||
if((current_area.type in skipped_areas) || !is_station_level(S.z))
|
||||
continue
|
||||
S.charge = S.last_charge
|
||||
S.output_attempt = S.last_output_attempt
|
||||
|
||||
@@ -51,7 +51,10 @@
|
||||
var/damage = O.force
|
||||
if(O.damtype == STAMINA)
|
||||
damage = 0
|
||||
health -= damage
|
||||
if(force_threshold && damage < force_threshold)
|
||||
visible_message("<span class='boldwarning'>[src] is unharmed by [O]!</span>")
|
||||
return
|
||||
adjustHealth(damage)
|
||||
visible_message("<span class='boldwarning'>[src] has been attacked with the [O] by [user]. </span>")
|
||||
playsound(loc, O.hitsound, 25, 1, -1)
|
||||
else
|
||||
@@ -125,6 +128,9 @@
|
||||
seen_revived_enemy = TRUE
|
||||
raise_alert("[name] reports intruder [target] has returned from death!")
|
||||
depotarea.list_remove(target, depotarea.dead_list)
|
||||
if(!atoms_share_level(src, target) && prob(20))
|
||||
// This prevents someone from aggroing a depot mob, then hiding in a locker, perfectly safe, while the mob stands there getting killed by their friends.
|
||||
LoseTarget()
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/handle_automated_action()
|
||||
if(seen_enemy)
|
||||
@@ -134,6 +140,14 @@
|
||||
if(scan_cycles >= 15 && istype(depotarea))
|
||||
scan_cycles = 0
|
||||
if(!atoms_share_level(src, spawn_turf))
|
||||
if(istype(loc, /obj/structure/closet))
|
||||
var/obj/structure/closet/O = loc
|
||||
forceMove(get_turf(src))
|
||||
visible_message("<span class='boldwarning'>[src] smashes their way out of [O]!</span>")
|
||||
qdel(O)
|
||||
raise_alert("[src] reported being trapped in a locker.")
|
||||
raised_alert = FALSE
|
||||
return
|
||||
if(alert_on_spacing)
|
||||
raise_alert("[src] lost in space.")
|
||||
death()
|
||||
@@ -196,12 +210,6 @@
|
||||
alert_on_timeout = TRUE
|
||||
alert_on_shield_breach = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory/death()
|
||||
if(depotarea)
|
||||
depotarea.declare_finished()
|
||||
return ..()
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory/Initialize()
|
||||
. = ..()
|
||||
if(istype(depotarea))
|
||||
|
||||
@@ -258,6 +258,7 @@
|
||||
return
|
||||
|
||||
/obj/structure/disposalconstruct/rpd_act(mob/user, obj/item/rpd/our_rpd)
|
||||
. = TRUE
|
||||
if(our_rpd.mode == RPD_ROTATE_MODE)
|
||||
rotate()
|
||||
else if(our_rpd.mode == RPD_FLIP_MODE)
|
||||
@@ -265,4 +266,4 @@
|
||||
else if(our_rpd.mode == RPD_DELETE_MODE)
|
||||
our_rpd.delete_single_pipe(user, src)
|
||||
else
|
||||
..()
|
||||
return ..()
|
||||
|
||||
Reference in New Issue
Block a user