Merge pull request #3401 from VOREStation/aro-pol-holomulti

Allows more than one holodeck
This commit is contained in:
Anewbe
2017-05-02 09:36:31 -05:00
committed by GitHub
3 changed files with 75 additions and 72 deletions

View File

@@ -18,23 +18,57 @@
var/mob/last_to_emag = null var/mob/last_to_emag = null
var/last_change = 0 var/last_change = 0
var/last_gravity_change = 0 var/last_gravity_change = 0
var/list/supported_programs = list( \
"Empty Court" = "emptycourt", \ var/area/projection_area = /area/holodeck/alphadeck
"Basketball Court" = "basketball", \ var/current_program
"Thunderdome Court" = "thunderdomecourt", \ var/powerdown_program = "Turn Off"
"Boxing Ring"="boxingcourt", \ var/default_program = "Empty Court"
"Beach" = "beach", \
"Desert" = "desert", \ var/list/supported_programs = list(
"Space" = "space", \ "Empty Court" = new/datum/holodeck_program(/area/holodeck/source_emptycourt, list('sound/music/THUNDERDOME.ogg')),
"Picnic Area" = "picnicarea", \ "Boxing Ring" = new/datum/holodeck_program(/area/holodeck/source_boxingcourt, list('sound/music/THUNDERDOME.ogg')),
"Snow Field" = "snowfield", \ "Basketball" = new/datum/holodeck_program(/area/holodeck/source_basketball, list('sound/music/THUNDERDOME.ogg')),
"Theatre" = "theatre", \ "Thunderdome" = new/datum/holodeck_program(/area/holodeck/source_thunderdomecourt, list('sound/music/THUNDERDOME.ogg')),
"Meeting Hall" = "meetinghall", \ "Beach" = new/datum/holodeck_program(/area/holodeck/source_beach),
"Courtroom" = "courtroom", \ "Desert" = new/datum/holodeck_program(/area/holodeck/source_desert,
"Turn Off" = "turnoff" \ list(
'sound/effects/wind/wind_2_1.ogg',
'sound/effects/wind/wind_2_2.ogg',
'sound/effects/wind/wind_3_1.ogg',
'sound/effects/wind/wind_4_1.ogg',
'sound/effects/wind/wind_4_2.ogg',
'sound/effects/wind/wind_5_1.ogg'
)
),
"Snowfield" = new/datum/holodeck_program(/area/holodeck/source_snowfield,
list(
'sound/effects/wind/wind_2_1.ogg',
'sound/effects/wind/wind_2_2.ogg',
'sound/effects/wind/wind_3_1.ogg',
'sound/effects/wind/wind_4_1.ogg',
'sound/effects/wind/wind_4_2.ogg',
'sound/effects/wind/wind_5_1.ogg'
)
),
"Space" = new/datum/holodeck_program(/area/holodeck/source_space,
list(
'sound/ambience/ambispace.ogg',
'sound/music/main.ogg',
'sound/music/space.ogg',
'sound/music/traitor.ogg',
)
),
"Picnic Area" = new/datum/holodeck_program(/area/holodeck/source_picnicarea, list('sound/music/title2.ogg')),
"Theatre" = new/datum/holodeck_program(/area/holodeck/source_theatre),
"Meetinghall" = new/datum/holodeck_program(/area/holodeck/source_meetinghall),
"Courtroom" = new/datum/holodeck_program(/area/holodeck/source_courtroom, list('sound/music/traitor.ogg')),
"Turn Off" = new/datum/holodeck_program(/area/holodeck/source_plating, list())
)
var/list/restricted_programs = list(
"Burnoff Test Simulation" = new/datum/holodeck_program(/area/holodeck/source_burntest, list()),
"Wildlife Simulation" = new/datum/holodeck_program(/area/holodeck/source_wildlife, list())
) )
var/list/restricted_programs = list("Atmospheric Burn Simulation" = "burntest", "Wildlife Simulation" = "wildlifecarp")
var/current_program = "turnoff"
/obj/machinery/computer/HolodeckControl/attack_ai(var/mob/user as mob) /obj/machinery/computer/HolodeckControl/attack_ai(var/mob/user as mob)
return src.attack_hand(user) return src.attack_hand(user)
@@ -59,10 +93,10 @@
var/restricted_program_list[0] var/restricted_program_list[0]
for(var/P in supported_programs) for(var/P in supported_programs)
program_list[++program_list.len] = list("name" = P, "program" = supported_programs[P]) program_list[++program_list.len] = P
for(var/P in restricted_programs) for(var/P in restricted_programs)
restricted_program_list[++restricted_program_list.len] = list("name" = P, "program" = restricted_programs[P]) restricted_program_list[++restricted_program_list.len] = P
data["supportedPrograms"] = program_list data["supportedPrograms"] = program_list
data["restrictedPrograms"] = restricted_program_list data["restrictedPrograms"] = restricted_program_list
@@ -93,9 +127,9 @@
if(href_list["program"]) if(href_list["program"])
var/prog = href_list["program"] var/prog = href_list["program"]
if(prog in holodeck_programs) if(prog in (supported_programs + restricted_programs))
loadProgram(holodeck_programs[prog]) loadProgram(prog)
current_program = href_list["program"] current_program = prog
else if(href_list["AIoverride"]) else if(href_list["AIoverride"])
if(!issilicon(usr)) if(!issilicon(usr))
@@ -150,7 +184,10 @@
/obj/machinery/computer/HolodeckControl/New() /obj/machinery/computer/HolodeckControl/New()
..() ..()
linkedholodeck = locate(/area/holodeck/alphadeck) current_program = powerdown_program
linkedholodeck = locate(projection_area)
if(!linkedholodeck)
world << "<span class='danger'>Holodeck computer at [x],[y],[z] failed to locate projection area.</span>"
//This could all be done better, but it works for now. //This could all be done better, but it works for now.
/obj/machinery/computer/HolodeckControl/Destroy() /obj/machinery/computer/HolodeckControl/Destroy()
@@ -185,7 +222,7 @@
if(!checkInteg(linkedholodeck)) if(!checkInteg(linkedholodeck))
damaged = 1 damaged = 1
loadProgram(holodeck_programs["turnoff"], 0) loadProgram(powerdown_program, 0)
active = 0 active = 0
use_power = 1 use_power = 1
for(var/mob/M in range(10,src)) for(var/mob/M in range(10,src))
@@ -227,9 +264,9 @@
//Why is it called toggle if it doesn't toggle? //Why is it called toggle if it doesn't toggle?
/obj/machinery/computer/HolodeckControl/proc/togglePower(var/toggleOn = 0) /obj/machinery/computer/HolodeckControl/proc/togglePower(var/toggleOn = 0)
if(toggleOn) if(toggleOn)
loadProgram(holodeck_programs["emptycourt"], 0) loadProgram(default_program, 0)
else else
loadProgram(holodeck_programs["turnoff"], 0) loadProgram(powerdown_program, 0)
if(!linkedholodeck.has_gravity) if(!linkedholodeck.has_gravity)
linkedholodeck.gravitychange(1,linkedholodeck) linkedholodeck.gravitychange(1,linkedholodeck)
@@ -238,9 +275,18 @@
use_power = 1 use_power = 1
/obj/machinery/computer/HolodeckControl/proc/loadProgram(var/datum/holodeck_program/HP, var/check_delay = 1) /obj/machinery/computer/HolodeckControl/proc/loadProgram(var/prog, var/check_delay = 1)
if(!prog)
return
var/datum/holodeck_program/HP
if(prog in supported_programs)
HP = supported_programs[prog]
else if(prog in restricted_programs)
HP = restricted_programs[prog]
if(!HP) if(!HP)
return return
var/area/A = locate(HP.target) var/area/A = locate(HP.target)
if(!A) if(!A)
return return
@@ -324,7 +370,7 @@
/obj/machinery/computer/HolodeckControl/proc/emergencyShutdown() /obj/machinery/computer/HolodeckControl/proc/emergencyShutdown()
//Turn it back to the regular non-holographic room //Turn it back to the regular non-holographic room
loadProgram(holodeck_programs["turnoff"], 0) loadProgram(powerdown_program, 0)
if(!linkedholodeck.has_gravity) if(!linkedholodeck.has_gravity)
linkedholodeck.gravitychange(1,linkedholodeck) linkedholodeck.gravitychange(1,linkedholodeck)

View File

@@ -1,46 +1,3 @@
var/global/list/holodeck_programs = list(
"emptycourt" = new/datum/holodeck_program(/area/holodeck/source_emptycourt, list('sound/music/THUNDERDOME.ogg')),
"boxingcourt" = new/datum/holodeck_program(/area/holodeck/source_boxingcourt, list('sound/music/THUNDERDOME.ogg')),
"basketball" = new/datum/holodeck_program(/area/holodeck/source_basketball, list('sound/music/THUNDERDOME.ogg')),
"thunderdomecourt" = new/datum/holodeck_program(/area/holodeck/source_thunderdomecourt, list('sound/music/THUNDERDOME.ogg')),
"beach" = new/datum/holodeck_program(/area/holodeck/source_beach),
"desert" = new/datum/holodeck_program(/area/holodeck/source_desert,
list(
'sound/effects/wind/wind_2_1.ogg',
'sound/effects/wind/wind_2_2.ogg',
'sound/effects/wind/wind_3_1.ogg',
'sound/effects/wind/wind_4_1.ogg',
'sound/effects/wind/wind_4_2.ogg',
'sound/effects/wind/wind_5_1.ogg'
)
),
"snowfield" = new/datum/holodeck_program(/area/holodeck/source_snowfield,
list(
'sound/effects/wind/wind_2_1.ogg',
'sound/effects/wind/wind_2_2.ogg',
'sound/effects/wind/wind_3_1.ogg',
'sound/effects/wind/wind_4_1.ogg',
'sound/effects/wind/wind_4_2.ogg',
'sound/effects/wind/wind_5_1.ogg'
)
),
"space" = new/datum/holodeck_program(/area/holodeck/source_space,
list(
'sound/ambience/ambispace.ogg',
'sound/music/main.ogg',
'sound/music/space.ogg',
'sound/music/traitor.ogg',
)
),
"picnicarea" = new/datum/holodeck_program(/area/holodeck/source_picnicarea, list('sound/music/title2.ogg')),
"theatre" = new/datum/holodeck_program(/area/holodeck/source_theatre),
"meetinghall" = new/datum/holodeck_program(/area/holodeck/source_meetinghall),
"courtroom" = new/datum/holodeck_program(/area/holodeck/source_courtroom, list('sound/music/traitor.ogg')),
"burntest" = new/datum/holodeck_program(/area/holodeck/source_burntest, list()),
"wildlifecarp" = new/datum/holodeck_program(/area/holodeck/source_wildlife, list()),
"turnoff" = new/datum/holodeck_program(/area/holodeck/source_plating, list())
)
/datum/holodeck_program /datum/holodeck_program
var/target var/target
var/list/ambience = null var/list/ambience = null

View File

@@ -5,7 +5,7 @@
<h3>Current Loaded Programs:</h3> <h3>Current Loaded Programs:</h3>
{{for data.supportedPrograms}} {{for data.supportedPrograms}}
<div class='item'>{{:helper.link(value.name, data.currentProgram == value.program ? 'check' : 'close', {'program' : value.program}, null, data.currentProgram == value.program ? 'linkOn' : null)}}</div> <div class='item'>{{:helper.link(value, data.currentProgram == value ? 'check' : 'close', {'program' : value}, null, data.currentProgram == value ? 'linkOn' : null)}}</div>
{{/for}} {{/for}}
<div class='item'>Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.</div> <div class='item'>Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.</div>
{{if data.isSilicon}} {{if data.isSilicon}}
@@ -22,7 +22,7 @@
{{if data.safetyDisabled}} {{if data.safetyDisabled}}
{{for data.restrictedPrograms}} {{for data.restrictedPrograms}}
<div class='item'>{{:helper.link('Begin ' + value.name, data.currentProgram == value.program ? 'check' : 'close', {'program' : value.program}, null, data.currentProgram == value.program ? 'linkOn' : null)}}</div> <div class='item'>{{:helper.link('Begin ' + value, data.currentProgram == value ? 'check' : 'close', {'program' : value.program}, null, data.currentProgram == value ? 'linkOn' : null)}}</div>
{{/for}} {{/for}}
<div class='item average'>Ensure the holodeck is empty before testing.</div> <div class='item average'>Ensure the holodeck is empty before testing.</div>
<div class='item'>Safety Protocols are <span class='bad'>DISABLED</span></div> <div class='item'>Safety Protocols are <span class='bad'>DISABLED</span></div>