/* * Pod computer -- controls launch of escape pods * * Mass driver - launches the pods * */ /* * The pod computer */ obj/machinery/computer/pod name = "Pod Launch Control" icon = 'escapepod.dmi' icon_state = "computer" var id = 1.0 // ID of mass driver(s) and poddoors to control obj/machinery/mass_driver/connected = null // the controlled mass driver timing = 0.0 // true if counting down before launch time = 30.0 // time (seconds) to count down // Note: Only one massdriver is located via connected, but all drivers with matching ID are fired together // Create a new pod computer // Locate and set a massdriver with the same ID New() ..() spawn( 5 ) for(var/obj/machinery/mass_driver/M in machines) if (M.id == src.id) src.connected = M // Called to fire the driver // Open the poddoors with same ID, fire the matching mass drivers, then close the doors proc/alarm() if(stat & (NOPOWER|BROKEN)) return if (!( src.connected )) var/list/observers = viewers(null, null) for (var/mob/who in observers) who.client_mob() << "Cannot locate mass driver connector. Cancelling firing sequence!" return for(var/obj/machinery/door/poddoor/M in machines) if (M.id == src.id) spawn( 0 ) M.openpod() return sleep(20) // Note updated from 40.93.3S source - all massdrivers with same ID are fired // (Previously, only the connected driver was fired) for(var/obj/machinery/mass_driver/M in machines) if(M.id == src.id) M.power = src.connected.power M.drive() // sleep(50) for(var/obj/machinery/door/poddoor/M in machines) if (M.id == src.id) spawn( 0 ) M.closepod() return // Monkey interact same as human attack_paw(mob/user) return src.attack_hand(user) // AI interact attack_ai(mob/user) return src.attack_hand(user) // Human interact, show window attack_hand(mob/user) if(stat & (NOPOWER|BROKEN)) return var/dat = "Mass Driver Controls" user.machine = src var/d2 if (src.timing) d2 = "Stop Time Launch" else d2 = "Initiate Time Launch" var/second = src.time % 60 var/minute = (src.time - second) / 60 dat += {"
Timer System: [d2] Time Left: [(minute ? "[minute]:" : null)][second] - - + +"} if (src.connected) var/temp = "" var/list/L = list( 0.25, 0.5, 1, 2, 4, 8, 16 ) for(var/t in L) if (t == src.connected.power) temp += "[t] " else temp += "[t] " dat += "
\nPower Level: [temp]
\nFiring Sequence
\nTest Fire Driver
\nToggle Outer Door
" else dat += "
\nToggle Outer Door
" dat += "

Close
" user.client_mob() << browse(dat, "window=computer;size=400x500") // Handle topic links from interaction window Topic(href, href_list) ..() if(stat & (NOPOWER|BROKEN)) usr.client_mob() << browse(null, "window=computer") return if (usr.restrained() || usr.lying) if (!istype(usr, /mob/ai)) return if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) if (!istype(usr, /mob/ai)) if (!istype(usr, /mob/drone)) usr.client_mob() << "\red You don't have the dexterity to do this!" return if ((usr.stat || usr.restrained())) if (!istype(usr, /mob/ai)) return if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf))) || (istype(usr, /mob/ai))) usr.machine = src if (href_list["power"]) var/t = text2num(href_list["power"]) t = min(max(0.25, t), 16) if (src.connected) src.connected.power = t else if (href_list["alarm"]) src.alarm() else if (href_list["time"]) src.timing = text2num(href_list["time"]) else if (href_list["tp"]) var/tp = text2num(href_list["tp"]) src.time += tp src.time = min(max(round(src.time), 0), 120) else if (href_list["door"]) for(var/obj/machinery/door/poddoor/M in machines) if (M.id == src.id) if (M.density) spawn( 0 ) M.openpod() return else spawn( 0 ) M.closepod() return src.add_fingerprint(usr) src.updateDialog() return // Timed process // Countdown timer and fire when zero reached process() if(stat & (NOPOWER|BROKEN) ) return use_power(250) if (src.timing) if (src.time > 0) src.time = round(src.time) - 1 else alarm() src.time = 0 src.timing = 0 src.updateDialog() /* * The mass driver */ obj/machinery/mass_driver name = "mass driver" icon = 'stationobjs.dmi' icon_state = "mass_driver" anchored = 1 var power = 1.0 // The power level to launch the pod id = 1.0 // ID of the mass driver. Pod computer must have matching ID. // Fire the driver // All objects at the location (that have the DRIVABLE flag) are launched in the direction of the driver // Show the firing animation proc/drive(amount) if(stat & NOPOWER) return use_power(500) for(var/obj/O in src.loc) if (O.flags & DRIVABLE) O.throwing = 1 O.throwspeed = 100 spawn( 0 ) O.throwing(src.dir, src.power) return flick("mass_driver1", src)