diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index f372f27e547..5f091280210 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -107,7 +107,7 @@ if(config.resource_urls) src.preload_rsc = pick(config.resource_urls) else src.preload_rsc = 1 // If config.resource_urls is not set, preload like normal. - + src << "\red If the title screen is black, resources are still downloading. Please be patient until the title screen appears." @@ -241,6 +241,7 @@ //send resources to the client. It's here in its own proc so we can move it around easiliy if need be /client/proc/send_resources() + preload_vox() getFiles( 'nano/js/libraries.min.js', 'nano/js/nano_update.js', diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index c701be0f558..fef0164d7d7 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -50,6 +50,7 @@ var/list/ai_list = list() var/camera_light_on = 0 //Defines if the AI toggled the light on the camera it's looking through. var/datum/trackable/track = null + var/last_announcement = "" /mob/living/silicon/ai/New(loc, var/datum/ai_laws/L, var/obj/item/device/mmi/B, var/safety = 0) var/list/possibleNames = ai_names @@ -338,7 +339,7 @@ var/list/ai_list = list() checklaws() if(href_list["say_word"]) - src.announcement(href_list["say_word"]) + play_vox_word(href_list["say_word"], null, src) return if (href_list["lawi"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm index e5624459e2a..57880471486 100644 --- a/code/modules/mob/living/silicon/ai/say.dm +++ b/code/modules/mob/living/silicon/ai/say.dm @@ -14,9 +14,10 @@ return 1 return ..() -var/announcing_vox = 0 +var/announcing_vox = 0 // Stores the time of the last announcement var/const/VOX_CHANNEL = 200 -var/const/VOX_VOLUME = 75 +var/const/VOX_DELAY = 100 // 10 seconds +var/const/VOX_PATH = "sound/vox/" /mob/living/silicon/ai/verb/announcement_help() @@ -24,689 +25,106 @@ var/const/VOX_VOLUME = 75 set desc = "Display a list of vocal words to announce to the crew." set category = "AI Commands" - src << "\red VOX is disabled until issues with the code can be sorted." - return -/* var/dat = "Here is a list of words you can type into the Announcement button to create sentences to vocally announce.
\ - Do not use punctuation as you would normally, if you want a pause you can use the full stop and comma characters by separating them with spaces, like so: 'Alpha . Test , Bravo'.
" + + var/dat = "Here is a list of words you can type into the 'Announcement' button to create sentences to vocally announce to everyone on the same level at you.
\ + \ + WARNING:
Misuse of the announcement system will get you job banned.
" var/index = 0 - for(var/word in vox_sounds) + var/list/vox_words = flist(VOX_PATH) // flist will return a list of strings with all the files in the path + for(var/word in vox_words) index++ - dat += "[capitalize(word)]" - if(index != vox_sounds.len) + var/stripped_word = copytext(word, 1, length(word) - 3) // Remove the .wav + dat += "[capitalize(stripped_word)]" + if(index != vox_words.len) dat += " / " - src << browse(dat, "window=announce_help;size=500x400")*/ + src << browse(dat, "window=announce_help;size=500x400") -/mob/living/silicon/ai/verb/announcement(var/message as text) +/mob/living/silicon/ai/verb/announcement() set name = "Announcement" - set desc = "Create a vocal announcement by typing in the available words to create a setence. More help is available in 'Announcement Help'" + set desc = "Create a vocal announcement by typing in the available words to create a sentence." set category = "AI Commands" - src << "\red VOX is disabled until issues with the code can be sorted." - return -/* - if(!message) + if(announcing_vox > world.time) + src << "Please wait [round((announcing_vox - world.time) / 10)] seconds." return - //if(!announcing_vox > world.time) - // return - log_game("[key_name_admin(src)] made a vocal announcement with the following message: [message].") + var/message = input(src, "WARNING: Misuse of this verb can result in you being job banned. More help is available in 'Announcement Help'", "Announcement", src.last_announcement) as text - announcing_vox = world.time + 30 + last_announcement = message + + if(!message || announcing_vox > world.time) + return var/list/words = stringsplit(trim(message), " ") var/list/incorrect_words = list() - if(words.len > 32) - words.len = 32 + if(words.len > 30) + words.len = 30 + + // Detect incorrect words which aren't .wav files. for(var/word in words) word = trim(word) if(!word) + words -= word continue - if(!play_vox_word(word, src.z)) // If the word isn't speakable + if(!vox_word_exists(word)) incorrect_words += word if(incorrect_words.len) src << "These words are not available on the announcement system: [english_list(incorrect_words)]." -*/ -/proc/play_vox_word(var/word, var/z_level) -/* + return + + announcing_vox = world.time + VOX_DELAY + + log_game("[key_name_admin(src)] made a vocal announcement with the following message: [message].") + + for(var/word in words) + play_vox_word(word, src.z, null) + + +/proc/play_vox_word(var/word, var/z_level, var/mob/only_listener) + word = lowertext(word) - if(vox_sounds[word]) + if(vox_word_exists(word)) - var/sound_file = vox_sounds[word] - var/sound/voice = sound(sound_file, wait = 1, channel = VOX_CHANNEL, volume = VOX_VOLUME) + var/sound_file = get_vox_file(word) + var/sound/voice = sound(sound_file, wait = 1, channel = VOX_CHANNEL) voice.status = SOUND_STREAM - // Play voice for all mobs in the z level - for(var/mob/M in player_list) - if(M.client) - var/turf/T = get_turf(M) - if(T.z == z_level) - M << voice + // If there is no single listener, broadcast to everyone in the same z level + if(!only_listener) + // Play voice for all mobs in the z level + for(var/mob/M in player_list) + if(M.client) + var/turf/T = get_turf(M) + if(T.z == z_level) + M << voice + else + only_listener << voice return 1 - return 0*/ + return 0 + + +/proc/vox_word_exists(var/word) + return fexists("[VOX_PATH][word].wav") + +/proc/get_vox_file(var/word) + if(vox_word_exists(word)) + return file("[VOX_PATH][word].wav") -// List is required to compile the resources into the game when it loads. // Dynamically loading it has bad results with sounds overtaking each other, even with the wait variable. +// We send the file to the user when they login. -var/list/vox_sounds = list(/*"," = 'sound/vox/,.wav', -"." = 'sound/vox/..wav', -"a" = 'sound/vox/a.wav', -"accelerating" = 'sound/vox/accelerating.wav', -"accelerator" = 'sound/vox/accelerator.wav', -"accepted" = 'sound/vox/accepted.wav', -"access" = 'sound/vox/access.wav', -"acknowledge" = 'sound/vox/acknowledge.wav', -"acknowledged" = 'sound/vox/acknowledged.wav', -"acquired" = 'sound/vox/acquired.wav', -"acquisition" = 'sound/vox/acquisition.wav', -"across" = 'sound/vox/across.wav', -"activate" = 'sound/vox/activate.wav', -"activated" = 'sound/vox/activated.wav', -"activity" = 'sound/vox/activity.wav', -"adios" = 'sound/vox/adios.wav', -"administration" = 'sound/vox/administration.wav', -"advanced" = 'sound/vox/advanced.wav', -"after" = 'sound/vox/after.wav', -"agent" = 'sound/vox/agent.wav', -"alarm" = 'sound/vox/alarm.wav', -"alert" = 'sound/vox/alert.wav', -"alien" = 'sound/vox/alien.wav', -"aligned" = 'sound/vox/aligned.wav', -"all" = 'sound/vox/all.wav', -"alpha" = 'sound/vox/alpha.wav', -"am" = 'sound/vox/am.wav', -"amigo" = 'sound/vox/amigo.wav', -"ammunition" = 'sound/vox/ammunition.wav', -"an" = 'sound/vox/an.wav', -"and" = 'sound/vox/and.wav', -"announcement" = 'sound/vox/announcement.wav', -"anomalous" = 'sound/vox/anomalous.wav', -"antenna" = 'sound/vox/antenna.wav', -"any" = 'sound/vox/any.wav', -"apprehend" = 'sound/vox/apprehend.wav', -"approach" = 'sound/vox/approach.wav', -"are" = 'sound/vox/are.wav', -"area" = 'sound/vox/area.wav', -"arm" = 'sound/vox/arm.wav', -"armed" = 'sound/vox/armed.wav', -"armor" = 'sound/vox/armor.wav', -"armory" = 'sound/vox/armory.wav', -"arrest" = 'sound/vox/arrest.wav', -"ass" = 'sound/vox/ass.wav', -"at" = 'sound/vox/at.wav', -"atomic" = 'sound/vox/atomic.wav', -"attention" = 'sound/vox/attention.wav', -"authorize" = 'sound/vox/authorize.wav', -"authorized" = 'sound/vox/authorized.wav', -"automatic" = 'sound/vox/automatic.wav', -"away" = 'sound/vox/away.wav', -"b" = 'sound/vox/b.wav', -"back" = 'sound/vox/back.wav', -"backman" = 'sound/vox/backman.wav', -"bad" = 'sound/vox/bad.wav', -"bag" = 'sound/vox/bag.wav', -"bailey" = 'sound/vox/bailey.wav', -"barracks" = 'sound/vox/barracks.wav', -"base" = 'sound/vox/base.wav', -"bay" = 'sound/vox/bay.wav', -"be" = 'sound/vox/be.wav', -"been" = 'sound/vox/been.wav', -"before" = 'sound/vox/before.wav', -"beyond" = 'sound/vox/beyond.wav', -"biohazard" = 'sound/vox/biohazard.wav', -"biological" = 'sound/vox/biological.wav', -"birdwell" = 'sound/vox/birdwell.wav', -"bizwarn" = 'sound/vox/bizwarn.wav', -"black" = 'sound/vox/black.wav', -"blast" = 'sound/vox/blast.wav', -"blocked" = 'sound/vox/blocked.wav', -"bloop" = 'sound/vox/bloop.wav', -"blue" = 'sound/vox/blue.wav', -"bottom" = 'sound/vox/bottom.wav', -"bravo" = 'sound/vox/bravo.wav', -"breach" = 'sound/vox/breach.wav', -"breached" = 'sound/vox/breached.wav', -"break" = 'sound/vox/break.wav', -"bridge" = 'sound/vox/bridge.wav', -"bust" = 'sound/vox/bust.wav', -"but" = 'sound/vox/but.wav', -"button" = 'sound/vox/button.wav', -"buzwarn" = 'sound/vox/buzwarn.wav', -"bypass" = 'sound/vox/bypass.wav', -"c" = 'sound/vox/c.wav', -"cable" = 'sound/vox/cable.wav', -"call" = 'sound/vox/call.wav', -"called" = 'sound/vox/called.wav', -"canal" = 'sound/vox/canal.wav', -"cap" = 'sound/vox/cap.wav', -"captain" = 'sound/vox/captain.wav', -"capture" = 'sound/vox/capture.wav', -"ceiling" = 'sound/vox/ceiling.wav', -"celsius" = 'sound/vox/celsius.wav', -"center" = 'sound/vox/center.wav', -"centi" = 'sound/vox/centi.wav', -"central" = 'sound/vox/central.wav', -"chamber" = 'sound/vox/chamber.wav', -"charlie" = 'sound/vox/charlie.wav', -"check" = 'sound/vox/check.wav', -"checkpoint" = 'sound/vox/checkpoint.wav', -"chemical" = 'sound/vox/chemical.wav', -"cleanup" = 'sound/vox/cleanup.wav', -"clear" = 'sound/vox/clear.wav', -"clearance" = 'sound/vox/clearance.wav', -"close" = 'sound/vox/close.wav', -"code" = 'sound/vox/code.wav', -"coded" = 'sound/vox/coded.wav', -"collider" = 'sound/vox/collider.wav', -"command" = 'sound/vox/command.wav', -"communication" = 'sound/vox/communication.wav', -"complex" = 'sound/vox/complex.wav', -"computer" = 'sound/vox/computer.wav', -"condition" = 'sound/vox/condition.wav', -"containment" = 'sound/vox/containment.wav', -"contamination" = 'sound/vox/contamination.wav', -"control" = 'sound/vox/control.wav', -"coolant" = 'sound/vox/coolant.wav', -"coomer" = 'sound/vox/coomer.wav', -"core" = 'sound/vox/core.wav', -"correct" = 'sound/vox/correct.wav', -"corridor" = 'sound/vox/corridor.wav', -"crew" = 'sound/vox/crew.wav', -"cross" = 'sound/vox/cross.wav', -"cryogenic" = 'sound/vox/cryogenic.wav', -"d" = 'sound/vox/d.wav', -"dadeda" = 'sound/vox/dadeda.wav', -"damage" = 'sound/vox/damage.wav', -"damaged" = 'sound/vox/damaged.wav', -"danger" = 'sound/vox/danger.wav', -"day" = 'sound/vox/day.wav', -"deactivated" = 'sound/vox/deactivated.wav', -"decompression" = 'sound/vox/decompression.wav', -"decontamination" = 'sound/vox/decontamination.wav', -"deeoo" = 'sound/vox/deeoo.wav', -"defense" = 'sound/vox/defense.wav', -"degrees" = 'sound/vox/degrees.wav', -"delta" = 'sound/vox/delta.wav', -"denied" = 'sound/vox/denied.wav', -"deploy" = 'sound/vox/deploy.wav', -"deployed" = 'sound/vox/deployed.wav', -"destroy" = 'sound/vox/destroy.wav', -"destroyed" = 'sound/vox/destroyed.wav', -"detain" = 'sound/vox/detain.wav', -"detected" = 'sound/vox/detected.wav', -"detonation" = 'sound/vox/detonation.wav', -"device" = 'sound/vox/device.wav', -"did" = 'sound/vox/did.wav', -"die" = 'sound/vox/die.wav', -"dimensional" = 'sound/vox/dimensional.wav', -"dirt" = 'sound/vox/dirt.wav', -"disengaged" = 'sound/vox/disengaged.wav', -"dish" = 'sound/vox/dish.wav', -"disposal" = 'sound/vox/disposal.wav', -"distance" = 'sound/vox/distance.wav', -"distortion" = 'sound/vox/distortion.wav', -"do" = 'sound/vox/do.wav', -"doctor" = 'sound/vox/doctor.wav', -"doop" = 'sound/vox/doop.wav', -"door" = 'sound/vox/door.wav', -"down" = 'sound/vox/down.wav', -"dual" = 'sound/vox/dual.wav', -"duct" = 'sound/vox/duct.wav', -"e" = 'sound/vox/e.wav', -"east" = 'sound/vox/east.wav', -"echo" = 'sound/vox/echo.wav', -"ed" = 'sound/vox/ed.wav', -"effect" = 'sound/vox/effect.wav', -"egress" = 'sound/vox/egress.wav', -"eight" = 'sound/vox/eight.wav', -"eighteen" = 'sound/vox/eighteen.wav', -"eighty" = 'sound/vox/eighty.wav', -"electric" = 'sound/vox/electric.wav', -"electromagnetic" = 'sound/vox/electromagnetic.wav', -"elevator" = 'sound/vox/elevator.wav', -"eleven" = 'sound/vox/eleven.wav', -"eliminate" = 'sound/vox/eliminate.wav', -"emergency" = 'sound/vox/emergency.wav', -"energy" = 'sound/vox/energy.wav', -"engage" = 'sound/vox/engage.wav', -"engaged" = 'sound/vox/engaged.wav', -"engine" = 'sound/vox/engine.wav', -"enter" = 'sound/vox/enter.wav', -"entry" = 'sound/vox/entry.wav', -"environment" = 'sound/vox/environment.wav', -"error" = 'sound/vox/error.wav', -"escape" = 'sound/vox/escape.wav', -"evacuate" = 'sound/vox/evacuate.wav', -"exchange" = 'sound/vox/exchange.wav', -"exit" = 'sound/vox/exit.wav', -"expect" = 'sound/vox/expect.wav', -"experiment" = 'sound/vox/experiment.wav', -"experimental" = 'sound/vox/experimental.wav', -"explode" = 'sound/vox/explode.wav', -"explosion" = 'sound/vox/explosion.wav', -"exposure" = 'sound/vox/exposure.wav', -"exterminate" = 'sound/vox/exterminate.wav', -"extinguish" = 'sound/vox/extinguish.wav', -"extinguisher" = 'sound/vox/extinguisher.wav', -"extreme" = 'sound/vox/extreme.wav', -"f" = 'sound/vox/f.wav', -"facility" = 'sound/vox/facility.wav', -"fahrenheit" = 'sound/vox/fahrenheit.wav', -"failed" = 'sound/vox/failed.wav', -"failure" = 'sound/vox/failure.wav', -"farthest" = 'sound/vox/farthest.wav', -"fast" = 'sound/vox/fast.wav', -"feet" = 'sound/vox/feet.wav', -"field" = 'sound/vox/field.wav', -"fifteen" = 'sound/vox/fifteen.wav', -"fifth" = 'sound/vox/fifth.wav', -"fifty" = 'sound/vox/fifty.wav', -"final" = 'sound/vox/final.wav', -"fine" = 'sound/vox/fine.wav', -"fire" = 'sound/vox/fire.wav', -"first" = 'sound/vox/first.wav', -"five" = 'sound/vox/five.wav', -"flooding" = 'sound/vox/flooding.wav', -"floor" = 'sound/vox/floor.wav', -"fool" = 'sound/vox/fool.wav', -"for" = 'sound/vox/for.wav', -"forbidden" = 'sound/vox/forbidden.wav', -"force" = 'sound/vox/force.wav', -"forms" = 'sound/vox/forms.wav', -"found" = 'sound/vox/found.wav', -"four" = 'sound/vox/four.wav', -"fourteen" = 'sound/vox/fourteen.wav', -"fourth" = 'sound/vox/fourth.wav', -"fourty" = 'sound/vox/fourty.wav', -"foxtrot" = 'sound/vox/foxtrot.wav', -"freeman" = 'sound/vox/freeman.wav', -"freezer" = 'sound/vox/freezer.wav', -"from" = 'sound/vox/from.wav', -"front" = 'sound/vox/front.wav', -"fuel" = 'sound/vox/fuel.wav', -"g" = 'sound/vox/g.wav', -"get" = 'sound/vox/get.wav', -"go" = 'sound/vox/go.wav', -"going" = 'sound/vox/going.wav', -"good" = 'sound/vox/good.wav', -"goodbye" = 'sound/vox/goodbye.wav', -"gordon" = 'sound/vox/gordon.wav', -"got" = 'sound/vox/got.wav', -"government" = 'sound/vox/government.wav', -"granted" = 'sound/vox/granted.wav', -"great" = 'sound/vox/great.wav', -"green" = 'sound/vox/green.wav', -"grenade" = 'sound/vox/grenade.wav', -"guard" = 'sound/vox/guard.wav', -"gulf" = 'sound/vox/gulf.wav', -"gun" = 'sound/vox/gun.wav', -"guthrie" = 'sound/vox/guthrie.wav', -"handling" = 'sound/vox/handling.wav', -"hangar" = 'sound/vox/hangar.wav', -"has" = 'sound/vox/has.wav', -"have" = 'sound/vox/have.wav', -"hazard" = 'sound/vox/hazard.wav', -"head" = 'sound/vox/head.wav', -"health" = 'sound/vox/health.wav', -"heat" = 'sound/vox/heat.wav', -"helicopter" = 'sound/vox/helicopter.wav', -"helium" = 'sound/vox/helium.wav', -"hello" = 'sound/vox/hello.wav', -"help" = 'sound/vox/help.wav', -"here" = 'sound/vox/here.wav', -"hide" = 'sound/vox/hide.wav', -"high" = 'sound/vox/high.wav', -"highest" = 'sound/vox/highest.wav', -"hit" = 'sound/vox/hit.wav', -"hole" = 'sound/vox/hole.wav', -"hostile" = 'sound/vox/hostile.wav', -"hot" = 'sound/vox/hot.wav', -"hotel" = 'sound/vox/hotel.wav', -"hour" = 'sound/vox/hour.wav', -"hours" = 'sound/vox/hours.wav', -"hundred" = 'sound/vox/hundred.wav', -"hydro" = 'sound/vox/hydro.wav', -"i" = 'sound/vox/i.wav', -"idiot" = 'sound/vox/idiot.wav', -"illegal" = 'sound/vox/illegal.wav', -"immediate" = 'sound/vox/immediate.wav', -"immediately" = 'sound/vox/immediately.wav', -"in" = 'sound/vox/in.wav', -"inches" = 'sound/vox/inches.wav', -"india" = 'sound/vox/india.wav', -"ing" = 'sound/vox/ing.wav', -"inoperative" = 'sound/vox/inoperative.wav', -"inside" = 'sound/vox/inside.wav', -"inspection" = 'sound/vox/inspection.wav', -"inspector" = 'sound/vox/inspector.wav', -"interchange" = 'sound/vox/interchange.wav', -"intruder" = 'sound/vox/intruder.wav', -"invallid" = 'sound/vox/invallid.wav', -"invasion" = 'sound/vox/invasion.wav', -"is" = 'sound/vox/is.wav', -"it" = 'sound/vox/it.wav', -"johnson" = 'sound/vox/johnson.wav', -"juliet" = 'sound/vox/juliet.wav', -"key" = 'sound/vox/key.wav', -"kill" = 'sound/vox/kill.wav', -"kilo" = 'sound/vox/kilo.wav', -"kit" = 'sound/vox/kit.wav', -"lab" = 'sound/vox/lab.wav', -"lambda" = 'sound/vox/lambda.wav', -"laser" = 'sound/vox/laser.wav', -"last" = 'sound/vox/last.wav', -"launch" = 'sound/vox/launch.wav', -"leak" = 'sound/vox/leak.wav', -"leave" = 'sound/vox/leave.wav', -"left" = 'sound/vox/left.wav', -"legal" = 'sound/vox/legal.wav', -"level" = 'sound/vox/level.wav', -"lever" = 'sound/vox/lever.wav', -"lie" = 'sound/vox/lie.wav', -"lieutenant" = 'sound/vox/lieutenant.wav', -"life" = 'sound/vox/life.wav', -"light" = 'sound/vox/light.wav', -"lima" = 'sound/vox/lima.wav', -"liquid" = 'sound/vox/liquid.wav', -"loading" = 'sound/vox/loading.wav', -"locate" = 'sound/vox/locate.wav', -"located" = 'sound/vox/located.wav', -"location" = 'sound/vox/location.wav', -"lock" = 'sound/vox/lock.wav', -"locked" = 'sound/vox/locked.wav', -"locker" = 'sound/vox/locker.wav', -"lockout" = 'sound/vox/lockout.wav', -"lower" = 'sound/vox/lower.wav', -"lowest" = 'sound/vox/lowest.wav', -"magnetic" = 'sound/vox/magnetic.wav', -"main" = 'sound/vox/main.wav', -"maintenance" = 'sound/vox/maintenance.wav', -"malfunction" = 'sound/vox/malfunction.wav', -"man" = 'sound/vox/man.wav', -"mass" = 'sound/vox/mass.wav', -"materials" = 'sound/vox/materials.wav', -"maximum" = 'sound/vox/maximum.wav', -"may" = 'sound/vox/may.wav', -"medical" = 'sound/vox/medical.wav', -"men" = 'sound/vox/men.wav', -"mercy" = 'sound/vox/mercy.wav', -"mesa" = 'sound/vox/mesa.wav', -"message" = 'sound/vox/message.wav', -"meter" = 'sound/vox/meter.wav', -"micro" = 'sound/vox/micro.wav', -"middle" = 'sound/vox/middle.wav', -"mike" = 'sound/vox/mike.wav', -"miles" = 'sound/vox/miles.wav', -"military" = 'sound/vox/military.wav', -"milli" = 'sound/vox/milli.wav', -"million" = 'sound/vox/million.wav', -"minefield" = 'sound/vox/minefield.wav', -"minimum" = 'sound/vox/minimum.wav', -"minutes" = 'sound/vox/minutes.wav', -"mister" = 'sound/vox/mister.wav', -"mode" = 'sound/vox/mode.wav', -"motor" = 'sound/vox/motor.wav', -"motorpool" = 'sound/vox/motorpool.wav', -"move" = 'sound/vox/move.wav', -"must" = 'sound/vox/must.wav', -"nearest" = 'sound/vox/nearest.wav', -"nice" = 'sound/vox/nice.wav', -"nine" = 'sound/vox/nine.wav', -"nineteen" = 'sound/vox/nineteen.wav', -"ninety" = 'sound/vox/ninety.wav', -"no" = 'sound/vox/no.wav', -"nominal" = 'sound/vox/nominal.wav', -"north" = 'sound/vox/north.wav', -"not" = 'sound/vox/not.wav', -"november" = 'sound/vox/november.wav', -"now" = 'sound/vox/now.wav', -"number" = 'sound/vox/number.wav', -"objective" = 'sound/vox/objective.wav', -"observation" = 'sound/vox/observation.wav', -"of" = 'sound/vox/of.wav', -"officer" = 'sound/vox/officer.wav', -"ok" = 'sound/vox/ok.wav', -"on" = 'sound/vox/on.wav', -"one" = 'sound/vox/one.wav', -"open" = 'sound/vox/open.wav', -"operating" = 'sound/vox/operating.wav', -"operations" = 'sound/vox/operations.wav', -"operative" = 'sound/vox/operative.wav', -"option" = 'sound/vox/option.wav', -"order" = 'sound/vox/order.wav', -"organic" = 'sound/vox/organic.wav', -"oscar" = 'sound/vox/oscar.wav', -"out" = 'sound/vox/out.wav', -"outside" = 'sound/vox/outside.wav', -"over" = 'sound/vox/over.wav', -"overload" = 'sound/vox/overload.wav', -"override" = 'sound/vox/override.wav', -"pacify" = 'sound/vox/pacify.wav', -"pain" = 'sound/vox/pain.wav', -"pal" = 'sound/vox/pal.wav', -"panel" = 'sound/vox/panel.wav', -"percent" = 'sound/vox/percent.wav', -"perimeter" = 'sound/vox/perimeter.wav', -"permitted" = 'sound/vox/permitted.wav', -"personnel" = 'sound/vox/personnel.wav', -"pipe" = 'sound/vox/pipe.wav', -"plant" = 'sound/vox/plant.wav', -"platform" = 'sound/vox/platform.wav', -"please" = 'sound/vox/please.wav', -"point" = 'sound/vox/point.wav', -"portal" = 'sound/vox/portal.wav', -"power" = 'sound/vox/power.wav', -"presence" = 'sound/vox/presence.wav', -"press" = 'sound/vox/press.wav', -"primary" = 'sound/vox/primary.wav', -"proceed" = 'sound/vox/proceed.wav', -"processing" = 'sound/vox/processing.wav', -"progress" = 'sound/vox/progress.wav', -"proper" = 'sound/vox/proper.wav', -"propulsion" = 'sound/vox/propulsion.wav', -"prosecute" = 'sound/vox/prosecute.wav', -"protective" = 'sound/vox/protective.wav', -"push" = 'sound/vox/push.wav', -"quantum" = 'sound/vox/quantum.wav', -"quebec" = 'sound/vox/quebec.wav', -"question" = 'sound/vox/question.wav', -"questioning" = 'sound/vox/questioning.wav', -"quick" = 'sound/vox/quick.wav', -"quit" = 'sound/vox/quit.wav', -"radiation" = 'sound/vox/radiation.wav', -"radioactive" = 'sound/vox/radioactive.wav', -"rads" = 'sound/vox/rads.wav', -"rapid" = 'sound/vox/rapid.wav', -"reach" = 'sound/vox/reach.wav', -"reached" = 'sound/vox/reached.wav', -"reactor" = 'sound/vox/reactor.wav', -"red" = 'sound/vox/red.wav', -"relay" = 'sound/vox/relay.wav', -"released" = 'sound/vox/released.wav', -"remaining" = 'sound/vox/remaining.wav', -"renegade" = 'sound/vox/renegade.wav', -"repair" = 'sound/vox/repair.wav', -"report" = 'sound/vox/report.wav', -"reports" = 'sound/vox/reports.wav', -"required" = 'sound/vox/required.wav', -"research" = 'sound/vox/research.wav', -"resevoir" = 'sound/vox/resevoir.wav', -"resistance" = 'sound/vox/resistance.wav', -"right" = 'sound/vox/right.wav', -"rocket" = 'sound/vox/rocket.wav', -"roger" = 'sound/vox/roger.wav', -"romeo" = 'sound/vox/romeo.wav', -"room" = 'sound/vox/room.wav', -"round" = 'sound/vox/round.wav', -"run" = 'sound/vox/run.wav', -"safe" = 'sound/vox/safe.wav', -"safety" = 'sound/vox/safety.wav', -"sargeant" = 'sound/vox/sargeant.wav', -"satellite" = 'sound/vox/satellite.wav', -"save" = 'sound/vox/save.wav', -"science" = 'sound/vox/science.wav', -"scream" = 'sound/vox/scream.wav', -"screen" = 'sound/vox/screen.wav', -"search" = 'sound/vox/search.wav', -"second" = 'sound/vox/second.wav', -"secondary" = 'sound/vox/secondary.wav', -"seconds" = 'sound/vox/seconds.wav', -"sector" = 'sound/vox/sector.wav', -"secure" = 'sound/vox/secure.wav', -"secured" = 'sound/vox/secured.wav', -"security" = 'sound/vox/security.wav', -"select" = 'sound/vox/select.wav', -"selected" = 'sound/vox/selected.wav', -"service" = 'sound/vox/service.wav', -"seven" = 'sound/vox/seven.wav', -"seventeen" = 'sound/vox/seventeen.wav', -"seventy" = 'sound/vox/seventy.wav', -"severe" = 'sound/vox/severe.wav', -"sewage" = 'sound/vox/sewage.wav', -"sewer" = 'sound/vox/sewer.wav', -"shield" = 'sound/vox/shield.wav', -"shipment" = 'sound/vox/shipment.wav', -"shock" = 'sound/vox/shock.wav', -"shoot" = 'sound/vox/shoot.wav', -"shower" = 'sound/vox/shower.wav', -"shut" = 'sound/vox/shut.wav', -"side" = 'sound/vox/side.wav', -"sierra" = 'sound/vox/sierra.wav', -"sight" = 'sound/vox/sight.wav', -"silo" = 'sound/vox/silo.wav', -"six" = 'sound/vox/six.wav', -"sixteen" = 'sound/vox/sixteen.wav', -"sixty" = 'sound/vox/sixty.wav', -"slime" = 'sound/vox/slime.wav', -"slow" = 'sound/vox/slow.wav', -"soldier" = 'sound/vox/soldier.wav', -"some" = 'sound/vox/some.wav', -"someone" = 'sound/vox/someone.wav', -"something" = 'sound/vox/something.wav', -"son" = 'sound/vox/son.wav', -"sorry" = 'sound/vox/sorry.wav', -"south" = 'sound/vox/south.wav', -"squad" = 'sound/vox/squad.wav', -"square" = 'sound/vox/square.wav', -"stairway" = 'sound/vox/stairway.wav', -"status" = 'sound/vox/status.wav', -"sterile" = 'sound/vox/sterile.wav', -"sterilization" = 'sound/vox/sterilization.wav', -"storage" = 'sound/vox/storage.wav', -"sub" = 'sound/vox/sub.wav', -"subsurface" = 'sound/vox/subsurface.wav', -"sudden" = 'sound/vox/sudden.wav', -"suit" = 'sound/vox/suit.wav', -"superconducting" = 'sound/vox/superconducting.wav', -"supercooled" = 'sound/vox/supercooled.wav', -"supply" = 'sound/vox/supply.wav', -"surface" = 'sound/vox/surface.wav', -"surrender" = 'sound/vox/surrender.wav', -"surround" = 'sound/vox/surround.wav', -"surrounded" = 'sound/vox/surrounded.wav', -"switch" = 'sound/vox/switch.wav', -"system" = 'sound/vox/system.wav', -"systems" = 'sound/vox/systems.wav', -"tactical" = 'sound/vox/tactical.wav', -"take" = 'sound/vox/take.wav', -"talk" = 'sound/vox/talk.wav', -"tango" = 'sound/vox/tango.wav', -"tank" = 'sound/vox/tank.wav', -"target" = 'sound/vox/target.wav', -"team" = 'sound/vox/team.wav', -"temperature" = 'sound/vox/temperature.wav', -"temporal" = 'sound/vox/temporal.wav', -"ten" = 'sound/vox/ten.wav', -"terminal" = 'sound/vox/terminal.wav', -"terminated" = 'sound/vox/terminated.wav', -"termination" = 'sound/vox/termination.wav', -"test" = 'sound/vox/test.wav', -"that" = 'sound/vox/that.wav', -"the" = 'sound/vox/the.wav', -"then" = 'sound/vox/then.wav', -"there" = 'sound/vox/there.wav', -"third" = 'sound/vox/third.wav', -"thirteen" = 'sound/vox/thirteen.wav', -"thirty" = 'sound/vox/thirty.wav', -"this" = 'sound/vox/this.wav', -"those" = 'sound/vox/those.wav', -"thousand" = 'sound/vox/thousand.wav', -"threat" = 'sound/vox/threat.wav', -"three" = 'sound/vox/three.wav', -"through" = 'sound/vox/through.wav', -"time" = 'sound/vox/time.wav', -"to" = 'sound/vox/to.wav', -"top" = 'sound/vox/top.wav', -"topside" = 'sound/vox/topside.wav', -"touch" = 'sound/vox/touch.wav', -"towards" = 'sound/vox/towards.wav', -"track" = 'sound/vox/track.wav', -"train" = 'sound/vox/train.wav', -"transportation" = 'sound/vox/transportation.wav', -"truck" = 'sound/vox/truck.wav', -"tunnel" = 'sound/vox/tunnel.wav', -"turn" = 'sound/vox/turn.wav', -"turret" = 'sound/vox/turret.wav', -"twelve" = 'sound/vox/twelve.wav', -"twenty" = 'sound/vox/twenty.wav', -"two" = 'sound/vox/two.wav', -"unauthorized" = 'sound/vox/unauthorized.wav', -"under" = 'sound/vox/under.wav', -"uniform" = 'sound/vox/uniform.wav', -"unlocked" = 'sound/vox/unlocked.wav', -"until" = 'sound/vox/until.wav', -"up" = 'sound/vox/up.wav', -"upper" = 'sound/vox/upper.wav', -"uranium" = 'sound/vox/uranium.wav', -"us" = 'sound/vox/us.wav', -"usa" = 'sound/vox/usa.wav', -"use" = 'sound/vox/use.wav', -"used" = 'sound/vox/used.wav', -"user" = 'sound/vox/user.wav', -"vacate" = 'sound/vox/vacate.wav', -"valid" = 'sound/vox/valid.wav', -"vapor" = 'sound/vox/vapor.wav', -"vent" = 'sound/vox/vent.wav', -"ventillation" = 'sound/vox/ventillation.wav', -"victor" = 'sound/vox/victor.wav', -"violated" = 'sound/vox/violated.wav', -"violation" = 'sound/vox/violation.wav', -"voltage" = 'sound/vox/voltage.wav', -"vox_login" = 'sound/vox/vox_login.wav', -"walk" = 'sound/vox/walk.wav', -"wall" = 'sound/vox/wall.wav', -"want" = 'sound/vox/want.wav', -"wanted" = 'sound/vox/wanted.wav', -"warm" = 'sound/vox/warm.wav', -"warn" = 'sound/vox/warn.wav', -"warning" = 'sound/vox/warning.wav', -"waste" = 'sound/vox/waste.wav', -"water" = 'sound/vox/water.wav', -"we" = 'sound/vox/we.wav', -"weapon" = 'sound/vox/weapon.wav', -"west" = 'sound/vox/west.wav', -"whiskey" = 'sound/vox/whiskey.wav', -"white" = 'sound/vox/white.wav', -"wilco" = 'sound/vox/wilco.wav', -"will" = 'sound/vox/will.wav', -"with" = 'sound/vox/with.wav', -"without" = 'sound/vox/without.wav', -"woop" = 'sound/vox/woop.wav', -"xeno" = 'sound/vox/xeno.wav', -"yankee" = 'sound/vox/yankee.wav', -"yards" = 'sound/vox/yards.wav', -"year" = 'sound/vox/year.wav', -"yellow" = 'sound/vox/yellow.wav', -"yes" = 'sound/vox/yes.wav', -"you" = 'sound/vox/you.wav', -"your" = 'sound/vox/your.wav', -"yourself" = 'sound/vox/yourself.wav', -"zero" = 'sound/vox/zero.wav', -"zone" = 'sound/vox/zone.wav', -"zulu" = 'sound/vox/zulu.wav'*/) \ No newline at end of file +/client/proc/preload_vox() + var/list/vox_files = flist(VOX_PATH) + for(var/file in vox_files) + // src << "Downloading [file]" + var/sound/S = sound("[VOX_PATH][file]") + src << browse_rsc(S) \ No newline at end of file