diff --git a/baystation12.dme b/baystation12.dme index fb23119bd3..b999dacd7a 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -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" diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 21168be5bc..6dcf4f93ef 100755 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -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/ diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 0778f50174..c66859f5d1 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -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) diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm index 972f51bd48..61687a4d7f 100644 --- a/code/game/machinery/jukebox.dm +++ b/code/game/machinery/jukebox.dm @@ -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) diff --git a/code/modules/holodeck/HolodeckControl.dm b/code/modules/holodeck/HolodeckControl.dm index f19a8cd4ce..ea23835b56 100644 --- a/code/modules/holodeck/HolodeckControl.dm +++ b/code/modules/holodeck/HolodeckControl.dm @@ -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 diff --git a/code/modules/holodeck/HolodeckPrograms.dm b/code/modules/holodeck/HolodeckPrograms.dm new file mode 100644 index 0000000000..9cb77f2a4b --- /dev/null +++ b/code/modules/holodeck/HolodeckPrograms.dm @@ -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 diff --git a/html/changelogs/PsiOmegaDelta.yml b/html/changelogs/PsiOmegaDelta.yml index 6fdea55f54..21a193f3a8 100644 --- a/html/changelogs/PsiOmegaDelta.yml +++ b/html/changelogs/PsiOmegaDelta.yml @@ -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 diff --git a/sound/music/THUNDERDOME.ogg b/sound/music/THUNDERDOME.ogg new file mode 100644 index 0000000000..0a36b251b7 Binary files /dev/null and b/sound/music/THUNDERDOME.ogg differ diff --git a/sound/serversound_list.txt b/sound/serversound_list.txt index 24cbafaf15..21d48ed7f9 100644 --- a/sound/serversound_list.txt +++ b/sound/serversound_list.txt @@ -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