#define ENGINE_EJECT_Z 6 /turf/station/engine/attack_paw(var/mob/user as mob) return src.attack_hand(user) /turf/station/engine/attack_hand(var/mob/user as mob) if ((!( user.canmove ) || user.restrained() || !( user.pulling ))) return if (user.pulling.anchored) return if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) return if (ismob(user.pulling)) var/mob/M = user.pulling var/mob/t = M.pulling M.pulling = null step(user.pulling, get_dir(user.pulling.loc, src)) M.pulling = t else step(user.pulling, get_dir(user.pulling.loc, src)) return /turf/station/engine/attackby(obj/item/weapon/C as obj, mob/user as mob) if (istype(C, /obj/item/weapon/pipe) ) var/obj/item/weapon/pipe/P = C P.turf_place(src, user) /turf/station/engine/floor/ex_act(severity) switch(severity) if(1.0) var/turf/space/S = src.ReplaceWithSpace() S.buildlinks() del(src) return if(2.0) if (prob(50)) var/turf/space/S = src.ReplaceWithSpace() S.buildlinks() del(src) return else return /turf/station/engine/floor/blob_act() return /datum/engine_eject/proc/ejectstart() if (!( src.status )) if (src.timeleft <= 0) src.timeleft = 60 world << "\red Alert: Ejection Sequence for Engine Module has been engaged." world << text("\red Ejection Time in T-[] seconds!", src.timeleft) src.resetting = 0 var/list/EA = engine_areas() for(var/area/A in EA) A.eject = 1 A.updateicon() src.status = 1 for(var/obj/machinery/computer/engine/E in machines) E.icon_state = "engaging" spawn( 0 ) src.countdown() return return /datum/engine_eject/proc/resetcount() if (!( src.status )) src.resetting = 1 sleep(50) if (src.resetting) src.timeleft = 60 world << "\red Alert: Ejection Sequence Countdown for Engine Module has been reset." return /datum/engine_eject/proc/countdone() src.status = -1.0 var/list/E = engine_areas() var/list/engineturfs = list() for(var/area/EA in E) EA.eject = 0 EA.updateicon() for(var/turf/ET in EA) engineturfs += ET defer_powernet_rebuild = 1 for(var/turf/T in engineturfs) var/turf/S = new T.type( locate(T.x, T.y, ENGINE_EJECT_Z) ) var/area/A = T.loc for(var/atom/movable/AM as mob|obj in T) AM.loc = S S.oxygen = T.oxygen S.oldoxy = T.oldoxy S.tmpoxy = T.tmpoxy S.poison = T.poison S.oldpoison = T.oldpoison S.tmppoison = T.tmppoison S.co2 = T.co2 S.oldco2 = T.oldco2 S.tmpco2 = T.tmpco2 S.sl_gas = T.sl_gas S.osl_gas = T.osl_gas S.tsl_gas = T.tsl_gas S.n2 = T.n2 S.on2 = T.on2 S.tn2 = T.tn2 S.temp = T.temp S.ttemp = T.ttemp S.otemp = T.otemp S.firelevel = T.firelevel S.buildlinks() A.contents += S var/turf/P = new T.type( locate(T.x, T.y, T.z) ) var/area/D = locate(/area/dummy) D.contents += P //T = null del(T) P.buildlinks() defer_powernet_rebuild = 0 makepowernets() world << "\red Engine Ejected!" for(var/obj/machinery/computer/engine/CE in machines) CE.icon_state = "engaged" return /datum/engine_eject/proc/stopcount() if (src.status > 0) src.status = 0 world << "\red Alert: Ejection Sequence for Engine Module has been disengaged!" var/list/E = engine_areas() for(var/area/A in E) A.eject = 0 A.updateicon() for(var/obj/machinery/computer/engine/CE in machines) CE.icon_state = null return /datum/engine_eject/proc/countdown() if (src.timeleft <= 0) spawn( 0 ) countdone() return return if (src.status > 0) src.timeleft-- if ((src.timeleft <= 15 || src.timeleft == 30)) world << text("\red [] seconds until engine ejection.", src.timeleft) spawn( 10 ) src.countdown() return return //returns a list of areas that are under /area/engine /datum/engine_eject/proc/engine_areas() var/list/L = list() for(var/area/A in world) if(istype(A, /area/engine)) L += A return L