/obj/machinery/sim/transmitter name = "Sim Mainframe" desc = "Controls the simulation room and V-space" icon = 'icons/misc/simroom.dmi' icon_state = "mastercomp" anchored = 1 density = 1 var/active = 1 var/id = 1 var/vspace_id = 1 var/network = "none" var/linked_space = null var/list/programs = list() //loaded programs var/list/chairs = list() //Chairs that are ran by this machine var/list/disks = list() //Disks inside the machine /* /obj/machinery/sim/transmitter/New() spawn(10) Connect() ..() */ /obj/machinery/sim/transmitter/process() if(stat & (NOPOWER|BROKEN)) src.active = 0 for(var/obj/machinery/sim/chair/C in orange(9,src)) if(!C.active) continue if(C.con_user) C.con_user.network_device = null C.active = 0 return else if(!active) src.active = 1 use_power(3000) // src.updateDialog() /* /obj/machinery/sim/transmitter/proc/Connect() for(var/obj/machinery/sim/chair/C in machines) if(C.id == src.id) chairs.Add(C) return /obj/machinery/sim/transmitter/attack_ai(mob/user) return // add_fingerprint(user) // if(stat & (BROKEN|NOPOWER)) // return // interact(user) /obj/machinery/sim/transmitter/attack_hand(mob/user) add_fingerprint(user) if(stat & (BROKEN|NOPOWER)) return interact(user) /obj/machinery/sim/transmitter/proc/interact(mob/user) if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) ) if (!istype(user, /mob/living/silicon)) user.machine = null user << browse(null, "window=mm") return user.machine = src var/dat = "V-space Computer
" dat += "Close

" dat += {"System Status:[active]
Setup System
"} for(var/obj/machinery/sim/chair/C in chairs) dat +={" *------------------------------*
Chair #[C.internal_id]:
"} if(C.active) var/M = C.con_user if(ishuman(M)) dat += {" General Information:

Name: [M:real_name]
Age: [M:age]
Health: [M:health]
Status: [M:stat ? "Non-responsive" : "Stable"]
"} else dat += {" Nonhuman user detected
"} else dat += {"Not active
"} user << browse(dat, "window=mm") onclose(user, "mm") /obj/machinery/sim/transmitter/Topic(href, href_list) if(..()) return if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) usr.machine = src if (href_list["setup"]) if(active) boutput(usr, "System already set up.") return//Might add in some pre setup prefs here active = 1 return */ /obj/machinery/sim/chair name = "Sim Chair" desc = "Lets a user access V-space" icon = 'icons/misc/simroom.dmi' icon_state = "simchair" anchored = 1 density = 0 var/active = 0 var/id = 0 var/internal_id = 0 var/network = "none" var/mob/living/con_user = null /obj/machinery/sim/chair/MouseDrop_T(mob/M as mob, mob/user as mob) if (!ticker) boutput(user, "You can't buckle anyone in before the game starts.") return if ((!( iscarbon(M) ) || get_dist(src, user) > 1 || M.loc != src.loc || user.restrained() || usr.stat)) return if (M.buckled) return if (M == usr) user.visible_message("[user] buckles in!") else M.visible_message("[M] is buckled in by [user]!") M.anchored = 1 M.buckled = src M.set_loc(src.loc) M.network_device = src src.con_user = M src.active = 1 Station_VNet.Enter_Vspace(M, M.network_device,M.network_device:network) src.add_fingerprint(user) return /obj/machinery/sim/chair/attack_hand(mob/user as mob) if (src.con_user) var/mob/living/M = src.con_user if (M != user) M.visible_message("[M] is unbuckled by [user].") else M.visible_message("[M] is unbuckles.") M.anchored = 0 M.buckled = null M.network_device = null src.active = 0 src.con_user = null src.add_fingerprint(user) return ////////////////////////////////////////////////////////////////////////////////////////////////////////////// //A VR-Bed to replace the stupid chairs. /obj/machinery/sim/vr_bed name = "VR containment unit" desc = "An advanced pod that lets the user enter V-space" icon = 'icons/misc/simroom.dmi' icon_state = "vrbed_0" anchored = 1 density = 1 var/active = 0 var/internal_id = 0 var/network = "none" var/mob/living/con_user = null var/mob/occupant = null var/time = 30.0 var/timing = 0.0 var/last_tick = 0 //var/emagged = 0 /obj/machinery/sim/vr_bed/attackby(obj/item/O as obj, mob/user as mob) if(istype(O,/obj/item/grab)) var/obj/item/grab/G = O if (!ismob(G.affecting)) return if (src.occupant) boutput(user, "The VR pod is already occupied!") return if(..()) return var/dat = "VR pod timer" user.machine = src var/d2 if (src.timing) d2 = text("Stop Timed
", src) else d2 = text("Initiate Time
", src) var/second = src.time % 60 var/minute = (src.time - second) / 60 dat += text("


Timer System: [d2]
Time Left: [(minute ? text("[minute]:") : null)][second] - - + +") dat += text("

Close
") user << browse(dat, "window=computer;size=400x500") onclose(user, "computer") if (G) src.log_in(G.affecting) qdel(G) src.add_fingerprint(user) return /obj/machinery/sim/vr_bed/proc/log_in(mob/M as mob) if (src.occupant) if(M == src.occupant) return src.go_out() boutput(M, "The VR pod is already occupied!") return if (!iscarbon(M)) boutput(M, "You cannot possibly fit into that!") return M.set_loc(src) src.occupant = M M.network_device = src // M.verbs += /mob/proc/jack_in src.con_user = M src.active = 1 /* if(src.emagged) boutput(M, "You feel a terrible pain in your head, and everything goes black...") M.paralysis += 5 sleep(5) M.set_loc(pick(mazewarp)) return */ Station_VNet.Enter_Vspace(M, M.network_device,M.network_device:network) for(var/obj/O in src) O.set_loc(src.loc) src.icon_state = "vrbed_1" return /obj/machinery/sim/vr_bed/verb/move_inside() set src in oview(1) set category = "Local" if (usr.stat || usr.stunned || usr.weakened || usr.paralysis) return src.log_in(usr) src.add_fingerprint(usr) return /obj/machinery/sim/vr_bed/verb/move_eject() set src in oview(1) set category = "Local" if (usr.stat != 0 || usr.stunned !=0) return src.go_out() add_fingerprint(usr) return /obj/machinery/sim/vr_bed/relaymove(mob/user as mob, dir) if (user == src.occupant && (user.canmove)) src.go_out() add_fingerprint(user) return return /obj/machinery/sim/vr_bed/remove_air(amount) return src.loc.remove_air(amount) /obj/machinery/sim/vr_bed/attack_hand(var/mob/user as mob) if(..()) return var/dat = "VR pod timer" user.machine = src var/d2 if (src.timing) d2 = text("Stop Timed
", src) else d2 = text("Initiate Time
", src) var/second = src.time % 60 var/minute = (src.time - second) / 60 dat += text("


Timer System: [d2]
Time Left: [(minute ? text("[minute]:") : null)][second] - - + +") dat += text("

Close
") user << browse(dat, "window=computer;size=400x500") onclose(user, "computer") src.add_fingerprint(user) return /obj/machinery/sim/vr_bed/proc/go_out() if (!src.occupant) return src.icon_state = "vrbed_0" for(var/obj/O in src) O.set_loc(src.loc) // src.verbs -= /mob/proc/jack_in src.occupant.set_loc(src.loc) src.occupant.weakened = 2 src.occupant.network_device = null src.occupant = null src.active = 0 src.con_user = null return /obj/machinery/sim/vr_bed/process() ..() if (src.timing) if (!last_tick) last_tick = world.time var/passed_time = round(max(round(world.time - last_tick),10) / 10) if (src.time > 0) src.time -= passed_time else done() src.time = 0 src.timing = 0 last_tick = 0 src.updateDialog() last_tick = world.time else last_tick = 0 return /obj/machinery/sim/vr_bed/proc/done() if(stat & (NOPOWER|BROKEN)) return for(var/obj/machinery/sim/vr_bed/C in machines) if(!C.active) continue if(C.con_user) C.con_user.network_device = null C.active = 0 src.go_out() /obj/machinery/sim/vr_bed/Topic(href, href_list) if(..()) return if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) usr.machine = src if (href_list["time"]) if(src.allowed(usr, req_only_one_required)) src.timing = text2num(href_list["time"]) else if (href_list["tp"]) if(src.allowed(usr, req_only_one_required)) var/tp = text2num(href_list["tp"]) src.time += tp src.time = min(max(round(src.time), 0), 300) src.updateUsrDialog() return /////////////////////////////////////////////////////////////////////////////////////////////////////////// /obj/machinery/sim/programcomp name = "Sim Computer" desc = "Controls part of V-space" icon = 'icons/misc/simroom.dmi' icon_state = "simcomp" anchored = 1 density = 1 var/id = "none" var/network = "none" var/list/programs = list() //loaded programs /obj/machinery/sim/programcomp/proc/interact(mob/user) if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) ) if (!istype(user, /mob/living/silicon)) user.machine = null user << browse(null, "window=mm") return user.machine = src var/dat = "V-space Computer
" dat += "Close

" dat +={" *------------------------------*
Programs
Grassland
Floor
Sims
Zombies
Other
Jack Out
"} user << browse(dat, "window=mm") onclose(user, "mm") /obj/machinery/sim/programcomp/Topic(href, href_list) if(..()) return if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) usr.machine = src switch(href_list["set"]) if("grass") Setup_Vspace("grass",network) if("floor") Setup_Vspace("floor",network) switch(href_list["pro"]) if("zed") Run_Program("zombies",1) if(href_list["Jack Out"]) // if("1") var/mob/living/carbon/human/virtual/V = locate(href_list["jackout"]) if(src.network == "prison") boutput(V, "Leaving this network from the inside has been disabled!") return Station_VNet.Leave_Vspace(V) return /obj/machinery/sim/programcomp/attack_ai(mob/user) return // add_fingerprint(user) // if(stat & (BROKEN|NOPOWER)) // return // interact(user) /obj/machinery/sim/programcomp/attack_hand(mob/user) add_fingerprint(user) if(stat & (BROKEN|NOPOWER)) return interact(user) /obj/machinery/sim/programcomp/proc/Setup_Vspace(var/icons = "grass",var/network = "none") for(var/turf/simulated/floor/Vspace/V in world) if(istype(V,/turf/simulated/floor/Vspace)) if(V.network != network) continue if(V.network_ID == src.id) if(icons == "grass") V.icon_state = pick("grass1","grass2","grass3","grass4","sand1") else if(icons == "floor") V.icon_state = "floor" return /obj/machinery/sim/programcomp/proc/Run_Program(var/program = "zombies", var/vspace = 0) if(vspace == 0) return for (var/obj/landmark/A in world) if (A.name == "[network]_critter_spawn")//ex (area1_critter_spawn) switch(program) if("zombies") new/obj/critter/zombie(A.loc) // if("aliens") // new/obj/critter/zombie(A.loc) else break return