Makes it possible to define custom ambiance music for holodeck programs.

Cleans up holodeck code. Revives an old SS13 track, THUNDERDOME!
This commit is contained in:
PsiOmega
2015-04-25 10:53:14 +02:00
parent 173329f675
commit d7bbc6f1c3
9 changed files with 94 additions and 84 deletions

View File

@@ -1006,6 +1006,7 @@
#include "code\modules\genetics\side_effects.dm"
#include "code\modules\holodeck\HolodeckControl.dm"
#include "code\modules\holodeck\HolodeckObjects.dm"
#include "code\modules\holodeck\HolodeckPrograms.dm"
#include "code\modules\hydroponics\_hydro_setup.dm"
#include "code\modules\hydroponics\grown.dm"
#include "code\modules\hydroponics\grown_inedible.dm"

View File

@@ -55,7 +55,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
var/list/all_doors = list() //Added by Strumpetplaya - Alarm Change - Contains a list of doors adjacent to this area
var/air_doors_activated = 0
var/list/ambience = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg')
var/sound/forced_ambience = null
var/list/forced_ambience = null
var/sound_env = 2 //reverb preset for sounds played in this area, see sound datum reference for more
/*Adding a wizard area teleport list because motherfucking lag -- Urist*/
/*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/
@@ -1015,10 +1015,8 @@ area/space/atmosalert()
/area/holodeck/alphadeck
name = "\improper Holodeck Alpha"
/area/holodeck/source_plating
name = "\improper Holodeck - Off"
icon_state = "Holodeck"
/area/holodeck/source_emptycourt
name = "\improper Holodeck - Empty Court"
@@ -1034,11 +1032,9 @@ area/space/atmosalert()
/area/holodeck/source_courtroom
name = "\improper Holodeck - Courtroom"
icon_state = "Holodeck"
/area/holodeck/source_beach
name = "\improper Holodeck - Beach"
icon_state = "Holodeck" // Lazy.
/area/holodeck/source_burntest
name = "\improper Holodeck - Atmospheric Burn Test"
@@ -1065,9 +1061,6 @@ area/space/atmosalert()
name = "\improper Holodeck - Space"
has_gravity = 0
//Engineering
/area/engineering/

View File

@@ -262,13 +262,15 @@ var/list/mob/living/forced_ambiance_list = new
L << sound('sound/ambience/shipambience.ogg', repeat = 1, wait = 0, volume = 35, channel = 2)
if(forced_ambience)
forced_ambiance_list += L
L << forced_ambience
if(forced_ambience.len)
forced_ambiance_list |= L
L << sound(pick(forced_ambience), repeat = 1, wait = 0, volume = 25, channel = 1)
else
L << sound(null, channel = 1)
else if(src.ambience.len && prob(35))
if((world.time >= L.client.played + 600))
var/musVolume = 25
var/sound = pick(ambience)
L << sound(sound, repeat = 0, wait = 0, volume = musVolume, channel = 1)
L << sound(sound, repeat = 0, wait = 0, volume = 25, channel = 1)
L.client.played = world.time
/area/proc/gravitychange(var/gravitystate = 0, var/area/A)

View File

@@ -205,11 +205,11 @@ datum/track/New(var/title_name, var/audio)
var/area/main_area = get_area(src)
for(var/area/related_area in main_area.related)
related_area.forced_ambience = sound(current_track.sound, channel = 1, repeat = 1, volume = 25)
related_area.forced_ambience = list(current_track.sound)
for(var/mob/living/M in mobs_in_area(related_area))
if(M.mind)
related_area.play_ambience(related_area)
related_area.play_ambience(M)
playing = 1
update_use_power(2)

View File

@@ -1,21 +1,3 @@
var/global/list/holodeck_programs = list(
"emptycourt" = /area/holodeck/source_emptycourt, \
"boxingcourt" = /area/holodeck/source_boxingcourt, \
"basketball" = /area/holodeck/source_basketball, \
"thunderdomecourt" = /area/holodeck/source_thunderdomecourt, \
"beach" = /area/holodeck/source_beach, \
"desert" = /area/holodeck/source_desert, \
"space" = /area/holodeck/source_space, \
"picnicarea" = /area/holodeck/source_picnicarea, \
"snowfield" = /area/holodeck/source_snowfield, \
"theatre" = /area/holodeck/source_theatre, \
"meetinghall" = /area/holodeck/source_meetinghall, \
"courtroom" = /area/holodeck/source_courtroom, \
"burntest" = /area/holodeck/source_burntest, \
"wildlifecarp" = /area/holodeck/source_wildlife, \
"turnoff" = /area/holodeck/source_plating \
)
/obj/machinery/computer/HolodeckControl
name = "holodeck control console"
desc = "A computer used to control a nearby holodeck."
@@ -113,9 +95,7 @@ var/global/list/holodeck_programs = list(
if(href_list["program"])
var/prog = href_list["program"]
if(prog in holodeck_programs)
target = locate(holodeck_programs[prog])
if(target)
loadProgram(target)
loadProgram(holodeck_programs[prog])
else if(href_list["AIoverride"])
if(!issilicon(usr))
@@ -172,10 +152,6 @@ var/global/list/holodeck_programs = list(
/obj/machinery/computer/HolodeckControl/New()
..()
linkedholodeck = locate(/area/holodeck/alphadeck)
//if(linkedholodeck)
// target = locate(/area/holodeck/source_emptycourt)
// if(target)
// loadProgram(target)
//This could all be done better, but it works for now.
/obj/machinery/computer/HolodeckControl/Del()
@@ -225,9 +201,7 @@ var/global/list/holodeck_programs = list(
if(!checkInteg(linkedholodeck))
damaged = 1
target = locate(/area/holodeck/source_plating)
if(target)
loadProgram(target)
loadProgram(holodeck_programs["turnoff"], 0)
active = 0
use_power = 1
for(var/mob/M in range(10,src))
@@ -268,46 +242,33 @@ var/global/list/holodeck_programs = list(
//Why is it called toggle if it doesn't toggle?
/obj/machinery/computer/HolodeckControl/proc/togglePower(var/toggleOn = 0)
if(toggleOn)
var/area/targetsource = locate(/area/holodeck/source_emptycourt)
holographic_objs = 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
use_power = 2
loadProgram(holodeck_programs["emptycourt"], 0)
else
for(var/item in holographic_objs)
derez(item)
loadProgram(holodeck_programs["turnoff"], 0)
if(!linkedholodeck.has_gravity)
linkedholodeck.gravitychange(1,linkedholodeck)
var/area/targetsource = locate(/area/holodeck/source_plating)
targetsource.copy_contents_to(linkedholodeck , 1)
active = 0
use_power = 1
/obj/machinery/computer/HolodeckControl/proc/loadProgram(var/area/A)
/obj/machinery/computer/HolodeckControl/proc/loadProgram(var/datum/holodeck_program/HP, var/check_delay = 1)
if(!HP)
return
var/area/A = locate(HP.target)
if(!A)
return
if(world.time < (last_change + 25))
if(world.time < (last_change + 15))//To prevent super-spam clicking, reduced process size and annoyance -Sieve
return
for(var/mob/M in range(3,src))
M.show_message("\b ERROR. Recalibrating projection apparatus.")
last_change = world.time
return
if(check_delay)
if(world.time < (last_change + 25))
if(world.time < (last_change + 15))//To prevent super-spam clicking, reduced process size and annoyance -Sieve
return
for(var/mob/M in range(3,src))
M.show_message("\b ERROR. Recalibrating projection apparatus.")
last_change = world.time
return
last_change = world.time
active = 1
@@ -327,6 +288,15 @@ var/global/list/holodeck_programs = list(
for(var/obj/holo_obj in holographic_objs)
holo_obj.alpha *= 0.8 //give holodeck objs a slight transparency
if(HP.ambience)
linkedholodeck.forced_ambience = HP.ambience
else
linkedholodeck.forced_ambience = initial(linkedholodeck.ambience)
for(var/mob/living/M in mobs_in_area(linkedholodeck))
if(M.mind)
linkedholodeck.play_ambience(M)
spawn(30)
for(var/obj/effect/landmark/L in linkedholodeck)
if(L.name=="Atmospheric Test Start")
@@ -367,21 +337,11 @@ var/global/list/holodeck_programs = list(
A.gravitychange(1,A)
/obj/machinery/computer/HolodeckControl/proc/emergencyShutdown()
//Get rid of any items
for(var/item in holographic_objs)
derez(item)
for(var/mob/living/simple_animal/hostile/carp/holodeck/C in holographic_mobs)
holographic_mobs -= C
C.derez()
//Turn it back to the regular non-holographic room
target = locate(/area/holodeck/source_plating)
if(target)
loadProgram(target)
loadProgram(holodeck_programs["turnoff"], 0)
if(!linkedholodeck.has_gravity)
linkedholodeck.gravitychange(1,linkedholodeck)
var/area/targetsource = locate(/area/holodeck/source_plating)
targetsource.copy_contents_to(linkedholodeck , 1)
active = 0
use_power = 1

View File

@@ -0,0 +1,50 @@
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
var/target
var/list/ambience = null
/datum/holodeck_program/New(var/target, var/list/ambience = null)
src.target = target
src.ambience = ambience

View File

@@ -1,3 +1,5 @@
author: PsiOmegaDelta
changes: []
changes:
- soundadd: "Restores an old soundtrack 'Thunderdome.ogg'."
- rscadd: "Some holodeck programs now have custom ambience tracks."
delete-after: false

BIN
sound/music/THUNDERDOME.ogg Normal file

Binary file not shown.

View File

@@ -1,9 +1,11 @@
sound/music/1.ogg
sound/music/b12_combined_start.ogg
sound/music/clouds.ogg
sound/music/main.ogg
sound/music/space.ogg
sound/music/space_asshole.ogg
sound/music/space_oddity.ogg
sound/music/THUNDERDOME.ogg
sound/music/title1.ogg
sound/music/title2.ogg
sound/music/traitor.ogg