/obj/machinery/computer/HolodeckControl name = "Holodeck Control Computer" desc = "A computer used to control a nearby holodeck." icon_state = "computer_generic" var/area/linkedholodeck = null var/area/target = null var/active = 0 var/list/holographic_items = list() var/damaged = 0 attack_ai(var/mob/user as mob) return src.attack_hand(user) attack_paw(var/mob/user as mob) return attack_hand(var/mob/user as mob) if(..()) return user.machine = src var/dat dat += "Holodeck Control System
" dat += "
Current Loaded Programs:
" dat += "((Empty Court))
" dat += "((Boxing Court))
" dat += "((Thunderdome Court))
" dat += "((Beach))
" // dat += "((Shutdown System))
" dat += "Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.
" if(emagged) dat += "(Begin Atmospheric Burn Simulation)
" dat += "Ensure the holodeck is empty before testing.
" dat += "
" dat += "(Begin Wildlife Simulation)
" dat += "Ensure the holodeck is empty before testing.
" dat += "
" dat += "Safety Protocols are DISABLED
" else if(issilicon(user)) dat += "(Override Safety Protocols?)
" dat += "
" dat += "Safety Protocols are ENABLED
" user << browse(dat, "window=computer;size=400x500") onclose(user, "computer") return 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["emptycourt"]) target = locate(/area/holodeck/source_emptycourt) if(target) loadProgram(target) else if(href_list["boxingcourt"]) target = locate(/area/holodeck/source_boxingcourt) if(target) loadProgram(target) else if(href_list["thunderdomecourt"]) target = locate(/area/holodeck/source_thunderdomecourt) if(target) loadProgram(target) else if(href_list["beach"]) target = locate(/area/holodeck/source_beach) if(target) loadProgram(target) else if(href_list["turnoff"]) target = locate(/area/holodeck/source_plating) if(target) loadProgram(target) else if(href_list["burntest"]) if(!emagged) return target = locate(/area/holodeck/source_burntest) if(target) loadProgram(target) else if(href_list["wildlifecarp"]) if(!emagged) return target = locate(/area/holodeck/source_wildlife) if(target) loadProgram(target) else if(href_list["AIoverride"]) if(!issilicon(usr)) return emagged = 1 src.add_fingerprint(usr) src.updateUsrDialog() return /obj/machinery/computer/HolodeckControl/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob) /* if(istype(D, /obj/item/weapon/screwdriver)) playsound(src.loc, 'Screwdriver.ogg', 50, 1) if(do_after(user, 20)) if (src.stat & BROKEN) user << "\blue The broken glass falls out." var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) new /obj/item/weapon/shard( src.loc ) var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A ) for (var/obj/C in src) C.loc = src.loc A.circuit = M A.state = 3 A.icon_state = "3" A.anchored = 1 del(src) else user << "\blue You disconnect the monitor." var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A ) for (var/obj/C in src) C.loc = src.loc A.circuit = M A.state = 4 A.icon_state = "4" A.anchored = 1 del(src) */ if(istype(D, /obj/item/weapon/card/emag) && !emagged) playsound(src.loc, 'sparks4.ogg', 75, 1) emagged = 1 user << "\blue You vastly increase projector power and override the safety and security protocols." user << "Warning. Automatic shutoff and derezing protocols have been corrupted. Please call Nanotrasen maintence and do not use the simulator." src.updateUsrDialog() return /obj/machinery/computer/HolodeckControl/New() ..() linkedholodeck = locate(/area/holodeck/alphadeck) //if(linkedholodeck) // target = locate(/area/holodeck/source_emptycourt) // if(target) // loadProgram(target) /obj/machinery/computer/HolodeckControl/process() if(active) if(!checkInteg(linkedholodeck)) damaged = 1 target = locate(/area/holodeck/source_plating) if(target) loadProgram(target) active = 0 for(var/mob/M in range(10,src)) M.show_message("The holodeck overloads!") for(var/turf/T in linkedholodeck) if(prob(30)) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(2, 1, T) s.start() T.ex_act(3) T.hotspot_expose(1000,500,1) for(var/item in holographic_items) if(!(get_turf(item) in linkedholodeck)) derez(item, 0) /obj/machinery/computer/HolodeckControl/proc/derez(var/obj , var/silent = 1) holographic_items.Remove(obj) if(istype(obj , /obj/)) if(istype(obj:loc , /mob/)) var/mob/M = obj:loc M.drop_from_slot(obj) if(!silent) var/obj/oldobj = obj for(var/mob/M in viewers(world.view,get_turf(obj))) M << "The [oldobj.name] fades away!" del(obj) /obj/machinery/computer/HolodeckControl/proc/checkInteg(var/area/A) for(var/turf/T in A) if(istype(T, /turf/space)) return 0 return 1 /obj/machinery/computer/HolodeckControl/proc/togglePower(var/toggleOn = 0) if(toggleOn) var/area/targetsource = locate(/area/holodeck/source_emptycourt) holographic_items = targetsource.copy_contents_to(linkedholodeck) spawn(30) for(var/obj/effect/landmark/L in linkedholodeck) if(L.name=="Atmospheric Test Start") spawn(20) var/turf/T = get_turf(L) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(2, 1, T) s.start() if(T) T.temperature = 5000 T.hotspot_expose(50000,50000,1) active = 1 else for(var/item in holographic_items) derez(item) var/area/targetsource = locate(/area/holodeck/source_plating) targetsource.copy_contents_to(linkedholodeck , 1) active = 0 /obj/machinery/computer/HolodeckControl/proc/loadProgram(var/area/A) active = 1 for(var/item in holographic_items) derez(item) for(var/obj/effect/decal/cleanable/blood/B in linkedholodeck) del(B) holographic_items = A.copy_contents_to(linkedholodeck , 1) if(emagged) for(var/obj/item/weapon/melee/energy/sword/holosword/H in linkedholodeck) H.damtype = BRUTE spawn(30) for(var/obj/effect/landmark/L in linkedholodeck) if(L.name=="Atmospheric Test Start") spawn(20) var/turf/T = get_turf(L) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(2, 1, T) s.start() if(T) T.temperature = 5000 T.hotspot_expose(50000,50000,1) // Holographic Items! /turf/simulated/floor/holofloor/ thermal_conductivity = 0 /turf/simulated/floor/holofloor/grass name = "Lush Grass" icon_state = "grass1" floor_tile = new/obj/item/stack/tile/grass New() floor_tile.New() //I guess New() isn't run on objects spawned without the definition of a turf to house them, ah well. icon_state = "grass[pick("1","2","3","4")]" ..() spawn(4) update_icon() for(var/direction in cardinal) if(istype(get_step(src,direction),/turf/simulated/floor)) var/turf/simulated/floor/FF = get_step(src,direction) FF.update_icon() //so siding get updated properly /turf/simulated/floor/holofloor/attackby(obj/item/weapon/W as obj, mob/user as mob) return // HOLOFLOOR DOES NOT GIVE A FUCK /obj/structure/table/holotable name = "table" desc = "A square piece of metal standing on four metal legs. It can not move." icon = 'structures.dmi' icon_state = "table" density = 1 anchored = 1.0 layer = 2.8 throwpass = 1 //You can throw objects over this, despite it's density. /obj/structure/table/holotable/attack_paw(mob/user as mob) return attack_hand(user) /obj/structure/table/holotable/attack_alien(mob/user as mob) //Removed code for larva since it doesn't work. Previous code is now a larva ability. /N return attack_hand(user) /obj/structure/table/holotable/attack_animal(mob/living/simple_animal/user as mob) //Removed code for larva since it doesn't work. Previous code is now a larva ability. /N return attack_hand(user) /obj/structure/table/holotable/attack_hand(mob/user as mob) return // HOLOTABLE DOES NOT GIVE A FUCK /obj/structure/table/holotable/attackby(obj/item/weapon/W as obj, mob/user as mob) if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2) var/obj/item/weapon/grab/G = W if(G.state<2) user << "\red You need a better grip to do that!" return G.affecting.loc = src.loc G.affecting.Weaken(5) for(var/mob/O in viewers(world.view, src)) if (O.client) O << text("\red [] puts [] on the table.", G.assailant, G.affecting) del(W) return if (istype(W, /obj/item/weapon/wrench)) user << "It's a holotable! There are no bolts!" return if(isrobot(user)) return /obj/item/clothing/gloves/boxing/hologlove name = "boxing gloves" desc = "Because you really needed another excuse to punch your crewmates." icon_state = "boxing" item_state = "boxing" /obj/structure/holowindow name = "reinforced window" icon = 'structures.dmi' icon_state = "rwindow" desc = "A window." density = 1 layer = 3.2//Just above doors pressure_resistance = 4*ONE_ATMOSPHERE anchored = 1.0 flags = ON_BORDER /obj/structure/holowindow/Del() ..() /obj/item/weapon/melee/energy/sword/holosword damtype = HALLOSS /obj/item/weapon/melee/energy/sword/holosword/green New() color = "green" /obj/item/weapon/melee/energy/sword/holosword/red New() color = "red" /obj/machinery/readybutton name = "Ready Declaration Device" desc = "This device is used to declare ready. If all devices in an area are ready, the event will begin!" icon = 'monitors.dmi' icon_state = "auth_off" var/ready = 0 var/area/currentarea = null var/eventstarted = 0 anchored = 1.0 use_power = 1 idle_power_usage = 2 active_power_usage = 6 power_channel = ENVIRON /obj/machinery/readybutton/attack_ai(mob/user as mob) user << "The station AI is not to interact with these devices" return /obj/machinery/readybutton/attack_paw(mob/user as mob) user << "You are too primitive to use this device" return /obj/machinery/readybutton/New() ..() /obj/machinery/readybutton/attackby(obj/item/weapon/W as obj, mob/user as mob) user << "The device is a solid button, there's nothing you can do with it!" /obj/machinery/readybutton/attack_hand(mob/user as mob) if(user.stat || stat & (NOPOWER|BROKEN)) user << "This device is not powered." return currentarea = get_area(src.loc) if(!currentarea) del(src) if(eventstarted) usr << "The event has already begun!" return ready = !ready update_icon() var/numbuttons = 0 var/numready = 0 for(var/obj/machinery/readybutton/button in currentarea) numbuttons++ if (button.ready) numready++ if(numbuttons == numready) begin_event() /obj/machinery/readybutton/update_icon() if(ready) icon_state = "auth_on" else icon_state = "auth_off" /obj/machinery/readybutton/proc/begin_event() eventstarted = 1 for(var/obj/structure/holowindow/W in currentarea) del(W) for(var/mob/M in currentarea) M << "FIGHT!"