mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 02:09:41 +00:00
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:
@@ -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"
|
||||
|
||||
@@ -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/
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
50
code/modules/holodeck/HolodeckPrograms.dm
Normal file
50
code/modules/holodeck/HolodeckPrograms.dm
Normal 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
|
||||
@@ -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
BIN
sound/music/THUNDERDOME.ogg
Normal file
Binary file not shown.
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user