diff --git a/code/__defines/atoms_movable.dm b/code/__defines/atoms_movable.dm
index 6d8b3c4569..634d92c2a7 100644
--- a/code/__defines/atoms_movable.dm
+++ b/code/__defines/atoms_movable.dm
@@ -2,6 +2,10 @@
** Holds defines for code\game\atoms_movable.dm to avoid magic numbers and potential unexpected overwrites down the line
*/
+#define NON_LISTENING_ATOM 0
+#define LISTENING_ATOM 1
+#define LISTENING_PLAYER 2
+
#define DEFAULT_ICON_SCALE_X 1
#define DEFAULT_ICON_SCALE_Y 1
#define DEFAULT_ICON_ROTATION 0
diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm
index 362d72ecf2..e0411079ee 100644
--- a/code/__defines/misc.dm
+++ b/code/__defines/misc.dm
@@ -80,8 +80,7 @@
#define WAIT_FINISH 4
#define DO_AUTOPILOT 5
-// Setting this much higher than 1024 could allow spammers to DOS the server easily.
-#define MAX_MESSAGE_LEN 4096 //VOREStation Edit - I'm not sure about "easily". It can be a little longer.
+#define MAX_MESSAGE_LEN 4096
#define MAX_PAPER_MESSAGE_LEN 6144
#define MAX_BOOK_MESSAGE_LEN 24576
#define MAX_RECORD_LENGTH 24576
@@ -269,15 +268,15 @@
// Second argument is the path the list is expected to contain. Note that children will also get added to the global list.
// If the GLOB system is ever ported, you can change this macro in one place and have less work to do than you otherwise would.
#define GLOBAL_LIST_BOILERPLATE(LIST_NAME, PATH)\
-var/global/list/##LIST_NAME = list();\
+GLOBAL_LIST_EMPTY(##LIST_NAME);\
##PATH/Initialize(mapload, ...)\
{\
- ##LIST_NAME += src;\
+ GLOB.##LIST_NAME += src;\
return ..();\
}\
##PATH/Destroy(force, ...)\
{\
- ##LIST_NAME -= src;\
+ GLOB.##LIST_NAME -= src;\
return ..();\
}\
@@ -444,6 +443,13 @@ var/global/list/##LIST_NAME = list();\
#define VOLUME_CHANNEL_VORE "Vore"
#define VOLUME_CHANNEL_DOORS "Doors"
#define VOLUME_CHANNEL_INSTRUMENTS "Instruments"
+#define VOLUME_CHANNEL_WEATHER "Weather"
+#define VOLUME_CHANNEL_SPECIES_SOUNDS "Species Sounds (Verbal Injury Feedback)"
+#define VOLUME_CHANNEL_HUD_WARNINGS "SS13 HUD (Clientside-only sounds)" //NYI
+#define VOLUME_CHANNEL_DEATH_SOUNDS "Death Sounds"
+#define VOLUME_CHANNEL_INJURY_SOUNDS "Mob Injury Sounds (Non-Verbal Feedback)" //NYI
+#define VOLUME_CHANNEL_MACHINERY "Machinery Noises"
+#define VOLUME_CHANNEL_MACHINERY_IDLE "Machinery Idle Noises"
// Make sure you update this or clients won't be able to adjust the channel
GLOBAL_LIST_INIT(all_volume_channels, list(
@@ -452,7 +458,14 @@ GLOBAL_LIST_INIT(all_volume_channels, list(
VOLUME_CHANNEL_ALARMS,
VOLUME_CHANNEL_VORE,
VOLUME_CHANNEL_DOORS,
- VOLUME_CHANNEL_INSTRUMENTS
+ VOLUME_CHANNEL_INSTRUMENTS,
+ VOLUME_CHANNEL_WEATHER,
+ VOLUME_CHANNEL_SPECIES_SOUNDS,
+ VOLUME_CHANNEL_HUD_WARNINGS,
+ VOLUME_CHANNEL_DEATH_SOUNDS,
+ VOLUME_CHANNEL_INJURY_SOUNDS,
+ VOLUME_CHANNEL_MACHINERY,
+ VOLUME_CHANNEL_MACHINERY_IDLE
))
#define APPEARANCECHANGER_CHANGED_RACE "Race"
diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm
index f0cd6a8e9b..8d969f45af 100644
--- a/code/_helpers/game.dm
+++ b/code/_helpers/game.dm
@@ -68,6 +68,7 @@
return heard
+
/proc/isStationLevel(var/level)
return level in using_map.station_levels
@@ -218,25 +219,22 @@
return hear
-
/proc/get_mobs_in_radio_ranges(var/list/obj/item/radio/radios)
. = list()
// Returns a list of mobs who can hear any of the radios given in @radios
- var/list/speaker_coverage = list()
for(var/obj/item/radio/R as anything in radios)
- var/turf/speaker = get_turf(R)
- if(speaker)
- for(var/turf/T in hear(R.canhear_range,speaker))
- speaker_coverage[T] = R
+ if(get_turf(R))
+ for(var/turf/T in R.can_broadcast_to())
+ for (var/atom/movable/hearing in T)
+ if (hearing.recursive_listeners)
+ . |= hearing.recursive_listeners
-
- // Try to find all the players who can hear the message
- for(var/i = 1; i <= player_list.len; i++)
- var/mob/M = player_list[i]
- if(M.can_hear_radio(speaker_coverage))
- . += M
- return .
+ for (var/mob/M as anything in .)
+ if (!istype(M) || !M.client)
+ . -= M
+ for (var/mob/observer/O in player_list)
+ . |= O
/mob/proc/can_hear_radio(var/list/hearturfs)
return FALSE
diff --git a/code/coalesce.dm b/code/coalesce.dm
new file mode 100644
index 0000000000..2d40ccff9c
--- /dev/null
+++ b/code/coalesce.dm
@@ -0,0 +1,5 @@
+/proc/coalesce(...)
+ for (var/arg in args)
+ if (arg)
+ return arg
+ return null
diff --git a/code/controllers/subsystems/plants.dm b/code/controllers/subsystems/plants.dm
index 3f278da422..dbcc40e8f9 100644
--- a/code/controllers/subsystems/plants.dm
+++ b/code/controllers/subsystems/plants.dm
@@ -71,7 +71,7 @@ SUBSYSTEM_DEF(plants)
// Make sure any seed packets that were mapped in are updated
// correctly (since the seed datums did not exist a tick ago).
- for(var/obj/item/seeds/S in all_seed_packs)
+ for(var/obj/item/seeds/S in GLOB.all_seed_packs)
S.update_seed()
//Might as well mask the gene types while we're at it.
diff --git a/code/datums/looping_sounds/_looping_sound.dm b/code/datums/looping_sounds/_looping_sound.dm
index d842dd8336..e00e495ae3 100644
--- a/code/datums/looping_sounds/_looping_sound.dm
+++ b/code/datums/looping_sounds/_looping_sound.dm
@@ -34,6 +34,7 @@
var/opacity_check
var/pref_check
var/exclusive
+ var/volume_chan
var/timerid
var/started
diff --git a/code/datums/looping_sounds/weather_sounds.dm b/code/datums/looping_sounds/weather_sounds.dm
index 41210df105..f893f20a19 100644
--- a/code/datums/looping_sounds/weather_sounds.dm
+++ b/code/datums/looping_sounds/weather_sounds.dm
@@ -1,5 +1,6 @@
/datum/looping_sound/weather
pref_check = /datum/preference/toggle/weather_sounds
+ volume_chan = VOLUME_CHANNEL_WEATHER
/datum/looping_sound/weather/outside_blizzard
mid_sounds = list(
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 2f9946c9e7..1c855aa9ee 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -31,6 +31,8 @@
var/image/cloaked_selfimage //The image we use for our client to let them see where we are
var/belly_cycles = 0 // Counting current belly process cycles for autotransfer.
var/autotransferable = TRUE // Toggle for autotransfer mechanics.
+ var/recursive_listeners
+ var/listening_recursive = NON_LISTENING_ATOM
/atom/movable/Initialize(mapload)
. = ..()
@@ -57,6 +59,9 @@
AddComponent(/datum/component/overlay_lighting, starts_on = light_on)
if(MOVABLE_LIGHT_DIRECTIONAL)
AddComponent(/datum/component/overlay_lighting, is_directional = TRUE, starts_on = light_on)
+ if (listening_recursive)
+ set_listening(listening_recursive)
+
/atom/movable/Destroy()
if(em_block)
@@ -84,7 +89,8 @@
if(orbiting)
stop_orbit()
- QDEL_NULL(riding_datum) //VOREStation Add
+ QDEL_NULL(riding_datum)
+ set_listening(NON_LISTENING_ATOM)
/atom/movable/vv_edit_var(var_name, var_value)
if(var_name in GLOB.VVpixelmovement) //Pixel movement is not yet implemented, changing this will break everything irreversibly.
@@ -674,3 +680,45 @@
/atom/movable/proc/exit_belly(obj/belly/B)
return
+
+/atom/movable/proc/set_listening(var/set_to)
+ if (listening_recursive && !set_to)
+ LAZYREMOVE(recursive_listeners, src)
+ if (!LAZYLEN(recursive_listeners))
+ for (var/atom/movable/location as anything in get_nested_locs(src))
+ LAZYREMOVE(location.recursive_listeners, src)
+ if (!listening_recursive && set_to)
+ LAZYOR(recursive_listeners, src)
+ for (var/atom/movable/location as anything in get_nested_locs(src))
+ LAZYOR(location.recursive_listeners, src)
+ listening_recursive = set_to
+
+///Returns a list of all locations (except the area) the movable is within.
+/proc/get_nested_locs(atom/movable/atom_on_location, include_turf = FALSE)
+ . = list()
+ var/atom/location = atom_on_location.loc
+ var/turf/our_turf = get_turf(atom_on_location)
+ while(location && location != our_turf)
+ . += location
+ location = location.loc
+ if(our_turf && include_turf) //At this point, only the turf is left, provided it exists.
+ . += our_turf
+
+/atom/movable/Exited(atom/movable/gone, atom/new_loc)
+ . = ..()
+
+ if (!LAZYLEN(gone.recursive_listeners))
+ return
+ for (var/atom/movable/location as anything in get_nested_locs(src)|src)
+ LAZYREMOVE(location.recursive_listeners, gone.recursive_listeners)
+
+/atom/movable/Entered(atom/movable/arrived, atom/old_loc)
+ . = ..()
+
+ if (!LAZYLEN(arrived.recursive_listeners))
+ return
+ for (var/atom/movable/location as anything in get_nested_locs(src)|src)
+ LAZYOR(location.recursive_listeners, arrived.recursive_listeners)
+
+/atom/movable/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2)
+ return
diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm
index e9f8800bbf..21880fda24 100644
--- a/code/game/machinery/computer/ai_core.dm
+++ b/code/game/machinery/computer/ai_core.dm
@@ -265,7 +265,7 @@ GLOBAL_LIST_BOILERPLATE(all_deactivated_AI_cores, /obj/structure/AIcore/deactiva
set category = "Admin.Silicon"
var/list/cores = list()
- for(var/obj/structure/AIcore/deactivated/D in all_deactivated_AI_cores)
+ for(var/obj/structure/AIcore/deactivated/D in GLOB.all_deactivated_AI_cores)
cores["[D] ([D.loc.loc])"] = D
var/id = tgui_input_list(usr, "Which core?", "Toggle AI Core Latejoin", cores)
diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm
index 96c73dde76..a3f03dcd9c 100644
--- a/code/game/machinery/computer/prisoner.dm
+++ b/code/game/machinery/computer/prisoner.dm
@@ -33,7 +33,7 @@
var/list/chemImplants = list()
var/list/trackImplants = list()
if(screen)
- for(var/obj/item/implant/chem/C in all_chem_implants)
+ for(var/obj/item/implant/chem/C in GLOB.all_chem_implants)
var/turf/T = get_turf(C)
if(!T)
continue
@@ -44,7 +44,7 @@
"units" = C.reagents.total_volume,
"ref" = "\ref[C]"
)))
- for(var/obj/item/implant/tracking/track in all_tracking_implants)
+ for(var/obj/item/implant/tracking/track in GLOB.all_tracking_implants)
var/turf/T = get_turf(track)
if(!T)
continue
diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm
index 06a57d1099..4697c98675 100644
--- a/code/game/machinery/doors/brigdoors.dm
+++ b/code/game/machinery/doors/brigdoors.dm
@@ -49,7 +49,7 @@
if(F.id == id)
LAZYADD(targets,F)
- for(var/obj/structure/closet/secure_closet/brig/C in all_brig_closets)
+ for(var/obj/structure/closet/secure_closet/brig/C in GLOB.all_brig_closets)
if(C.id == id)
LAZYADD(targets,C)
diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm
index 0c2e10ce8f..fd9f20f43f 100644
--- a/code/game/machinery/newscaster.dm
+++ b/code/game/machinery/newscaster.dm
@@ -99,7 +99,7 @@
alert_readers(FC.announcement)
/datum/feed_network/proc/alert_readers(var/annoncement)
- for(var/obj/machinery/newscaster/NEWSCASTER in allCasters)
+ for(var/obj/machinery/newscaster/NEWSCASTER in GLOB.allCasters)
NEWSCASTER.newsAlert(annoncement)
NEWSCASTER.update_icon()
@@ -173,7 +173,7 @@ GLOBAL_LIST_BOILERPLATE(allCasters, /obj/machinery/newscaster)
/obj/machinery/newscaster/Initialize(mapload)
..()
- allCasters += src
+ GLOB.allCasters += src
unit_no = ++unit_no_cur
paper_remaining = 15
update_icon()
@@ -184,7 +184,7 @@ GLOBAL_LIST_BOILERPLATE(allCasters, /obj/machinery/newscaster)
update_icon()
/obj/machinery/newscaster/Destroy()
- allCasters -= src
+ GLOB.allCasters -= src
node = null
return ..()
@@ -541,7 +541,7 @@ GLOBAL_LIST_BOILERPLATE(allCasters, /obj/machinery/newscaster)
var/choice = tgui_alert(ui.user, "Please confirm Wanted Issue removal","Network Security Handler",list("Confirm","Cancel"))
if(choice=="Confirm")
news_network.wanted_issue = null
- for(var/obj/machinery/newscaster/NEWSCASTER in allCasters)
+ for(var/obj/machinery/newscaster/NEWSCASTER in GLOB.allCasters)
NEWSCASTER.update_icon()
set_temp("Wanted issue taken down.", "success", FALSE)
return TRUE
diff --git a/code/game/machinery/pointdefense.dm b/code/game/machinery/pointdefense.dm
index d17bad63f7..edaf6e2625 100644
--- a/code/game/machinery/pointdefense.dm
+++ b/code/game/machinery/pointdefense.dm
@@ -22,7 +22,7 @@ GLOBAL_LIST_BOILERPLATE(pointdefense_turrets, /obj/machinery/power/pointdefense)
. = ..()
if(id_tag)
//No more than 1 controller please.
- for(var/obj/machinery/pointdefense_control/PC as anything in pointdefense_controllers)
+ for(var/obj/machinery/pointdefense_control/PC as anything in GLOB.pointdefense_controllers)
if(PC != src && PC.id_tag == id_tag)
warning("Two [src] with the same id_tag of [id_tag]")
id_tag = null
@@ -72,8 +72,8 @@ GLOBAL_LIST_BOILERPLATE(pointdefense_turrets, /obj/machinery/power/pointdefense)
var/list/turrets = list()
if(id_tag)
var/list/connected_z_levels = GetConnectedZlevels(get_z(src))
- for(var/i = 1 to LAZYLEN(pointdefense_turrets))
- var/obj/machinery/power/pointdefense/PD = pointdefense_turrets[i]
+ for(var/i = 1 to LAZYLEN(GLOB.pointdefense_turrets))
+ var/obj/machinery/power/pointdefense/PD = GLOB.pointdefense_turrets[i]
if(!(PD.id_tag == id_tag && (get_z(PD) in connected_z_levels)))
continue
var/list/turret = list()
@@ -95,7 +95,7 @@ GLOBAL_LIST_BOILERPLATE(pointdefense_turrets, /obj/machinery/power/pointdefense)
new_ident = sanitize(new_ident,MAX_NAME_LEN)
if(new_ident && new_ident != id_tag && user.Adjacent(src) && CanInteract(user, GLOB.tgui_physical_state))
// Check for duplicate controllers with this ID
- for(var/obj/machinery/pointdefense_control/PC as anything in pointdefense_controllers)
+ for(var/obj/machinery/pointdefense_control/PC as anything in GLOB.pointdefense_controllers)
if(PC != src && PC.id_tag == id_tag)
to_chat(user, span_warning("The [new_ident] network already has a controller."))
return
@@ -200,7 +200,7 @@ GLOBAL_LIST_BOILERPLATE(pointdefense_turrets, /obj/machinery/power/pointdefense)
if(!id_tag)
return null
var/list/connected_z_levels = GetConnectedZlevels(get_z(src))
- for(var/obj/machinery/pointdefense_control/PDC as anything in pointdefense_controllers)
+ for(var/obj/machinery/pointdefense_control/PDC as anything in GLOB.pointdefense_controllers)
if(PDC.id_tag == id_tag && (get_z(PDC) in connected_z_levels))
return PDC
diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm
index e02a530974..04513432e8 100644
--- a/code/game/machinery/syndicatebeacon.dm
+++ b/code/game/machinery/syndicatebeacon.dm
@@ -92,7 +92,7 @@
if(user)
to_chat(user, span_notice("The connected wire doesn't have enough current."))
return
- for(var/obj/singularity/singulo in all_singularities)
+ for(var/obj/singularity/singulo in GLOB.all_singularities)
if(singulo.z == z)
singulo.target = src
icon_state = "[icontype]1"
@@ -102,7 +102,7 @@
to_chat(user, span_notice("You activate the beacon."))
/obj/machinery/power/singularity_beacon/proc/Deactivate(mob/user = null)
- for(var/obj/singularity/singulo in all_singularities)
+ for(var/obj/singularity/singulo in GLOB.all_singularities)
if(singulo.target == src)
singulo.target = null
icon_state = "[icontype]0"
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index da9c2f0556..746af7fa58 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -1,5 +1,5 @@
+#define CANBROADCAST_INNERBOX 0.7071067811865476 //This is sqrt(2)/2
// Access check is of the type requires one. These have been carefully selected to avoid allowing the janitor to see channels he shouldn't
-//VOREStation Edit Start - Updating this for Virgo
var/global/list/default_internal_channels = list(
num2text(PUB_FREQ) = list(),
num2text(AI_FREQ) = list(access_synth),
@@ -14,7 +14,7 @@ var/global/list/default_internal_channels = list(
num2text(SCI_FREQ) = list(access_tox, access_robotics, access_xenobiology),
num2text(SUP_FREQ) = list(access_cargo, access_mining_station),
num2text(SRV_FREQ) = list(access_janitor, access_library, access_hydroponics, access_bar, access_kitchen),
- num2text(EXP_FREQ) = list(access_explorer) //VOREStation Edit
+ num2text(EXP_FREQ) = list(access_explorer)
)
var/global/list/default_medbay_channels = list(
@@ -22,7 +22,6 @@ var/global/list/default_medbay_channels = list(
num2text(MED_FREQ) = list(),
num2text(MED_I_FREQ) = list()
)
-//VOREStation Edit End
/obj/item/radio
icon = 'icons/obj/radio_vr.dmi'
@@ -298,7 +297,7 @@ var/global/list/default_medbay_channels = list(
GLOBAL_DATUM(autospeaker, /mob/living/silicon/ai/announcer)
-/obj/item/radio/proc/autosay(var/message, var/from, var/channel, var/list/zlevels, var/states) //VOREStation Edit
+/obj/item/radio/proc/autosay(var/message, var/from, var/channel, var/list/zlevels, var/states)
if(!GLOB.autospeaker)
return
@@ -315,15 +314,13 @@ GLOBAL_DATUM(autospeaker, /mob/living/silicon/ai/announcer)
if(!LAZYLEN(zlevels))
zlevels = list(0)
- //VOREStation Edit Start
if(!states)
states = "states"
- //VOREStation Edit End
GLOB.autospeaker.SetName(from)
Broadcast_Message(connection, GLOB.autospeaker,
0, "*garbled automated announcement*", src,
message_to_multilingual(message, GLOB.all_languages[LANGUAGE_GALCOM]), from, "Automated Announcement", from, "synthesized voice",
- DATA_FAKE, 0, zlevels, connection.frequency, states) //VOREStation Edit
+ DATA_FAKE, 0, zlevels, connection.frequency, states)
// Interprets the message mode when talking into a radio, possibly returning a connection datum
/obj/item/radio/proc/handle_message_mode(mob/living/M as mob, list/message_pieces, message_mode)
@@ -769,3 +766,78 @@ GLOBAL_DATUM(autospeaker, /mob/living/silicon/ai/announcer)
/obj/item/radio/phone/medbay/Initialize(mapload)
. = ..()
internal_channels = default_medbay_channels.Copy()
+
+/obj/item/radio/proc/can_broadcast_to()
+ var/list/output = list()
+ var/turf/T = get_turf(src)
+ var/dnumber = canhear_range*CANBROADCAST_INNERBOX
+ for(var/cand_x = max(0, T.x - canhear_range), cand_x <= T.x + canhear_range, cand_x++)
+ for(var/cand_y = max(0, T.y - canhear_range), cand_y <= T.y + canhear_range, cand_y++)
+ var/turf/cand_turf = locate(cand_x,cand_y,T.z)
+ if(!cand_turf)
+ continue
+ if((abs(T.x - cand_x) < dnumber) || (abs(T.y - cand_y) < dnumber))
+ output += cand_turf
+ continue
+ if(sqrt((T.x - cand_x)**2 + (T.y - cand_y)**2) <= canhear_range)
+ output += cand_turf
+ continue
+ return output
+/obj/item/radio/intercom
+ var/list/broadcast_tiles
+
+/obj/item/radio/intercom/proc/update_broadcast_tiles()
+ var/list/output = list()
+ var/turf/T = get_turf(src)
+ if(!T)
+ return
+ var/dnumber = canhear_range*CANBROADCAST_INNERBOX
+ for(var/cand_x = max(0, T.x - canhear_range), cand_x <= T.x + canhear_range, cand_x++)
+ for(var/cand_y = max(0, T.y - canhear_range), cand_y <= T.y + canhear_range, cand_y++)
+ var/turf/cand_turf = locate(cand_x,cand_y,T.z)
+ if(!cand_turf)
+ continue
+ if((abs(T.x - cand_x) < dnumber) || (abs(T.y - cand_y) < dnumber))
+ output += cand_turf
+ continue
+ if(sqrt((T.x - cand_x)**2 + (T.y - cand_y)**2) <= canhear_range)
+ output += cand_turf
+ continue
+ broadcast_tiles = output
+
+/obj/item/radio/intercom/forceMove(atom/destination)
+ . = ..()
+ update_broadcast_tiles()
+
+/obj/item/radio/intercom/Initialize(mapload)
+ . = ..()
+ update_broadcast_tiles()
+
+/obj/item/radio/intercom/can_broadcast_to()
+ if(!broadcast_tiles)
+ update_broadcast_tiles()
+ return broadcast_tiles
+
+//*Subspace Radio*//
+/obj/item/radio/subspace
+ adhoc_fallback = 1
+ canhear_range = 8
+ desc = "A heavy duty radio that can pick up all manor of shortwave and subspace frequencies. It's a bit bulkier than a normal radio thanks to the extra hardware."
+ description_info = "This radio can broadcast over any headset frequency that the user has access to. It has a shortwave fallback to directly broadcast to all radio equipment on the same Z-Level/Map in the event of a telecommunications failure. This device requires a functioning Telecommunications Network/Relay to send and receive signals meant for headsets. Additionally, the volume knob seems to be stuck on the max setting. You could hear this thing clear across a room... Not good for discretely listening in on secure channels or being stealthy!"
+ icon_state = "radio"
+ name = "subspace radio"
+ subspace_transmission = 1
+ throwforce = 5
+ throw_range = 7
+ throw_speed = 1
+
+//* Bluespace Radio *//
+/obj/item/bluespaceradio/southerncross_prelinked
+ name = "bluespace radio (southerncross)"
+ handset = /obj/item/radio/bluespacehandset/linked/southerncross_prelinked
+
+/obj/item/radio/bluespacehandset/linked/southerncross_prelinked
+ bs_tx_preload_id = "Receiver A" //Transmit to a receiver
+ bs_rx_preload_id = "Broadcaster A" //Recveive from a transmitter
+
+#undef CANBROADCAST_INNERBOX
diff --git a/code/game/objects/items/devices/translocator_vr.dm b/code/game/objects/items/devices/translocator_vr.dm
index 9eec1ba589..233744c69e 100644
--- a/code/game/objects/items/devices/translocator_vr.dm
+++ b/code/game/objects/items/devices/translocator_vr.dm
@@ -116,7 +116,7 @@
/obj/item/perfect_tele/attack_self(mob/user, var/radial_menu_anchor = src)
if(loc_network)
- for(var/obj/item/perfect_tele_beacon/stationary/nb in premade_tele_beacons)
+ for(var/obj/item/perfect_tele_beacon/stationary/nb in GLOB.premade_tele_beacons)
if(nb.tele_network == loc_network)
beacons[nb.tele_name] = nb
loc_network = null //Consumed
diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm
index fa03a626e2..c0dd107cda 100644
--- a/code/game/objects/items/weapons/teleportation.dm
+++ b/code/game/objects/items/weapons/teleportation.dm
@@ -61,7 +61,7 @@ Frequency:
if (sr)
src.temp += span_bold("Located Beacons:") + "
"
- for(var/obj/item/radio/beacon/W in all_beacons)
+ for(var/obj/item/radio/beacon/W in GLOB.all_beacons)
if (W.frequency == src.frequency)
var/turf/tr = get_turf(W)
if (tr.z == sr.z && tr)
@@ -79,7 +79,7 @@ Frequency:
src.temp += "[W.code]-[dir2text(get_dir(sr, tr))]-[direct]
"
src.temp += span_bold("Extraneous Signals:") + "
"
- for (var/obj/item/implant/tracking/W in all_tracking_implants)
+ for (var/obj/item/implant/tracking/W in GLOB.all_tracking_implants)
if (!W.implanted || !(istype(W.loc,/obj/item/organ/external) || ismob(W.loc) || W.malfunction))
continue
@@ -168,7 +168,7 @@ Frequency:
if ((user.get_active_hand() != src || user.stat || user.restrained()))
return
var/count = 0 //num of portals from this teleport in world
- for(var/obj/effect/portal/PO in all_portals)
+ for(var/obj/effect/portal/PO in GLOB.all_portals)
if(PO.creator == src) count++
if(count >= 3)
user.show_message(span_notice("\The [src] is recharging!"))
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 7da409041d..9a232296e5 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -186,9 +186,6 @@
/obj/proc/see_emote(mob/M as mob, text, var/emote_type)
return
-/obj/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2)
- return
-
// Used to mark a turf as containing objects that are dangerous to step onto.
/obj/proc/register_dangerous_to_step()
var/turf/T = get_turf(src)
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index 97fc49c33c..25fbdb9fdb 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -343,7 +343,7 @@ GLOBAL_LIST_BOILERPLATE(all_crematoriums, /obj/structure/morgue/crematorium)
if(..())
return
if(src.allowed(user))
- for (var/obj/structure/morgue/crematorium/C in all_crematoriums)
+ for (var/obj/structure/morgue/crematorium/C in GLOB.all_crematoriums)
if (C.id == id)
if (!C.cremating)
C.cremate(user)
diff --git a/code/game/sound.dm b/code/game/sound.dm
index c9b48f619c..63266b2939 100644
--- a/code/game/sound.dm
+++ b/code/game/sound.dm
@@ -302,6 +302,10 @@
'sound/items/pickup/generic1.ogg',
'sound/items/pickup/generic2.ogg',
'sound/items/pickup/generic3.ogg')
+ if ("powerloaderstep")
+ soundin = pick(
+ 'sound/effects/mech/powerloader_step.ogg',
+ 'sound/effects/mech/powerloader_step2.ogg')
return soundin
//Are these even used? //Yes
@@ -323,3 +327,135 @@ GLOBAL_LIST_INIT(goon_speak_pug_sound, list('sound/talksounds/goon/pug.ogg', 'so
GLOBAL_LIST_INIT(goon_speak_pugg_sound, list('sound/talksounds/goon/pugg.ogg', 'sound/talksounds/goon/pugg_ask.ogg', 'sound/talksounds/goon/pugg_exclaim.ogg'))
GLOBAL_LIST_INIT(goon_speak_roach_sound, list('sound/talksounds/goon/roach.ogg', 'sound/talksounds/goon/roach_ask.ogg', 'sound/talksounds/goon/roach_exclaim.ogg'))
GLOBAL_LIST_INIT(goon_speak_skelly_sound, list('sound/talksounds/goon/skelly.ogg', 'sound/talksounds/goon/skelly_ask.ogg', 'sound/talksounds/goon/skelly_exclaim.ogg'))
+
+
+#define canine_sounds list("cough" = null, "sneeze" = null, "scream" = list('sound/voice/scream/canine/wolf_scream.ogg', 'sound/voice/scream/canine/wolf_scream2.ogg', 'sound/voice/scream/canine/wolf_scream3.ogg', 'sound/voice/scream/canine/wolf_scream4.ogg', 'sound/voice/scream/canine/wolf_scream5.ogg', 'sound/voice/scream/canine/wolf_scream6.ogg'), "pain" = list('sound/voice/pain/canine/wolf_pain.ogg', 'sound/voice/pain/canine/wolf_pain2.ogg', 'sound/voice/pain/canine/wolf_pain3.ogg', 'sound/voice/pain/canine/wolf_pain4.ogg'), "gasp" = list('sound/voice/gasp/canine/wolf_gasp.ogg'), "death" = list('sound/voice/death/canine/wolf_death1.ogg', 'sound/voice/death/canine/wolf_death2.ogg', 'sound/voice/death/canine/wolf_death3.ogg', 'sound/voice/death/canine/wolf_death4.ogg', 'sound/voice/death/canine/wolf_death5.ogg'))
+#define feline_sounds list("cough" = null, "sneeze" = null, "scream" = list('sound/voice/scream/feline/feline_scream.ogg'), "pain" = list('sound/voice/pain/feline/feline_pain.ogg'), "gasp" = list('sound/voice/gasp/feline/feline_gasp.ogg'), "death" = list('sound/voice/death/feline/feline_death.ogg'))
+#define cervine_sounds list("cough" = null, "sneeze" = null, "scream" = list('sound/voice/scream/cervine/cervine_scream.ogg'), "pain" = null, "gasp" = null, "death" = list('sound/voice/death/cervine/cervine_death.ogg'))
+#define robot_sounds list("cough" = list('sound/effects/mob_effects/m_machine_cougha.ogg', 'sound/effects/mob_effects/m_machine_coughb.ogg', 'sound/effects/mob_effects/m_machine_coughc.ogg'), "sneeze" = list('sound/effects/mob_effects/machine_sneeze.ogg'), "scream" = list('sound/voice/scream_silicon.ogg', 'sound/voice/android_scream.ogg', 'sound/voice/scream/robotic/robot_scream1.ogg', 'sound/voice/scream/robotic/robot_scream2.ogg', 'sound/voice/scream/robotic/robot_scream3.ogg'), "pain" = list('sound/voice/pain/robotic/robot_pain1.ogg', 'sound/voice/pain/robotic/robot_pain2.ogg', 'sound/voice/pain/robotic/robot_pain3.ogg'), "gasp" = null, "death" = list('sound/voice/borg_deathsound.ogg'))
+#define male_generic_sounds list("cough" = list('sound/effects/mob_effects/m_cougha.ogg','sound/effects/mob_effects/m_coughb.ogg', 'sound/effects/mob_effects/m_coughc.ogg'), "sneeze" = list('sound/effects/mob_effects/sneeze.ogg'), "scream" = list('sound/voice/scream/generic/male/male_scream_1.ogg', 'sound/voice/scream/generic/male/male_scream_2.ogg', 'sound/voice/scream/generic/male/male_scream_3.ogg', 'sound/voice/scream/generic/male/male_scream_4.ogg', 'sound/voice/scream/generic/male/male_scream_5.ogg', 'sound/voice/scream/generic/male/male_scream_6.ogg'), "pain" = list('sound/voice/pain/generic/male/male_pain_1.ogg', 'sound/voice/pain/generic/male/male_pain_2.ogg', 'sound/voice/pain/generic/male/male_pain_3.ogg', 'sound/voice/pain/generic/male/male_pain_4.ogg', 'sound/voice/pain/generic/male/male_pain_5.ogg', 'sound/voice/pain/generic/male/male_pain_6.ogg', 'sound/voice/pain/generic/male/male_pain_7.ogg', 'sound/voice/pain/generic/male/male_pain_8.ogg'), "gasp" = list('sound/voice/gasp/generic/male/male_gasp1.ogg', 'sound/voice/gasp/generic/male/male_gasp2.ogg', 'sound/voice/gasp/generic/male/male_gasp3.ogg'), "death" = list('sound/voice/death/generic/male/male_death_1.ogg', 'sound/voice/death/generic/male/male_death_2.ogg', 'sound/voice/death/generic/male/male_death_3.ogg', 'sound/voice/death/generic/male/male_death_4.ogg', 'sound/voice/death/generic/male/male_death_5.ogg', 'sound/voice/death/generic/male/male_death_6.ogg', 'sound/voice/death/generic/male/male_death_7.ogg'))
+#define female_generic_sounds list("cough" = list('sound/effects/mob_effects/f_cougha.ogg','sound/effects/mob_effects/f_coughb.ogg'), "sneeze" = list('sound/effects/mob_effects/f_sneeze.ogg'), "scream" = list('sound/voice/scream/generic/female/female_scream_1.ogg', 'sound/voice/scream/generic/female/female_scream_2.ogg', 'sound/voice/scream/generic/female/female_scream_3.ogg', 'sound/voice/scream/generic/female/female_scream_4.ogg', 'sound/voice/scream/generic/female/female_scream_5.ogg'), "pain" = list('sound/voice/pain/generic/female/female_pain_1.ogg', 'sound/voice/pain/generic/female/female_pain_2.ogg', 'sound/voice/pain/generic/female/female_pain_3.ogg'), "gasp" = list('sound/voice/gasp/generic/female/female_gasp1.ogg', 'sound/voice/gasp/generic/female/female_gasp2.ogg'), "death" = list('sound/voice/death/generic/female/female_death_1.ogg', 'sound/voice/death/generic/female/female_death_2.ogg', 'sound/voice/death/generic/female/female_death_3.ogg', 'sound/voice/death/generic/female/female_death_4.ogg', 'sound/voice/death/generic/female/female_death_5.ogg', 'sound/voice/death/generic/female/female_death_6.ogg'))
+#define spider_sounds list("cough" = null, "sneeze" = null, "scream" = list('sound/voice/spiderchitter.ogg'), "pain" = list('sound/voice/spiderchitter.ogg'), "gasp" = null, "death" = list('sound/voice/death/spider/spider_death.ogg'))
+#define mouse_sounds list("cough" = list('sound/effects/mouse_squeak.ogg'), "sneeze" = list('sound/effects/mouse_squeak.ogg'), "scream" = list('sound/effects/mouse_squeak_loud.ogg'), "pain" = list('sound/effects/mouse_squeak.ogg'), "gasp" = list('sound/effects/mouse_squeak.ogg'), "death" = list('sound/effects/mouse_squeak_loud.ogg'))
+#define lizard_sounds list("cough" = null, "sneeze" = null, "scream" = list('sound/effects/mob_effects/una_scream1.ogg','sound/effects/mob_effects/una_scream2.ogg'), "pain" = list('sound/voice/pain/lizard/lizard_pain.ogg'), "gasp" = null, "death" = list('sound/voice/death/lizard/lizard_death.ogg'))
+#define vox_sounds list("cough" = list('sound/voice/shriekcough.ogg'), "sneeze" = list('sound/voice/shrieksneeze.ogg'), "scream" = list('sound/voice/shriek1.ogg'), "pain" = list('sound/voice/shriek1.ogg'), "gasp" = null, "death" = null)
+#define slime_sounds list("cough" = list('sound/effects/slime_squish.ogg'), "sneeze" = null, "scream" = null, "pain" = null, "gasp" = null, "death" = null)
+#define xeno_sounds list("cough" = null, "sneeze" = null, "scream" = list('sound/effects/mob_effects/x_scream1.ogg','sound/effects/mob_effects/x_scream2.ogg','sound/effects/mob_effects/x_scream3.ogg'), "pain" = list('sound/voice/pain/xeno/alien_roar1.ogg', 'sound/voice/pain/xeno/alien_roar2.ogg', 'sound/voice/pain/xeno/alien_roar3.ogg', 'sound/voice/pain/xeno/alien_roar4.ogg', 'sound/voice/pain/xeno/alien_roar5.ogg', 'sound/voice/pain/xeno/alien_roar6.ogg', 'sound/voice/pain/xeno/alien_roar7.ogg', 'sound/voice/pain/xeno/alien_roar8.ogg', 'sound/voice/pain/xeno/alien_roar9.ogg', 'sound/voice/pain/xeno/alien_roar10.ogg', 'sound/voice/pain/xeno/alien_roar11.ogg', 'sound/voice/pain/xeno/alien_roar12.ogg'), "gasp" = list('sound/voice/gasp/xeno/alien_hiss1.ogg'), "death" = list('sound/voice/death/xeno/xeno_death.ogg', 'sound/voice/death/xeno/xeno_death2.ogg'))
+#define teshari_sounds list("cough" = list('sound/effects/mob_effects/tesharicougha.ogg','sound/effects/mob_effects/tesharicoughb.ogg'), "sneeze" = list('sound/effects/mob_effects/tesharisneeze.ogg'), "scream" = list('sound/effects/mob_effects/teshariscream.ogg'), "pain" = null, "gasp" = null, "death" = null)
+#define raccoon_sounds list("cough" = null, "sneeze" = null, "scream" = list('sound/voice/raccoon.ogg'), "pain" = list('sound/voice/raccoon.ogg'), "gasp" = null, "death" = list('sound/voice/raccoon.ogg'))
+#define metroid_sounds list("cough" = list('sound/metroid/metroid_cough.ogg'), "sneeze" = list('sound/metroid/metroid_sneeze.ogg'), "scream" = list('sound/metroid/metroid_scream.ogg'), "pain" = list('sound/metroid/metroidsee.ogg'), "gasp" = list('sound/metroid/metroid_gasp.ogg'), "death" = list('sound/metroid/metroiddeath.ogg'))
+#define vulpine_sounds list("cough" = null, "sneeze" = null, "scream" = list('sound/voice/scream/vulpine/fox_yip1.ogg', 'sound/voice/scream/vulpine/fox_yip2.ogg', 'sound/voice/scream/vulpine/fox_yip3.ogg'), "pain" = list('sound/voice/pain/vulpine/fox_pain1.ogg', 'sound/voice/pain/vulpine/fox_pain2.ogg', 'sound/voice/pain/vulpine/fox_pain3.ogg', 'sound/voice/pain/vulpine/fox_pain4.ogg'), "gasp" = list('sound/voice/gasp/canine/wolf_gasp.ogg'), "death" = list('sound/voice/death/canine/wolf_death1.ogg', 'sound/voice/death/canine/wolf_death2.ogg', 'sound/voice/death/canine/wolf_death3.ogg', 'sound/voice/death/canine/wolf_death4.ogg', 'sound/voice/death/canine/wolf_death5.ogg'))
+#define no_sounds list("cough" = null, "sneeze" = null, "scream" = null, "pain" = null, "gasp" = null, "death" = null)
+#define use_default list("cough" = null, "sneeze" = null, "scream" = null, "pain" = null, "gasp" = null, "death" = null)
+/*
+ * TBD Sound Defines below
+*/
+/*
+#define avian_sounds list(
+ "scream" = list(),
+ "pain" = list(),
+ "gasp" = list(),
+ "death" = list()
+)
+#define slime_sounds list(
+ "scream" = list(),
+ "pain" = list(),
+ "gasp" = list(),
+ "death" = list()
+)
+#define vulpine_sounds list(
+ "scream" = list(),
+ "pain" = list(),
+ "gasp" = list(),
+ "death" = list()
+)
+#define lizard_sounds list(
+ "scream" = list(),
+ "pain" = list(),
+ "gasp" = list(),
+ "death" = list()
+)
+*/
+
+// Not sure we even really need this
+// var/list/species_sounds = list()
+
+// Global list containing all of our sound options.
+var/list/species_sound_map = list(
+ "Canine" = canine_sounds,
+ "Cervine" = cervine_sounds,
+ "Feline" = feline_sounds,
+ "Human Male" = male_generic_sounds,
+ "Human Female" = female_generic_sounds,
+ "Lizard" = lizard_sounds,
+ "Metroid" = metroid_sounds,
+ "Mouse" = mouse_sounds,
+ "Raccoon" = raccoon_sounds,
+ "Robotic" = robot_sounds,
+ "Slime" = slime_sounds,
+ "Spider" = spider_sounds,
+ "Teshari" = teshari_sounds,
+ "Vox" = vox_sounds,
+ "Vulpine" = vulpine_sounds,
+ "Xeno" = xeno_sounds,
+ "None" = no_sounds,
+ "Unset" = use_default
+)
+
+/* // Not sure we even really need this
+/hook/startup/proc/Init_species_sounds() // The entries we're checking over MUST have unique keys.
+ for(var/i in species_sound_map)
+ species_sounds |= species_sound_map[i]
+ return 1
+*/
+
+/*
+ * Call this for when you need a sound from an already-identified list - IE, "Canine". pick() cannot parse procs.
+ * Indexes must be pre-calculated by the time it reaches here - for instance;
+ * var/mob/living/M = user
+ * get_species_sound(M.client.pref.species_sound)["scream"] will return get_species_sound("Robotic")["scream"]
+ * This can be paired with get_gendered_sound, like so: get_species_sound(get_gendered_sound(M))["emote"] <- get_gendered_sound will return whatever we have of the 3 valid options, and then get_species_sound will match that to the actual sound list.
+ * The get_species_sound proc will retrieve and return the list based on the key given - get_species_sound("Robotic")["scream"] will return list('sound/voice/scream_silicon.ogg', 'sound/voice/android_scream.ogg', etc)
+ * If you are adding new calls of this, follow the syntax of get_species_sound(species)["scream"] - you must attach ["emote"] to the end, outside the ()
+ * If your species has a gendered sound, DON'T PANIC. Simply set the gender_specific_species_sounds var on the species to true, and when you call this, do it like so:
+ * get_species_sound(H.species.species_sounds_male)["emote"] // If we're male, and want an emote sound gendered correctly.
+*/
+/proc/get_species_sound(var/sounds)
+ if(!islist(species_sound_map[sounds])) // We check here if this list actually has anything in it, or if we're about to return a null index
+ return null // Shitty failsafe but better than rewriting an entire litany of procs rn when I'm low on time - Rykka // list('sound/voice/silence.ogg')
+ return species_sound_map[sounds] // Otherwise, successfully return our sound
+
+/*
+ * The following helper proc will select a species' default sounds - useful for if we're set to "Unset"
+ * This is ONLY called by Unset, meaning we haven't chosen a species sound.
+*/
+/proc/select_default_species_sound(var/datum/preferences/pref) // Called in character setup. This is similar to check_gendered_sounds, except here we pull from the prefs.
+ // First, we determine if we're custom-choosing a body or if we're a base game species.
+ var/datum/species/valid = GLOB.all_species[pref.species]
+ if(valid.selects_bodytype == (SELECTS_BODYTYPE_CUSTOM || SELECTS_BODYTYPE_SHAPESHIFTER)) // Custom species or xenochimera handling here
+ valid = coalesce(GLOB.all_species[pref.custom_base], GLOB.all_species[pref.species])
+ // Now we start getting our sounds.
+ if(valid.gender_specific_species_sounds) // Do we have gender-specific sounds?
+ if(pref.identifying_gender == FEMALE && valid.species_sounds_female)
+ return valid.species_sounds_female
+ else if(pref.identifying_gender == MALE && valid.species_sounds_male)
+ return valid.species_sounds_male
+ else // Failsafe. Update if there's ever gendered sounds for HERM/Neuter/etc
+ return valid.species_sounds
+ else
+ return valid.species_sounds
+
+/proc/get_gendered_sound(var/mob/living/user) // Called anywhere we need gender-specific species sounds. Gets the gender-specific sound if one exists, but otherwise, will return the species-generic sound list.
+ var/mob/living/carbon/human/H = user
+ if(ishuman(H))
+ if(H.species.gender_specific_species_sounds) // Do we have gender-specific sounds?
+ if(H.identifying_gender == FEMALE && H.species.species_sounds_female)
+ return H.species.species_sounds_female
+ else if(H.identifying_gender == MALE && H.species.species_sounds_male)
+ return H.species.species_sounds_male
+ else // Failsafe. Update if there's ever gendered sounds for HERM/Neuter/etc
+ return H.species.species_sounds
+ else
+ return H.species.species_sounds
+ else
+ return user.species_sounds
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 4b33f90d99..ec9b48ac7f 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1837,7 +1837,7 @@
WANTED.backup_author = src.admincaster_signature //Submitted by
WANTED.is_admin_message = 1
news_network.wanted_issue = WANTED
- for(var/obj/machinery/newscaster/NEWSCASTER in allCasters)
+ for(var/obj/machinery/newscaster/NEWSCASTER in GLOB.allCasters)
NEWSCASTER.newsAlert()
NEWSCASTER.update_icon()
src.admincaster_screen = 15
@@ -1853,7 +1853,7 @@
var/choice = tgui_alert(usr, "Please confirm Wanted Issue removal","Network Security Handler",list("Confirm","Cancel"))
if(choice=="Confirm")
news_network.wanted_issue = null
- for(var/obj/machinery/newscaster/NEWSCASTER in allCasters)
+ for(var/obj/machinery/newscaster/NEWSCASTER in GLOB.allCasters)
NEWSCASTER.update_icon()
src.admincaster_screen=17
src.access_news_network()
diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm
index f0a4f82493..9db6d3042c 100644
--- a/code/modules/admin/verbs/mapping.dm
+++ b/code/modules/admin/verbs/mapping.dm
@@ -55,7 +55,7 @@ GLOBAL_LIST_BOILERPLATE(all_debugging_effects, /obj/effect/debugging)
- for(var/obj/effect/debugging/camera_range/C in all_debugging_effects)
+ for(var/obj/effect/debugging/camera_range/C in GLOB.all_debugging_effects)
qdel(C)
if(camera_range_display_status)
@@ -114,7 +114,7 @@ GLOBAL_LIST_BOILERPLATE(all_debugging_effects, /obj/effect/debugging)
else
intercom_range_display_status = 1
- for(var/obj/effect/debugging/marker/M in all_debugging_effects)
+ for(var/obj/effect/debugging/marker/M in GLOB.all_debugging_effects)
qdel(M)
if(intercom_range_display_status)
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index a90d50b504..81677625d1 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -1,3 +1,5 @@
+GLOBAL_VAR_INIT(global_vantag_hud, 0)
+
/client/proc/cmd_admin_drop_everything(mob/M as mob in mob_list)
set category = null
set name = "Drop Everything"
@@ -1175,3 +1177,17 @@ Traitors and the like can also be revived with the previous role mostly intact.
new /obj/structure/drop_pod/polite(get_turf(usr), L, autoopen == "Yes" ? TRUE : FALSE)
feedback_add_details("admin_verb","DPD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/client/proc/toggle_vantag_hud_global(mob/target as mob)
+ set category = "Fun.Event Kit"
+ set name = "Toggle Global Event HUD"
+ set desc = "Give everyone the Event HUD."
+
+ GLOB.global_vantag_hud = !GLOB.global_vantag_hud
+ if(GLOB.global_vantag_hud)
+ for(var/mob/living/L in living_mob_list)
+ if(L.ckey)
+ L.vantag_hud = TRUE
+ L.recalculate_vis()
+
+ to_chat(src, span_warning("Global Event HUD has been turned [GLOB.global_vantag_hud ? "on" : "off"]."))
diff --git a/code/modules/ai/say_list.dm b/code/modules/ai/say_list.dm
index 370545374a..576ab7c652 100644
--- a/code/modules/ai/say_list.dm
+++ b/code/modules/ai/say_list.dm
@@ -8,6 +8,13 @@
/mob/living
var/datum/say_list/say_list = null
var/say_list_type = /datum/say_list // Type to give us on initialization. Default has empty lists, so the mob will be silent.
+ var/can_pain_emote = TRUE
+ var/datum/looping_sound/mob/deafened/deaf_loop //NYI
+ var/pain_emote_1p = null
+ var/pain_emote_3p = null
+ var/species_sounds = "None" // By default, we have nothing.
+ var/death_sound_override = null
+ var/datum/looping_sound/mob/on_fire/firesoundloop
/mob/living/Initialize(mapload)
if(say_list_type)
diff --git a/code/modules/client/preference_setup/vore/02_size.dm b/code/modules/client/preference_setup/vore/02_size.dm
index c86bf06078..acc41101cd 100644
--- a/code/modules/client/preference_setup/vore/02_size.dm
+++ b/code/modules/client/preference_setup/vore/02_size.dm
@@ -11,10 +11,11 @@
var/weight_loss = 50 // Weight loss rate.
var/fuzzy = 0 // Preference toggle for sharp/fuzzy icon. Default sharp.
var/offset_override = FALSE
- var/voice_freq = 0
- var/voice_sound = "beep-boop"
+ var/voice_freq = 42500
+ var/voice_sound = "goon speak 1"
var/custom_speech_bubble = "default"
var/custom_footstep = "Default"
+ var/species_sound = "Unset"
// Definition of the stuff for Sizing
/datum/category_item/player_setup_item/vore/size
diff --git a/code/modules/client/preference_setup/vore/07_traits.dm b/code/modules/client/preference_setup/vore/07_traits.dm
index 53b03f0ec0..c15eb7c519 100644
--- a/code/modules/client/preference_setup/vore/07_traits.dm
+++ b/code/modules/client/preference_setup/vore/07_traits.dm
@@ -267,6 +267,15 @@ var/global/list/valid_bloodreagents = list("default",REAGENT_ID_IRON,REAGENT_ID_
if(!(pref.blood_reagents == "default"))
new_S.blood_reagents = pref.blood_reagents
+ //Any additional non-trait settings can be applied here
+ new_S.blood_color = pref.blood_color
+
+ var/species_sounds_to_copy = pref.species_sound // What sounds are we using?
+ if(species_sounds_to_copy == "Unset") // Are we unset?
+ species_sounds_to_copy = select_default_species_sound(pref) // This will also grab gendered versions of the sounds, if they exist.
+
+ new_S.species_sounds = species_sounds_to_copy // Now we send our sounds over to the mob
+
if(pref.species == SPECIES_CUSTOM)
//Statistics for this would be nice
var/english_traits = english_list(new_S.traits, and_text = ";", comma_text = ";")
@@ -286,6 +295,7 @@ var/global/list/valid_bloodreagents = list("default",REAGENT_ID_IRON,REAGENT_ID_
var/points_left = pref.starting_trait_points
+
for(var/T in pref.pos_traits + pref.neg_traits)
points_left -= GLOB.traits_costs[T]
if(T in pref.pos_traits)
@@ -295,21 +305,21 @@ var/global/list/valid_bloodreagents = list("default",REAGENT_ID_IRON,REAGENT_ID_
if(points_left < 0 || traits_left < 0 || (!pref.custom_species && pref.species == SPECIES_CUSTOM))
. += span_red(span_bold("^ Fix things! ^")) + "
"
- . += "Positive Trait +
"
+ . += "Positive Trait(s) (Limited) +
"
. += "
" + span_huge("[H.name]'s motionless form shudders grotesquely, rippling unnaturally.") + "
")) - + if(!H.lying) + H.lay_down() //Cold/pressure effects when not regenerating else var/datum/gas_mixture/environment = H.loc.return_air() diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 6880142471..22a33cf428 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -11,22 +11,28 @@ if(istype(nest, /obj/structure/blob/factory)) var/obj/structure/blob/factory/F = nest F.spores -= src - //VOREStation Edit Start if(istype(nest, /obj/structure/mob_spawner)) var/obj/structure/mob_spawner/S = nest S.get_death_report(src) - //VOREStation Edit End nest = null if(isbelly(loc) && tf_mob_holder) mind?.vore_death = TRUE - tf_mob_holder.mind?.vore_death = TRUE + if(tf_mob_holder.loc == src) + tf_mob_holder.mind?.vore_death = TRUE for(var/datum/soul_link/S as anything in owned_soul_links) S.owner_died(gibbed) for(var/datum/soul_link/S as anything in shared_soul_links) S.sharer_died(gibbed) + if(!gibbed && !isbelly(loc)) + if(src.death_sound_override) // Do we override the death sounds from our species list - used by only a few specific mobs. If we do, do the next one instead + playsound(src, death_sound_override, 50, 1, 20, volume_channel = VOLUME_CHANNEL_DEATH_SOUNDS) + else + if(!ishuman(src)) // Safety, we're not going to double up on death noises if we're not human. + playsound(src, pick(get_species_sound(get_gendered_sound(src))["death"]), 50, 1, 20, volume_channel = VOLUME_CHANNEL_DEATH_SOUNDS) + . = ..() /mob/living/proc/delayed_gib() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 016cd11b73..8632cee72e 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -55,7 +55,6 @@ nest = null if(buckled) buckled.unbuckle_mob(src, TRUE) - //VOREStation Addition Start if(tf_mob_holder && tf_mob_holder.loc == src) tf_mob_holder.ckey = ckey if(isbelly(loc)) @@ -75,17 +74,10 @@ vore_organs -= B if(tf_mob_holder) tf_mob_holder = null - //VOREStation Addition End - if(hud_list) //prune out images in hud_list - for(var/item in hud_list) - if(item) - item = null - if(selected_image) - selected_image = null - //QDEL_NULL(vorePanel) //VOREStation Add commented and moved to /mob - //QDEL_LIST_NULL(vore_organs) //VOREStation Add commented and moved to /mob - temp_language_sources = null //VOREStation Add - temp_languages = null //VOREStation Add + QDEL_NULL_LIST(hud_list) + QDEL_NULL(selected_image) + temp_language_sources = null + temp_languages = null if(LAZYLEN(organs)) organs_by_name.Cut() @@ -173,7 +165,28 @@ health = 100 set_stat(CONSCIOUS) else + // Pain/etc calculations, but more efficient:tm: - this should work for literally anything that applies to health. Far better than slapping emote("pain") everywhere like scream does. + if(health > getMaxHealth()) //Overhealth + health = getMaxHealth() + var/initialhealth = health // Getting our health before this check health = getMaxHealth() - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() - getCloneLoss() - halloss + if(!((ishuman(src)) || (issilicon(src))) && src.can_pain_emote) // Only run this if we're non-human/non-silicon (bots and mechanical simplemobs should be allowed to make pain sounds) & can emote pain, bc humans + carbons already do this. human_damage doesn't call parent, but sanity is better here. + if(health < initialhealth) // Did we lose health? + // Yes. How much by? + var/damage = initialhealth - health // Get our damage (say, 200 - 180 = 20, etc etc) + var/pain_noise = (damage * rand(0.5, 1.5)) // Multiply damage by our rand mod. 50 damage becomes 50 x 0.5, means prob 25. 50 x 1.5 means prob 75, etc. + switch(damage) + if(-INFINITY to 0) + return + if(1 to 25) + if(prob(pain_noise) && !isbelly(loc)) // No pain noises inside bellies. + emote("pain") + if(26 to 50) + if(prob(pain_noise * 1.5) && !isbelly(loc)) // No pain noises inside bellies. + emote("pain") + if(51 to INFINITY) + if(prob(pain_noise * 3) && !isbelly(loc)) // More likely, most severe damage. No pain noises inside bellies. + emote("pain") //This proc is used for mobs which are affected by pressure to calculate the amount of pressure that actually //affects them once clothing is factored in. ~Errorage @@ -254,12 +267,10 @@ if(!isnull(M.incoming_healing_percent)) amount *= M.incoming_healing_percent - //VOREStation Additon Start if(tf_mob_holder && tf_mob_holder.loc == src) var/dmgmultiplier = tf_mob_holder.maxHealth / maxHealth dmgmultiplier *= amount tf_mob_holder.adjustBruteLoss(dmgmultiplier) - //VOREStation Additon End bruteloss = min(max(bruteloss + amount, 0),(getMaxHealth()*2)) updatehealth() @@ -346,12 +357,10 @@ for(var/datum/modifier/M in modifiers) if(!isnull(M.incoming_healing_percent)) amount *= M.incoming_healing_percent - //VOREStation Additon Start if(tf_mob_holder && tf_mob_holder.loc == src) var/dmgmultiplier = tf_mob_holder.maxHealth / maxHealth dmgmultiplier *= amount tf_mob_holder.adjustFireLoss(dmgmultiplier) - //VOREStation Additon End fireloss = min(max(fireloss + amount, 0),(getMaxHealth()*2)) updatehealth() @@ -434,7 +443,7 @@ return result /mob/living/proc/setMaxHealth(var/newMaxHealth) - var/h_mult = maxHealth / newMaxHealth //VOREStation Add Start - Calculate change multiplier + var/h_mult = maxHealth / newMaxHealth //Calculate change multiplier if(bruteloss) //In case a damage value is 0, divide by 0 bad bruteloss = round(bruteloss / h_mult) //Health is calculated on life based on damage types, so we update the damage and let life handle health if(fireloss) @@ -444,7 +453,7 @@ if(oxyloss) oxyloss = round(oxyloss / h_mult) if(cloneloss) - cloneloss = round(cloneloss / h_mult) //VOREStation Add End + cloneloss = round(cloneloss / h_mult) maxHealth = newMaxHealth /mob/living/Stun(amount) @@ -755,7 +764,7 @@ do_examine_ooc(usr) /mob/living/proc/do_examine_ooc(mob/user) - //VOREStation Edit Start - Making it so SSD people have prefs with fallback to original style. + //Makes it so SSD people have prefs with fallback to original style. if(CONFIG_GET(flag/allow_metadata)) if(ooc_notes) ooc_notes_window(user) @@ -766,7 +775,6 @@ to_chat(user, span_filter_notice("[src] does not have any stored infomation!")) else to_chat(user, span_filter_notice("OOC Metadata is not supported by this server!")) - //VOREStation Edit End - Making it so SSD people have prefs with fallback to original style. return @@ -806,7 +814,7 @@ else resist_restraints() - if(attempt_vr(src,"vore_process_resist",args)) return TRUE //VOREStation Code + if(attempt_vr(src,"vore_process_resist",args)) return TRUE /mob/living/proc/resist_buckle() if(buckled) @@ -903,6 +911,12 @@ /mob/living/adjustEarDamage(var/damage, var/deaf) ear_damage = max(0, ear_damage + damage) ear_deaf = max(0, ear_deaf + deaf) + /* //Segment here used downstream. Enable when deaf_loop is added. + if(ear_deaf > 0) + deaf_loop.start() + else if(ear_deaf <= 0) + deaf_loop.stop() + */ //pass a negative argument to skip one of the variable /mob/living/setEarDamage(var/damage, var/deaf) @@ -910,6 +924,7 @@ ear_damage = damage if(deaf >= 0) ear_deaf = deaf + //deaf_loop.start() // Ear Ringing/Deafness - Not sure if we need this, but, safety. NYI. Used downstream. /mob/living/proc/vomit(lost_nutrition = 10, blood = FALSE, stun = 5, distance = 1, message = TRUE, toxic = VOMIT_TOXIC, purge = FALSE) @@ -1029,17 +1044,30 @@ lying = incapacitated(INCAPACITATION_KNOCKDOWN) canmove = !incapacitated(INCAPACITATION_DISABLED) + if(incapacitated(INCAPACITATION_KNOCKOUT) || incapacitated(INCAPACITATION_STUNNED)) // Making sure we're in good condition to crawl + canmove = 0 + else + canmove = 1 + if(lying) density = FALSE - if(l_hand) - unEquip(l_hand) - if(r_hand) - unEquip(r_hand) - for(var/obj/item/holder/holder in get_mob_riding_slots()) - unEquip(holder) update_water() // Submerges the mob. + stop_pulling() + + if(!passtable_crawl_checked) + passtable_crawl_checked = TRUE + if(pass_flags & PASSTABLE) + passtable_reset = FALSE + else + passtable_reset = TRUE + pass_flags |= PASSTABLE + else density = initial(density) + if(passtable_reset) + passtable_reset = FALSE + pass_flags &= ~PASSTABLE + passtable_crawl_checked = FALSE for(var/obj/item/grab/G in grabbed_by) if(G.state >= GRAB_AGGRESSIVE) @@ -1050,7 +1078,6 @@ lying_prev = lying update_transform() update_mob_action_buttons() - //VOREStation Add if(lying && LAZYLEN(buckled_mobs)) for(var/mob/living/L as anything in buckled_mobs) if(buckled_mobs[L] != "riding") @@ -1060,7 +1087,6 @@ else unbuckle_mob(L) L.Stun(5) - //VOREStation Add End return canmove @@ -1107,8 +1133,8 @@ /mob/living/update_transform(var/instant = FALSE) // First, get the correct size. - var/desired_scale_x = size_multiplier * icon_scale_x //VOREStation edit - var/desired_scale_y = size_multiplier * icon_scale_y //VOREStation edit + var/desired_scale_x = size_multiplier * icon_scale_x + var/desired_scale_y = size_multiplier * icon_scale_y var/cent_offset = center_offset // Now for the regular stuff. @@ -1117,7 +1143,7 @@ var/matrix/M = matrix() M.Scale(desired_scale_x, desired_scale_y) M.Translate(cent_offset * desired_scale_x, (vis_height/2)*(desired_scale_y-1)) - src.transform = M //VOREStation edit + src.transform = M handle_status_indicators() // This handles setting the client's color variable, which makes everything look a specific color. @@ -1232,17 +1258,6 @@ if(!item) return FALSE //Grab processing has a chance of returning null - if(a_intent == I_HELP && Adjacent(target) && isitem(item) && ishuman(target)) - var/obj/item/I = item - var/mob/living/carbon/human/H = target - if(H.in_throw_mode && H.a_intent == I_HELP && unEquip(I)) - H.put_in_hands(I) // If this fails it will just end up on the floor, but that's fitting for things like dionaea. - visible_message(span_filter_notice(span_bold("[src]") + " hands \the [H] \a [I]."), span_notice("You give \the [target] \a [I].")) - else - to_chat(src, span_notice("You offer \the [I] to \the [target].")) - do_give(H) - return TRUE - drop_from_inventory(item) if(!item || QDELETED(item)) diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm index 8570d8999e..e5a071a27e 100644 --- a/code/modules/mob/living/login.dm +++ b/code/modules/mob/living/login.dm @@ -31,7 +31,6 @@ add_verb(src,/mob/living/proc/vore_transfer_reagents) // If mob doesnt have bellies it cant use this verb for anything add_verb(src,/mob/living/proc/vore_check_reagents) // If mob doesnt have bellies it cant use this verb for anything - add_verb(src,/mob/living/proc/vore_bellyrub) // If mob doesnt have bellies it probably won't be needing this anyway add_verb(src,/mob/proc/nsay_vore) add_verb(src,/mob/proc/nme_vore) add_verb(src,/mob/proc/nsay_vore_ch) diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/modules/mob/living/silicon/pai/recruit.dm index 7de029bcf2..9046b61add 100644 --- a/code/modules/mob/living/silicon/pai/recruit.dm +++ b/code/modules/mob/living/silicon/pai/recruit.dm @@ -102,7 +102,7 @@ var/datum/paiController/paiController // Global handler for pAI candidates if("submit") if(candidate) candidate.ready = 1 - for(var/obj/item/paicard/p in all_pai_cards) + for(var/obj/item/paicard/p in GLOB.all_pai_cards) if(p.looking_for_personality == 1) p.alertUpdate() usr << browse(null, "window=paiRecruit") diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index a77af34812..f62a8f4d3f 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -249,17 +249,6 @@ var/list/mob_hat_cache = list() request_player() return - else - user.visible_message(span_danger("\The [user] swipes [TU.his] ID card through \the [src], attempting to shut it down."), span_danger("You swipe your ID card through \the [src], attempting to shut it down.")) - - if(emagged) - return - - if(allowed(user)) - shut_down() - else - to_chat(user, span_danger("Access denied.")) - return ..() @@ -319,10 +308,6 @@ var/list/mob_hat_cache = list() return ..() -//DRONE MOVEMENT. -/mob/living/silicon/robot/drone/Process_Spaceslipping(var/prob_slip) - return 0 - //CONSOLE PROCS /mob/living/silicon/robot/drone/proc/law_resync() if(stat != DEAD) diff --git a/code/modules/mob/living/silicon/robot/robot_movement.dm b/code/modules/mob/living/silicon/robot/robot_movement.dm index 1a8714c29a..b88f42522c 100644 --- a/code/modules/mob/living/silicon/robot/robot_movement.dm +++ b/code/modules/mob/living/silicon/robot/robot_movement.dm @@ -6,14 +6,6 @@ /mob/living/silicon/robot/Check_Shoegrip() return module && module.no_slip -/mob/living/silicon/robot/Process_Spaceslipping(var/prob_slip) - var/obj/item/tank/jetpack/thrust = get_jetpack() - if(thrust?.can_thrust(0.01)) - return 0 - if(module && module.no_slip) - return 0 - ..(prob_slip) - /mob/living/silicon/robot/Process_Spacemove(var/check_drift = 0) if(..())//Can move due to other reasons, don't use jetpack fuel return 1 @@ -34,6 +26,8 @@ if(get_restraining_bolt()) // Borgs with Restraining Bolts move slower. . += 1 + if(nutrition > 1000) + . += nutrition / 2000 . += CONFIG_GET(number/robot_delay) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm index 3634d540e1..f8c58b7299 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm @@ -119,6 +119,10 @@ ) allow_mind_transfer = TRUE + can_be_drop_prey = FALSE + species_sounds = "Spider" + pain_emote_1p = list("chitter", "click") + pain_emote_3p = list("chitters", "clicks") /mob/living/simple_mob/animal/giant_spider/Initialize(mapload) . = ..() diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/dog.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/dog.dm index b9a97d83e9..4b94b39de1 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/pets/dog.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/dog.dm @@ -26,7 +26,9 @@ var/obj/item/inventory_head var/obj/item/inventory_back - + species_sounds = "Canine" + pain_emote_1p = list("yelp", "whine", "bark", "growl") + pain_emote_3p = list("yelps", "whines", "barks", "growls") /mob/living/simple_mob/animal/passive/dog/attackby(var/obj/item/O as obj, var/mob/user as mob) if(istype(O, /obj/item/newspaper)) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm index 8a70544e3f..9594519f26 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm @@ -68,6 +68,10 @@ var/obj/item/clothing/head/hat = null // The hat the Sakimm may be wearing. var/list/friend_loot_list = list(/obj/item/coin) // What will make this animal non-hostile if held? var/randomize_size = TRUE + can_be_drop_prey = TRUE + species_sounds = "Raccoon" + pain_emote_1p = list("chitter") + pain_emote_3p = list("chitters") /mob/living/simple_mob/animal/sif/sakimm/verb/remove_hat() set name = "Remove Hat" diff --git a/code/modules/mob/living/simple_mob/subtypes/blob/blob.dm b/code/modules/mob/living/simple_mob/subtypes/blob/blob.dm index 4c9ba00cd6..2bf64c015e 100644 --- a/code/modules/mob/living/simple_mob/subtypes/blob/blob.dm +++ b/code/modules/mob/living/simple_mob/subtypes/blob/blob.dm @@ -30,6 +30,9 @@ mob_class = MOB_CLASS_SLIME ai_holder_type = /datum/ai_holder/simple_mob/melee + can_be_drop_prey = FALSE + can_pain_emote = FALSE + /mob/living/simple_mob/blob/speech_bubble_appearance() return "slime" diff --git a/code/modules/mob/living/simple_mob/subtypes/blob/spore.dm b/code/modules/mob/living/simple_mob/subtypes/blob/spore.dm index c6cbc08840..4c327c8999 100644 --- a/code/modules/mob/living/simple_mob/subtypes/blob/spore.dm +++ b/code/modules/mob/living/simple_mob/subtypes/blob/spore.dm @@ -30,6 +30,7 @@ var/can_infest = FALSE var/is_infesting = FALSE + can_pain_emote = FALSE /datum/say_list/spore emote_see = list("sways", "inflates briefly") diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/humanoid.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/humanoid.dm index 150544a5f5..0e7a48d209 100644 --- a/code/modules/mob/living/simple_mob/subtypes/humanoid/humanoid.dm +++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/humanoid.dm @@ -19,6 +19,10 @@ // Most humans leave a corpse var/corpse = null + pain_emote_1p = list("shout out in pain", "growl in pain", "grunt in pain", "gasp out in pain") + pain_emote_3p = list("shouts out in pain", "growls in pain", "grunts in pain", "gasps out in pain") + species_sounds = "Human Male" // Yes, we should allow them to differ based on gender, but if someone's making a custom humanoid later:tm: - set your humanoid's species_sounds to match, or var-edit it after spawn. + /mob/living/simple_mob/humanoid/death() ..() diff --git a/code/modules/mob/living/simple_mob/subtypes/illusion/illusion.dm b/code/modules/mob/living/simple_mob/subtypes/illusion/illusion.dm index 08605bab71..3867a0a292 100644 --- a/code/modules/mob/living/simple_mob/subtypes/illusion/illusion.dm +++ b/code/modules/mob/living/simple_mob/subtypes/illusion/illusion.dm @@ -24,6 +24,8 @@ var/atom/movable/copying = null // The thing we're trying to look like. var/realistic = FALSE // If true, things like bullets and weapons will hit it, to be a bit more convincing from a distance. + can_pain_emote = FALSE + /mob/living/simple_mob/illusion/update_icon() // We don't want the appearance changing AT ALL unless by copy_appearance(). return diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm index 58465be41d..fa7d96cf6f 100644 --- a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm +++ b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm @@ -62,6 +62,9 @@ var/list/construct_spells = list() // var/do_glow = TRUE + can_be_drop_prey = FALSE + can_pain_emote = FALSE + /mob/living/simple_mob/construct/place_spell_in_hand(var/path) if(!path || !ispath(path)) return 0 diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/creature.dm b/code/modules/mob/living/simple_mob/subtypes/occult/creature.dm index 1336cc719f..983a23a21b 100644 --- a/code/modules/mob/living/simple_mob/subtypes/occult/creature.dm +++ b/code/modules/mob/living/simple_mob/subtypes/occult/creature.dm @@ -29,6 +29,9 @@ speak_emote = list("gibbers") ai_holder_type = /datum/ai_holder/simple_mob/melee + can_be_drop_prey = FALSE + can_pain_emote = FALSE + // Strong Variant /mob/living/simple_mob/creature/strong diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/faithless.dm b/code/modules/mob/living/simple_mob/subtypes/occult/faithless.dm index b61bb57dcf..fadfe29a67 100644 --- a/code/modules/mob/living/simple_mob/subtypes/occult/faithless.dm +++ b/code/modules/mob/living/simple_mob/subtypes/occult/faithless.dm @@ -42,6 +42,9 @@ max_n2 = 0 minbodytemp = 0 + can_be_drop_prey = FALSE + can_pain_emote = FALSE + /mob/living/simple_mob/faithless/Process_Spacemove(var/check_drift = 0) return 1 diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/unknown.dm b/code/modules/mob/living/simple_mob/subtypes/occult/unknown.dm index b359d9a458..bb445717d9 100644 --- a/code/modules/mob/living/simple_mob/subtypes/occult/unknown.dm +++ b/code/modules/mob/living/simple_mob/subtypes/occult/unknown.dm @@ -41,6 +41,9 @@ loot_list = list(/obj/item/nif/glitch = 100) + can_be_drop_prey = FALSE + can_pain_emote = FALSE + /obj/item/projectile/energy/slow_orb name = "TROJAN" icon_state = "glitch" @@ -315,6 +318,8 @@ ai_holder_type = /datum/ai_holder/simple_mob/ranged/aggressive/bossmob_glitch_fake + can_pain_emote = FALSE + /mob/living/simple_mob/glitch_boss_fake/strong maxHealth = 100 health = 100 diff --git a/code/modules/mob/living/simple_mob/subtypes/plant/tomato.dm b/code/modules/mob/living/simple_mob/subtypes/plant/tomato.dm index 732d4c170f..237aafbad0 100644 --- a/code/modules/mob/living/simple_mob/subtypes/plant/tomato.dm +++ b/code/modules/mob/living/simple_mob/subtypes/plant/tomato.dm @@ -29,5 +29,8 @@ meat_type = /obj/item/reagent_containers/food/snacks/tomatomeat meat_amount = 4 + can_be_drop_prey = FALSE + can_pain_emote = FALSE + /decl/mob_organ_names/tomato hit_zones = list("flesh", "leaf", "mouth") diff --git a/code/modules/mob/living/simple_mob/subtypes/plant/tree.dm b/code/modules/mob/living/simple_mob/subtypes/plant/tree.dm index 2f9f459c2c..2363e4b07a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/plant/tree.dm +++ b/code/modules/mob/living/simple_mob/subtypes/plant/tree.dm @@ -32,6 +32,9 @@ pixel_x = -16 + can_be_drop_prey = FALSE + can_pain_emote = FALSE // Can't feel pain and shouldn't take damage anyways, but, sanity + /mob/living/simple_mob/animal/space/tree/apply_melee_effects(var/atom/A) if(isliving(A)) var/mob/living/L = A diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/fennec.dm b/code/modules/mob/living/simple_mob/subtypes/vore/fennec.dm index d5c06ccd78..b937056ab7 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/fennec.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/fennec.dm @@ -53,6 +53,9 @@ ai_holder_type = /datum/ai_holder/simple_mob/passive allow_mind_transfer = TRUE + pain_emote_1p = list("yelp", "whine", "bark", "growl") + pain_emote_3p = list("yelps", "whines", "barks", "growls") + species_sounds = "Vulpine" // Activate Noms! /mob/living/simple_mob/vore/fennec diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf.dm b/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf.dm index 902bffa043..d510d8c5c9 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf.dm @@ -40,9 +40,6 @@ buckle_movable = TRUE buckle_lying = FALSE max_tox = 0 // for virgo3b survivability - -/mob/living/simple_mob/vore/greatwolf - vore_bump_chance = 25 vore_digest_chance = 5 vore_escape_chance = 5 @@ -56,6 +53,10 @@ vore_default_mode = DM_HEAL vore_pounce_maxhealth = 125 vore_bump_emote = "tries to snap up" + can_be_drop_prey = FALSE + species_sounds = "Canine" + pain_emote_1p = list("yelp", "whine", "bark", "growl") + pain_emote_3p = list("yelps", "whines", "barks", "growls") /mob/living/simple_mob/vore/greatwolf/black name = "great black wolf" diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/otie.dm b/code/modules/mob/living/simple_mob/subtypes/vore/otie.dm index 91ad0f6bbb..72093e806f 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/otie.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/otie.dm @@ -49,6 +49,11 @@ allow_mind_transfer = TRUE + can_be_drop_prey = FALSE + species_sounds = "Canine" + pain_emote_1p = list("yelp", "whine", "bark", "growl") + pain_emote_3p = list("yelps", "whines", "barks", "growls") + // Activate Noms! /mob/living/simple_mob/vore/otie diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm b/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm index 927d2ce2b4..a37c3aab58 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm @@ -43,7 +43,10 @@ ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive allow_mind_transfer = TRUE - + can_be_drop_prey = FALSE + species_sounds = "Feline" + pain_emote_1p = list("yowl", "growl") + pain_emote_3p = list("yowls", "growls") // Activate Noms! /mob/living/simple_mob/vore/aggressive/panther vore_active = 1 diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/wolf.dm b/code/modules/mob/living/simple_mob/subtypes/vore/wolf.dm index bf2535cd49..0fcba1ed2a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/wolf.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/wolf.dm @@ -35,11 +35,30 @@ allow_mind_transfer = TRUE + can_be_drop_prey = FALSE + species_sounds = "Canine" + pain_emote_1p = list("yelp", "whine", "bark", "growl") + pain_emote_3p = list("yelps", "whines", "barks", "growls") + // Activate Noms! /mob/living/simple_mob/vore/wolf vore_active = 1 vore_icons = SA_ICON_LIVING +/mob/living/simple_mob/animal/wolf/init_vore() + if(!voremob_loaded) + return + if(LAZYLEN(vore_organs)) + return + . = ..() + + var/obj/belly/B = vore_selected + B.vore_sound = "Tauric Swallow" + B.release_sound = "Pred Escape" + B.fancy_vore = 1 + B.belly_fullscreen_color = "#c47cb4" + B.belly_fullscreen = "anim_belly" + // Space edition, stronger and bitier /mob/living/simple_mob/vore/wolf/space name = "space wolf" diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/wolfgirl.dm b/code/modules/mob/living/simple_mob/subtypes/vore/wolfgirl.dm index bb76da5e04..6094f5e099 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/wolfgirl.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/wolfgirl.dm @@ -23,7 +23,10 @@ say_list_type = /datum/say_list/wolfgirl ai_holder_type = /datum/ai_holder/simple_mob/retaliate/cooperative/wolfgirl - + can_be_drop_prey = FALSE + species_sounds = "Canine" + pain_emote_1p = list("yelp", "whine", "bark", "growl") + pain_emote_3p = list("yelps", "whines", "barks", "growls") // Activate Noms! /mob/living/simple_mob/vore/wolfgirl vore_active = 1 diff --git a/code/modules/mob/living/voice/voice_vr.dm b/code/modules/mob/living/voice/voice_vr.dm index 926116b724..961280cabe 100644 --- a/code/modules/mob/living/voice/voice_vr.dm +++ b/code/modules/mob/living/voice/voice_vr.dm @@ -1,2 +1,3 @@ /mob/living/voice no_vore = TRUE + can_pain_emote = FALSE diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 9bd12d9ee0..2b8f81d7d9 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -56,6 +56,8 @@ if(!vis_enabled) vis_enabled = list() client.screen += plane_holder.plane_masters + if(GLOB.global_vantag_hud) + vantag_hud = TRUE recalculate_vis() // AO support @@ -82,3 +84,5 @@ client.init_verbs() SEND_SIGNAL(src, COMSIG_MOB_CLIENT_LOGIN, client) SEND_SIGNAL(client, COMSIG_CLIENT_MOB_LOGIN, src) + + set_listening(LISTENING_PLAYER) diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index eb94d1ed08..d41427fa5a 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -6,12 +6,13 @@ log_access_out(src) unset_machine() if(GLOB.admin_datums[src.ckey]) + message_admins("Staff logout: [key_name(src)]") // Staff logout notice displays no matter what if (ticker && ticker.current_state == GAME_STATE_PLAYING) //Only report this stuff if we are currently playing. var/admins_number = GLOB.admins.len - message_admins("Admin logout: [key_name(src)]") if(admins_number == 0) //Apparently the admin logging out is no longer an admin at this point, so we have to check this towards 0 and not towards 1. Awell. send2adminirc("[key_name(src)] logged out - no more admins online.") + set_listening(NON_LISTENING_ATOM) //maybe remove this, even if it will cause a teensy bit more lag ..() return 1 diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 97304d659a..ae695cef25 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -77,11 +77,11 @@ lastarea = get_area(src) set_focus(src) // VOREStation Add - Key Handling hook_vr("mob_new",list(src)) //VOREStation Code - update_transform() // Some mobs may start bigger or smaller than normal. . = ..() //return QDEL_HINT_HARDDEL_NOW Just keep track of mob references. They delete SO much faster now. -/mob/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2) +/mob/show_message(msg, type, alt, alt_type) + if(!client && !teleop) return if (type) @@ -480,7 +480,7 @@ targets += observe_list_format(GLOB.nuke_disks) - targets += observe_list_format(all_singularities) + targets += observe_list_format(GLOB.all_singularities) targets += getmobs() targets += observe_list_format(sortAtom(mechas_list)) targets += observe_list_format(SSshuttles.ships) @@ -563,6 +563,9 @@ to_chat(src, span_warning("It won't budge!")) return + if(lying) + return + var/mob/M = AM if(ismob(AM)) @@ -1136,18 +1139,6 @@ if(throw_icon && !issilicon(src)) // Silicon use this for something else. Do not overwrite their HUD icon throw_icon.icon_state = "act_throw_on" -/mob/verb/spacebar_throw_on() - set name = ".throwon" - set hidden = TRUE - set instant = TRUE - throw_mode_on() - -/mob/verb/spacebar_throw_off() - set name = ".throwoff" - set hidden = TRUE - set instant = TRUE - throw_mode_off() - /mob/proc/isSynthetic() return 0 @@ -1174,15 +1165,6 @@ . = ..() - -/obj/Destroy() - if(istype(loc, /mob)) - var/mob/holder = loc - if(src in holder.exploit_addons) - holder.exploit_addons -= src - . = ..() - - /client/proc/check_has_body_select() return mob && mob.hud_used && istype(mob.zone_sel, /obj/screen/zone_sel) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 9d9c3cdebc..a835784228 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -11,6 +11,12 @@ if(locate(/obj/item/grab) in src) . += 5 + if(lying) + if(weakened >= 1) + . += 14 // Very slow when weakened. + else + . += 8 + // Movespeed delay based on movement mode switch(m_intent) if(I_RUN) @@ -244,6 +250,8 @@ to_chat(src, span_blue("You're pinned to a wall by [my_mob.pinned[1]]!")) return 0 + var/old_delay = mob.next_move + if(istype(my_mob.buckled, /obj/vehicle) || ismob(my_mob.buckled)) //manually set move_delay for vehicles so we don't inherit any mob movement penalties //specific vehicle move delays are set in code\modules\vehicles\vehicle.dm @@ -298,8 +306,6 @@ direct = turn(direct, pick(90, -90)) n = get_step(my_mob, direct) - total_delay = DS2NEARESTTICK(total_delay) //Rounded to the next tick in equivalent ds - my_mob.setMoveCooldown(total_delay) if(istype(my_mob.pulledby, /obj/structure/bed/chair/wheelchair)) . = my_mob.pulledby.relaymove(my_mob, direct) @@ -310,7 +316,17 @@ // If we ended up moving diagonally, increase delay. if((direct & (direct - 1)) && mob.loc == n) - my_mob.setMoveCooldown(total_delay * 2) + total_delay *= SQRT_2 + + //total_delay = DS2NEARESTTICK(total_delay) //Rounded to the next tick in equivalent ds + if(mob.last_move_time > (world.time - total_delay * 1.25)) + mob.next_move = DS2NEARESTTICK(old_delay + total_delay) + else + mob.next_move = DS2NEARESTTICK(world.time + total_delay) + + if(!isliving(my_mob)) + moving = 0 + return // If we have a grab var/list/grablist = my_mob.ret_grab() @@ -347,12 +363,24 @@ // We're not in the middle of a move anymore moving = 0 + mob.last_move_time = world.time /mob/proc/SelfMove(turf/n, direct, movetime) return Move(n, direct, movetime) + +//Set your incorporeal movespeed +//Important to note: world.time is always in deciseconds. Higher tickrates mean more subdivisions of world.time (20fps = 0.5, 40fps = 0.25) /client var/is_leaving_belly = FALSE + var/incorporeal_speed = 0.5 + +/client/verb/set_incorporeal_speed() + set category = "OOC.Game Settings" + set name = "Set Incorporeal Speed" + + var/input = tgui_input_number(usr, "Set an incorporeal movement delay between 0 (fastest) and 5 (slowest)", "Incorporeal movement speed", (0.5/world.tick_lag), 5, 0) + incorporeal_speed = input * world.tick_lag ///Process_Incorpmove ///Called by client/Move() @@ -368,6 +396,12 @@ is_leaving_belly = FALSE var/turf/mobloc = get_turf(mob) + if(incorporeal_speed) + var/mob/my_mob = mob + if(!my_mob.checkMoveCooldown()) //Only bother with speed if it isn't 0 + return + my_mob.setMoveCooldown(incorporeal_speed) + switch(mob.incorporeal_move) if(1) var/turf/T = get_step(mob, direct) @@ -461,14 +495,6 @@ if(restrained()) //Check to see if we can do things return 0 - - //Check to see if we slipped - if(prob(Process_Spaceslipping(5)) && !buckled) - to_chat(src, span_boldnotice("You slipped!")) - inertia_dir = last_move - step(src, src.inertia_dir) // Not using Move for smooth glide here because this is a 'slip' so should be sudden. - return 0 - //If not then we can reset inertia and move inertia_dir = 0 return 1 @@ -513,15 +539,6 @@ /mob/proc/Check_Shoegrip() return 0 -/mob/proc/Process_Spaceslipping(var/prob_slip = 5) - //Setup slipage - //If knocked out we might just hit it and stop. This makes it possible to get dead bodies and such. - if(stat) - prob_slip = 0 // Changing this to zero to make it line up with the comment. - - prob_slip = round(prob_slip) - return(prob_slip) - /mob/proc/mob_get_gravity(turf/T) return get_gravity(src, T) diff --git a/code/modules/modular_computers/computers/modular_computer/core.dm b/code/modules/modular_computers/computers/modular_computer/core.dm index 3a77d74223..bca7f85fa7 100644 --- a/code/modules/modular_computers/computers/modular_computer/core.dm +++ b/code/modules/modular_computers/computers/modular_computer/core.dm @@ -119,6 +119,7 @@ else to_chat(user, "You press the power button and start up \the [src]") enable_computer(user) + playsound(src, 'sound/machines/console_power_on.ogg', 60, 1, volume_channel = VOLUME_CHANNEL_MACHINERY) else // Unpowered if(issynth) diff --git a/code/modules/pda/cart_apps.dm b/code/modules/pda/cart_apps.dm index 1ef64e8209..37e4784814 100644 --- a/code/modules/pda/cart_apps.dm +++ b/code/modules/pda/cart_apps.dm @@ -264,7 +264,7 @@ JaniData["user_loc"] = list("x" = 0, "y" = 0) var/MopData[0] - for(var/obj/item/mop/M in all_mops)//GLOB.janitorial_equipment) + for(var/obj/item/mop/M in GLOB.all_mops)//GLOB.janitorial_equipment) var/turf/ml = get_turf(M) if(ml) if(ml.z != cl.z) @@ -273,7 +273,7 @@ MopData[++MopData.len] = list ("x" = ml.x, "y" = ml.y, "dir" = uppertext(dir2text(direction)), "status" = M.reagents.total_volume ? "Wet" : "Dry") var/BucketData[0] - for(var/obj/structure/mopbucket/B in all_mopbuckets)//GLOB.janitorial_equipment) + for(var/obj/structure/mopbucket/B in GLOB.all_mopbuckets)//GLOB.janitorial_equipment) var/turf/bl = get_turf(B) if(bl) if(bl.z != cl.z) @@ -291,7 +291,7 @@ CbotData[++CbotData.len] = list("x" = bl.x, "y" = bl.y, "dir" = uppertext(dir2text(direction)), "status" = B.on ? "Online" : "Offline") var/CartData[0] - for(var/obj/structure/janitorialcart/B in all_janitorial_carts)//GLOB.janitorial_equipment) + for(var/obj/structure/janitorialcart/B in GLOB.all_janitorial_carts)//GLOB.janitorial_equipment) var/turf/bl = get_turf(B) if(bl) if(bl.z != cl.z) diff --git a/code/modules/power/supermatter/setup_supermatter.dm b/code/modules/power/supermatter/setup_supermatter.dm index ab3729890d..7464bebafc 100644 --- a/code/modules/power/supermatter/setup_supermatter.dm +++ b/code/modules/power/supermatter/setup_supermatter.dm @@ -32,7 +32,7 @@ // CONFIGURATION PHASE // Coolant canisters, set types according to response. - for(var/obj/effect/engine_setup/coolant_canister/C in all_engine_setup_markers) + for(var/obj/effect/engine_setup/coolant_canister/C in GLOB.all_engine_setup_markers) switch(response) if("N2") C.canister_type = /obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup/ @@ -44,7 +44,7 @@ C.canister_type = /obj/machinery/portable_atmospherics/canister/phoron/engine_setup/ continue - for(var/obj/effect/engine_setup/core/C in all_engine_setup_markers) + for(var/obj/effect/engine_setup/core/C in GLOB.all_engine_setup_markers) switch(response) if("N2") C.energy_setting = ENERGY_NITROGEN @@ -56,12 +56,12 @@ C.energy_setting = ENERGY_PHORON continue - for(var/obj/effect/engine_setup/atmo_filter/F in all_engine_setup_markers) + for(var/obj/effect/engine_setup/atmo_filter/F in GLOB.all_engine_setup_markers) F.coolant = response var/list/delayed_objects = list() // SETUP PHASE - for(var/obj/effect/engine_setup/S in all_engine_setup_markers) + for(var/obj/effect/engine_setup/S in GLOB.all_engine_setup_markers) var/result = S.activate(0) switch(result) if(SETUP_OK) diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index 0c838039ce..b71d9e75e9 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -115,7 +115,7 @@ if(!loc) return var/obj/singularity/energy_ball/EB = new(loc, 0, TRUE) - all_singularities -= EB //why are these miniballs even singularities in the first place, they don't do anything + GLOB.all_singularities -= EB //why are these miniballs even singularities in the first place, they don't do anything EB.transform *= pick(0.3, 0.4, 0.5, 0.6, 0.7) var/icon/I = icon(icon,icon_state,dir) diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm index e38354bb17..afcf261c7e 100644 --- a/code/modules/shuttles/shuttle_console.dm +++ b/code/modules/shuttles/shuttle_console.dm @@ -159,7 +159,7 @@ GLOBAL_LIST_BOILERPLATE(papers_dockingcode, /obj/item/paper/dockingcodes) /hook/roundstart/proc/populate_dockingcodes() - for(var/obj/item/paper/dockingcodes/dcp as anything in global.papers_dockingcode) + for(var/obj/item/paper/dockingcodes/dcp as anything in GLOB.papers_dockingcode) dcp.populate_info() return TRUE diff --git a/code/modules/tgui/modules/appearance_changer.dm b/code/modules/tgui/modules/appearance_changer.dm index 11ab6542ab..953d9ed304 100644 --- a/code/modules/tgui/modules/appearance_changer.dm +++ b/code/modules/tgui/modules/appearance_changer.dm @@ -542,13 +542,12 @@ generate_data(ui.user, owner) changed_hook(APPEARANCECHANGER_CHANGED_RACE) return TRUE - /*if("species_sound") //TODO: UP PORT SPECIES_SOUNDS + if("species_sound") var/list/possible_species_sound_types = species_sound_map var/choice = tgui_input_list(ui.user, "Which set of sounds would you like to use? (Cough, Sneeze, Scream, Pain, Gasp, Death)", "Species Sounds", possible_species_sound_types) if(choice && can_change(owner, APPEARANCE_RACE)) owner.species.species_sounds = choice return TRUE - */ if("flavor_text") var/select_key = params["target"] if(select_key && can_change(owner, APPEARANCE_RACE)) diff --git a/code/modules/tgui/modules/teleporter.dm b/code/modules/tgui/modules/teleporter.dm index a616c1ec89..b8b6024160 100644 --- a/code/modules/tgui/modules/teleporter.dm +++ b/code/modules/tgui/modules/teleporter.dm @@ -26,7 +26,7 @@ var/list/L = list() var/list/areaindex = list() - for(var/obj/item/radio/beacon/R in all_beacons) + for(var/obj/item/radio/beacon/R in GLOB.all_beacons) var/turf/T = get_turf(R) if(!T) continue @@ -39,7 +39,7 @@ areaindex[tmpname] = 1 L[tmpname] = R - for(var/obj/item/implant/tracking/I in all_tracking_implants) + for(var/obj/item/implant/tracking/I in GLOB.all_tracking_implants) if(!I.implanted || !ismob(I.loc)) continue else diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 5305a43c92..455d1e1dd8 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -1593,14 +1593,10 @@ playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/preference/toggle/eating_noises) /mob/living/proc/vore_bellyrub(var/mob/living/T in view(1,src)) - set name = "Give Bellyrubs" - set category = "Abilities.General" - set desc = "Provide bellyrubs to either yourself or another mob with a belly." if(!T) - T = tgui_input_list(src, "Choose whose belly to rub", "Rub Belly?", mobs_in_view(1,src)) - if(!T) - return FALSE + return FALSE + if(!(T in view(1,src))) return FALSE if(T.vore_selected) diff --git a/code/modules/vore/eating/simple_animal_vr.dm b/code/modules/vore/eating/simple_animal_vr.dm index e63df54227..a72d0f6595 100644 --- a/code/modules/vore/eating/simple_animal_vr.dm +++ b/code/modules/vore/eating/simple_animal_vr.dm @@ -32,7 +32,6 @@ return */ feed_grabbed_to_self(src,T) - //update_icon() CHOMPEdit /mob/living/simple_mob/perform_the_nom(mob/living/user, mob/living/prey, mob/living/pred, obj/belly/belly, delay_time) if(vore_active && !voremob_loaded && pred == src) //Only init your own bellies. diff --git a/code/modules/xenoarcheaology/tools/tools.dm b/code/modules/xenoarcheaology/tools/tools.dm index d20ea47564..f8b82730f2 100644 --- a/code/modules/xenoarcheaology/tools/tools.dm +++ b/code/modules/xenoarcheaology/tools/tools.dm @@ -260,7 +260,7 @@ if(datum_flags & DF_ISPROCESSING) //scan radios in the world to try and find one var/cur_dist = 999 - for(var/obj/item/radio/beacon/R in all_beacons) + for(var/obj/item/radio/beacon/R in GLOB.all_beacons) if(R.z == src.z && R.frequency == src.frequency) var/check_dist = get_dist(src,R) if(check_dist < cur_dist) diff --git a/maps/redgate/fantasy_items.dm b/maps/redgate/fantasy_items.dm index 5e636f337b..4354828768 100644 --- a/maps/redgate/fantasy_items.dm +++ b/maps/redgate/fantasy_items.dm @@ -479,7 +479,7 @@ /obj/item/perfect_tele/magic/attack_self(mob/user, var/radial_menu_anchor = src) if(loc_network) - for(var/obj/item/perfect_tele_beacon/stationary/nb in premade_tele_beacons) + for(var/obj/item/perfect_tele_beacon/stationary/nb in GLOB.premade_tele_beacons) if(nb.tele_network == loc_network) beacons[nb.tele_name] = nb loc_network = null //Consumed diff --git a/sound/ambience/thor/birds_stinger1.ogg b/sound/ambience/thor/birds_stinger1.ogg new file mode 100644 index 0000000000..68ed1d717a Binary files /dev/null and b/sound/ambience/thor/birds_stinger1.ogg differ diff --git a/sound/ambience/thor/birds_stinger2.ogg b/sound/ambience/thor/birds_stinger2.ogg new file mode 100644 index 0000000000..46bf1574c0 Binary files /dev/null and b/sound/ambience/thor/birds_stinger2.ogg differ diff --git a/sound/ambience/thor/birds_stinger3.ogg b/sound/ambience/thor/birds_stinger3.ogg new file mode 100644 index 0000000000..88614d2a10 Binary files /dev/null and b/sound/ambience/thor/birds_stinger3.ogg differ diff --git a/sound/ambience/thor/jungle_night_loop1.ogg b/sound/ambience/thor/jungle_night_loop1.ogg new file mode 100644 index 0000000000..e5219992dd Binary files /dev/null and b/sound/ambience/thor/jungle_night_loop1.ogg differ diff --git a/sound/ambience/thor/jungle_night_loop2.ogg b/sound/ambience/thor/jungle_night_loop2.ogg new file mode 100644 index 0000000000..bb9629c846 Binary files /dev/null and b/sound/ambience/thor/jungle_night_loop2.ogg differ diff --git a/sound/ambience/thor/jungle_night_loop3.ogg b/sound/ambience/thor/jungle_night_loop3.ogg new file mode 100644 index 0000000000..368b72fdd4 Binary files /dev/null and b/sound/ambience/thor/jungle_night_loop3.ogg differ diff --git a/sound/ambience/thor/jungle_night_loop4.ogg b/sound/ambience/thor/jungle_night_loop4.ogg new file mode 100644 index 0000000000..766123f153 Binary files /dev/null and b/sound/ambience/thor/jungle_night_loop4.ogg differ diff --git a/sound/effects/carrev.ogg b/sound/effects/carrev.ogg new file mode 100644 index 0000000000..0bd679a005 Binary files /dev/null and b/sound/effects/carrev.ogg differ diff --git a/sound/effects/comp_alert_clear.ogg b/sound/effects/comp_alert_clear.ogg new file mode 100644 index 0000000000..9bbce3892b Binary files /dev/null and b/sound/effects/comp_alert_clear.ogg differ diff --git a/sound/effects/comp_alert_major.ogg b/sound/effects/comp_alert_major.ogg new file mode 100644 index 0000000000..093bb58016 Binary files /dev/null and b/sound/effects/comp_alert_major.ogg differ diff --git a/sound/effects/comp_alert_minor.ogg b/sound/effects/comp_alert_minor.ogg new file mode 100644 index 0000000000..94d60aa81a Binary files /dev/null and b/sound/effects/comp_alert_minor.ogg differ diff --git a/sound/effects/ear_ring/ear_deaf_in.ogg b/sound/effects/ear_ring/ear_deaf_in.ogg new file mode 100644 index 0000000000..80ccaa2501 Binary files /dev/null and b/sound/effects/ear_ring/ear_deaf_in.ogg differ diff --git a/sound/effects/ear_ring/ear_deaf_loop.ogg b/sound/effects/ear_ring/ear_deaf_loop.ogg new file mode 100644 index 0000000000..ffa09e9794 Binary files /dev/null and b/sound/effects/ear_ring/ear_deaf_loop.ogg differ diff --git a/sound/effects/ear_ring/ear_deaf_out.ogg b/sound/effects/ear_ring/ear_deaf_out.ogg new file mode 100644 index 0000000000..14e0c5af41 Binary files /dev/null and b/sound/effects/ear_ring/ear_deaf_out.ogg differ diff --git a/sound/effects/explosions/vehicleexplosion.ogg b/sound/effects/explosions/vehicleexplosion.ogg new file mode 100644 index 0000000000..0b4b5ddc97 Binary files /dev/null and b/sound/effects/explosions/vehicleexplosion.ogg differ diff --git a/sound/effects/insert_id_card.ogg b/sound/effects/insert_id_card.ogg new file mode 100644 index 0000000000..990ff2a759 Binary files /dev/null and b/sound/effects/insert_id_card.ogg differ diff --git a/sound/effects/mech/hightechstep1.ogg b/sound/effects/mech/hightechstep1.ogg new file mode 100644 index 0000000000..37377d02a3 Binary files /dev/null and b/sound/effects/mech/hightechstep1.ogg differ diff --git a/sound/effects/mech/hightechstep2.ogg b/sound/effects/mech/hightechstep2.ogg new file mode 100644 index 0000000000..632913691d Binary files /dev/null and b/sound/effects/mech/hightechstep2.ogg differ diff --git a/sound/effects/mech/powerloader_step.ogg b/sound/effects/mech/powerloader_step.ogg new file mode 100644 index 0000000000..af427df865 Binary files /dev/null and b/sound/effects/mech/powerloader_step.ogg differ diff --git a/sound/effects/mech/powerloader_step2.ogg b/sound/effects/mech/powerloader_step2.ogg new file mode 100644 index 0000000000..60aaa6bd34 Binary files /dev/null and b/sound/effects/mech/powerloader_step2.ogg differ diff --git a/sound/effects/mob_effects/teshariscream.ogg b/sound/effects/mob_effects/teshariscream.ogg new file mode 100644 index 0000000000..9beb0106a3 Binary files /dev/null and b/sound/effects/mob_effects/teshariscream.ogg differ diff --git a/sound/effects/mob_effects/una_scream1.ogg b/sound/effects/mob_effects/una_scream1.ogg new file mode 100644 index 0000000000..dac64b1b16 Binary files /dev/null and b/sound/effects/mob_effects/una_scream1.ogg differ diff --git a/sound/effects/mob_effects/una_scream2.ogg b/sound/effects/mob_effects/una_scream2.ogg new file mode 100644 index 0000000000..8ab6b23290 Binary files /dev/null and b/sound/effects/mob_effects/una_scream2.ogg differ diff --git a/sound/effects/mob_effects/x_scream1.ogg b/sound/effects/mob_effects/x_scream1.ogg new file mode 100644 index 0000000000..869e6b27c8 Binary files /dev/null and b/sound/effects/mob_effects/x_scream1.ogg differ diff --git a/sound/effects/mob_effects/x_scream2.ogg b/sound/effects/mob_effects/x_scream2.ogg new file mode 100644 index 0000000000..9c86cba70a Binary files /dev/null and b/sound/effects/mob_effects/x_scream2.ogg differ diff --git a/sound/effects/mob_effects/x_scream3.ogg b/sound/effects/mob_effects/x_scream3.ogg new file mode 100644 index 0000000000..1f1551029e Binary files /dev/null and b/sound/effects/mob_effects/x_scream3.ogg differ diff --git a/sound/effects/monolith_ambience.ogg b/sound/effects/monolith_ambience.ogg new file mode 100644 index 0000000000..809a1d1c8b Binary files /dev/null and b/sound/effects/monolith_ambience.ogg differ diff --git a/sound/effects/monolith_ambience_quieter.ogg b/sound/effects/monolith_ambience_quieter.ogg new file mode 100644 index 0000000000..15f5c22994 Binary files /dev/null and b/sound/effects/monolith_ambience_quieter.ogg differ diff --git a/sound/effects/monolith_death.ogg b/sound/effects/monolith_death.ogg new file mode 100644 index 0000000000..19e495abee Binary files /dev/null and b/sound/effects/monolith_death.ogg differ diff --git a/sound/effects/remove_id_card.ogg b/sound/effects/remove_id_card.ogg new file mode 100644 index 0000000000..a7c560f9e5 Binary files /dev/null and b/sound/effects/remove_id_card.ogg differ diff --git a/sound/effects/tank_treads.ogg b/sound/effects/tank_treads.ogg new file mode 100644 index 0000000000..be4e0ff273 Binary files /dev/null and b/sound/effects/tank_treads.ogg differ diff --git a/sound/effects/una_scream1.ogg b/sound/effects/una_scream1.ogg new file mode 100644 index 0000000000..dac64b1b16 Binary files /dev/null and b/sound/effects/una_scream1.ogg differ diff --git a/sound/effects/una_scream2.ogg b/sound/effects/una_scream2.ogg new file mode 100644 index 0000000000..8ab6b23290 Binary files /dev/null and b/sound/effects/una_scream2.ogg differ diff --git a/sound/effects/vehicle/engine_loop.ogg b/sound/effects/vehicle/engine_loop.ogg new file mode 100644 index 0000000000..b5c76934a5 Binary files /dev/null and b/sound/effects/vehicle/engine_loop.ogg differ diff --git a/sound/effects/vehicle/engine_loop_finish.ogg b/sound/effects/vehicle/engine_loop_finish.ogg new file mode 100644 index 0000000000..c6690c7384 Binary files /dev/null and b/sound/effects/vehicle/engine_loop_finish.ogg differ diff --git a/sound/effects/vehicle/engine_off.ogg b/sound/effects/vehicle/engine_off.ogg new file mode 100644 index 0000000000..8c1e3e61dd Binary files /dev/null and b/sound/effects/vehicle/engine_off.ogg differ diff --git a/sound/effects/vehicle/ignition_car.ogg b/sound/effects/vehicle/ignition_car.ogg new file mode 100644 index 0000000000..5b1c845b85 Binary files /dev/null and b/sound/effects/vehicle/ignition_car.ogg differ diff --git a/sound/items/open.ogg b/sound/items/open.ogg new file mode 100644 index 0000000000..cad742f1bf Binary files /dev/null and b/sound/items/open.ogg differ diff --git a/sound/items/salvage/salvagedrop.ogg b/sound/items/salvage/salvagedrop.ogg new file mode 100644 index 0000000000..1a018cf377 Binary files /dev/null and b/sound/items/salvage/salvagedrop.ogg differ diff --git a/sound/items/salvage/salvagepickup.ogg b/sound/items/salvage/salvagepickup.ogg new file mode 100644 index 0000000000..0e9a3d0ea9 Binary files /dev/null and b/sound/items/salvage/salvagepickup.ogg differ diff --git a/sound/items/taperecorder_drop.ogg b/sound/items/taperecorder_drop.ogg new file mode 100644 index 0000000000..6e3c151140 Binary files /dev/null and b/sound/items/taperecorder_drop.ogg differ diff --git a/sound/items/taperecorder_pickup.ogg b/sound/items/taperecorder_pickup.ogg new file mode 100644 index 0000000000..941640aefd Binary files /dev/null and b/sound/items/taperecorder_pickup.ogg differ diff --git a/sound/machines/HPLC_binary_pump.ogg b/sound/machines/HPLC_binary_pump.ogg new file mode 100644 index 0000000000..e0c72c9e40 Binary files /dev/null and b/sound/machines/HPLC_binary_pump.ogg differ diff --git a/sound/machines/console_power_on.ogg b/sound/machines/console_power_on.ogg new file mode 100644 index 0000000000..3d57a202cd Binary files /dev/null and b/sound/machines/console_power_on.ogg differ diff --git a/sound/machines/door/garagedoorclose.ogg b/sound/machines/door/garagedoorclose.ogg new file mode 100644 index 0000000000..0f330e99a0 Binary files /dev/null and b/sound/machines/door/garagedoorclose.ogg differ diff --git a/sound/machines/door/garagedooropen.ogg b/sound/machines/door/garagedooropen.ogg new file mode 100644 index 0000000000..0197579719 Binary files /dev/null and b/sound/machines/door/garagedooropen.ogg differ diff --git a/sound/machines/door/gateclose.ogg b/sound/machines/door/gateclose.ogg new file mode 100644 index 0000000000..9845dbac85 Binary files /dev/null and b/sound/machines/door/gateclose.ogg differ diff --git a/sound/machines/door/gateopen.ogg b/sound/machines/door/gateopen.ogg new file mode 100644 index 0000000000..dabf027f95 Binary files /dev/null and b/sound/machines/door/gateopen.ogg differ diff --git a/sound/machines/shield_hum/shield_generator_hum1.ogg b/sound/machines/shield_hum/shield_generator_hum1.ogg new file mode 100644 index 0000000000..c02d0dcbfa Binary files /dev/null and b/sound/machines/shield_hum/shield_generator_hum1.ogg differ diff --git a/sound/machines/shield_hum/shield_generator_hum2.ogg b/sound/machines/shield_hum/shield_generator_hum2.ogg new file mode 100644 index 0000000000..84682a7d93 Binary files /dev/null and b/sound/machines/shield_hum/shield_generator_hum2.ogg differ diff --git a/sound/machines/shield_hum/shield_generator_hum3.ogg b/sound/machines/shield_hum/shield_generator_hum3.ogg new file mode 100644 index 0000000000..d082b6219d Binary files /dev/null and b/sound/machines/shield_hum/shield_generator_hum3.ogg differ diff --git a/sound/machines/shield_hum/shield_generator_hum4.ogg b/sound/machines/shield_hum/shield_generator_hum4.ogg new file mode 100644 index 0000000000..a2a217341e Binary files /dev/null and b/sound/machines/shield_hum/shield_generator_hum4.ogg differ diff --git a/sound/machines/shield_hum/shield_generator_whir.ogg b/sound/machines/shield_hum/shield_generator_whir.ogg new file mode 100644 index 0000000000..f4cb4230d6 Binary files /dev/null and b/sound/machines/shield_hum/shield_generator_whir.ogg differ diff --git a/sound/metroid/metroid_cough.ogg b/sound/metroid/metroid_cough.ogg new file mode 100644 index 0000000000..132bb06fa2 Binary files /dev/null and b/sound/metroid/metroid_cough.ogg differ diff --git a/sound/metroid/metroid_gasp.ogg b/sound/metroid/metroid_gasp.ogg new file mode 100644 index 0000000000..a56937c9ef Binary files /dev/null and b/sound/metroid/metroid_gasp.ogg differ diff --git a/sound/metroid/metroid_scream.ogg b/sound/metroid/metroid_scream.ogg new file mode 100644 index 0000000000..86cfa27c9f Binary files /dev/null and b/sound/metroid/metroid_scream.ogg differ diff --git a/sound/metroid/metroid_sneeze.ogg b/sound/metroid/metroid_sneeze.ogg new file mode 100644 index 0000000000..ea78d17e33 Binary files /dev/null and b/sound/metroid/metroid_sneeze.ogg differ diff --git a/sound/metroid/metroidattach.ogg b/sound/metroid/metroidattach.ogg new file mode 100644 index 0000000000..ceb41c58a8 Binary files /dev/null and b/sound/metroid/metroidattach.ogg differ diff --git a/sound/metroid/metroidattack.ogg b/sound/metroid/metroidattack.ogg new file mode 100644 index 0000000000..6540cd23dd Binary files /dev/null and b/sound/metroid/metroidattack.ogg differ diff --git a/sound/metroid/metroiddeath.ogg b/sound/metroid/metroiddeath.ogg new file mode 100644 index 0000000000..53b5c20c4d Binary files /dev/null and b/sound/metroid/metroiddeath.ogg differ diff --git a/sound/metroid/metroiddetach.ogg b/sound/metroid/metroiddetach.ogg new file mode 100644 index 0000000000..6f8e052f68 Binary files /dev/null and b/sound/metroid/metroiddetach.ogg differ diff --git a/sound/metroid/metroidgamma.ogg b/sound/metroid/metroidgamma.ogg new file mode 100644 index 0000000000..61533c9286 Binary files /dev/null and b/sound/metroid/metroidgamma.ogg differ diff --git a/sound/metroid/metroidgrow.ogg b/sound/metroid/metroidgrow.ogg new file mode 100644 index 0000000000..bddfb4c039 Binary files /dev/null and b/sound/metroid/metroidgrow.ogg differ diff --git a/sound/metroid/metroididle.ogg b/sound/metroid/metroididle.ogg new file mode 100644 index 0000000000..e6e8cc0ace Binary files /dev/null and b/sound/metroid/metroididle.ogg differ diff --git a/sound/metroid/metroidlunge.ogg b/sound/metroid/metroidlunge.ogg new file mode 100644 index 0000000000..d6e90e8aa8 Binary files /dev/null and b/sound/metroid/metroidlunge.ogg differ diff --git a/sound/metroid/metroidomega.ogg b/sound/metroid/metroidomega.ogg new file mode 100644 index 0000000000..c9f584fd38 Binary files /dev/null and b/sound/metroid/metroidomega.ogg differ diff --git a/sound/metroid/metroidomegadeath.ogg b/sound/metroid/metroidomegadeath.ogg new file mode 100644 index 0000000000..02052b18cc Binary files /dev/null and b/sound/metroid/metroidomegadeath.ogg differ diff --git a/sound/metroid/metroidqueen.ogg b/sound/metroid/metroidqueen.ogg new file mode 100644 index 0000000000..53229290e9 Binary files /dev/null and b/sound/metroid/metroidqueen.ogg differ diff --git a/sound/metroid/metroidqueendeath.ogg b/sound/metroid/metroidqueendeath.ogg new file mode 100644 index 0000000000..43619e6f46 Binary files /dev/null and b/sound/metroid/metroidqueendeath.ogg differ diff --git a/sound/metroid/metroidsee.ogg b/sound/metroid/metroidsee.ogg new file mode 100644 index 0000000000..fe9aa46eec Binary files /dev/null and b/sound/metroid/metroidsee.ogg differ diff --git a/sound/metroid/metroidswoosh.ogg b/sound/metroid/metroidswoosh.ogg new file mode 100644 index 0000000000..f017c47bdc Binary files /dev/null and b/sound/metroid/metroidswoosh.ogg differ diff --git a/sound/metroid/metroidzeta.ogg b/sound/metroid/metroidzeta.ogg new file mode 100644 index 0000000000..8056ab0797 Binary files /dev/null and b/sound/metroid/metroidzeta.ogg differ diff --git a/sound/misc/cozy.ogg b/sound/misc/cozy.ogg new file mode 100644 index 0000000000..e49e0a50c6 Binary files /dev/null and b/sound/misc/cozy.ogg differ diff --git a/sound/misc/silence.ogg b/sound/misc/silence.ogg new file mode 100644 index 0000000000..41ee44cd04 Binary files /dev/null and b/sound/misc/silence.ogg differ diff --git a/sound/mob/footstep_large.ogg b/sound/mob/footstep_large.ogg new file mode 100644 index 0000000000..7eaef41e15 Binary files /dev/null and b/sound/mob/footstep_large.ogg differ diff --git a/sound/mob/footstep_large2.ogg b/sound/mob/footstep_large2.ogg new file mode 100644 index 0000000000..065fca4dcd Binary files /dev/null and b/sound/mob/footstep_large2.ogg differ diff --git a/sound/mob/heavy_boots.ogg b/sound/mob/heavy_boots.ogg new file mode 100644 index 0000000000..5aab930afa Binary files /dev/null and b/sound/mob/heavy_boots.ogg differ diff --git a/sound/mob/robots/Cyber_Horror.ogg b/sound/mob/robots/Cyber_Horror.ogg new file mode 100644 index 0000000000..21cf70a6e0 Binary files /dev/null and b/sound/mob/robots/Cyber_Horror.ogg differ diff --git a/sound/mob/robots/Cyber_Horror_Cat.ogg b/sound/mob/robots/Cyber_Horror_Cat.ogg new file mode 100644 index 0000000000..a45d87bfdd Binary files /dev/null and b/sound/mob/robots/Cyber_Horror_Cat.ogg differ diff --git a/sound/mob/robots/Cyber_Horror_Changeling.ogg b/sound/mob/robots/Cyber_Horror_Changeling.ogg new file mode 100644 index 0000000000..39d57ea18b Binary files /dev/null and b/sound/mob/robots/Cyber_Horror_Changeling.ogg differ diff --git a/sound/mob/robots/Cyber_Horror_ChangelingLeap.ogg b/sound/mob/robots/Cyber_Horror_ChangelingLeap.ogg new file mode 100644 index 0000000000..bb11c7898a Binary files /dev/null and b/sound/mob/robots/Cyber_Horror_ChangelingLeap.ogg differ diff --git a/sound/mob/robots/Cyber_Horror_ChangelingMelee.ogg b/sound/mob/robots/Cyber_Horror_ChangelingMelee.ogg new file mode 100644 index 0000000000..66f400c9a5 Binary files /dev/null and b/sound/mob/robots/Cyber_Horror_ChangelingMelee.ogg differ diff --git a/sound/mob/robots/Cyber_Horror_Corgi.ogg b/sound/mob/robots/Cyber_Horror_Corgi.ogg new file mode 100644 index 0000000000..b36e96d166 Binary files /dev/null and b/sound/mob/robots/Cyber_Horror_Corgi.ogg differ diff --git a/sound/mob/robots/Cyber_Horror_Grey.ogg b/sound/mob/robots/Cyber_Horror_Grey.ogg new file mode 100644 index 0000000000..0c1d5af640 Binary files /dev/null and b/sound/mob/robots/Cyber_Horror_Grey.ogg differ diff --git a/sound/mob/robots/Cyber_Horror_Plasma.ogg b/sound/mob/robots/Cyber_Horror_Plasma.ogg new file mode 100644 index 0000000000..86fae497ce Binary files /dev/null and b/sound/mob/robots/Cyber_Horror_Plasma.ogg differ diff --git a/sound/mob/robots/Cyber_Horror_Tajaran.ogg b/sound/mob/robots/Cyber_Horror_Tajaran.ogg new file mode 100644 index 0000000000..c20f634955 Binary files /dev/null and b/sound/mob/robots/Cyber_Horror_Tajaran.ogg differ diff --git a/sound/mob/robots/Cyber_Horror_Vox.ogg b/sound/mob/robots/Cyber_Horror_Vox.ogg new file mode 100644 index 0000000000..a1a4132128 Binary files /dev/null and b/sound/mob/robots/Cyber_Horror_Vox.ogg differ diff --git a/sound/mob/robots/DroneFreeze.ogg b/sound/mob/robots/DroneFreeze.ogg new file mode 100644 index 0000000000..d6284b6861 Binary files /dev/null and b/sound/mob/robots/DroneFreeze.ogg differ diff --git a/sound/mob/robots/DroneFreezeLong.ogg b/sound/mob/robots/DroneFreezeLong.ogg new file mode 100644 index 0000000000..59eb2b4ebb Binary files /dev/null and b/sound/mob/robots/DroneFreezeLong.ogg differ diff --git a/sound/mob/robots/DroneLostTarget.ogg b/sound/mob/robots/DroneLostTarget.ogg new file mode 100644 index 0000000000..85fe3a081f Binary files /dev/null and b/sound/mob/robots/DroneLostTarget.ogg differ diff --git a/sound/mob/robots/GygaxDanger.ogg b/sound/mob/robots/GygaxDanger.ogg new file mode 100644 index 0000000000..df6d257d0e Binary files /dev/null and b/sound/mob/robots/GygaxDanger.ogg differ diff --git a/sound/mob/robots/GygaxIntruder4.ogg b/sound/mob/robots/GygaxIntruder4.ogg new file mode 100644 index 0000000000..47868c1118 Binary files /dev/null and b/sound/mob/robots/GygaxIntruder4.ogg differ diff --git a/sound/mob/robots/MasterSee.ogg b/sound/mob/robots/MasterSee.ogg new file mode 100644 index 0000000000..7855751197 Binary files /dev/null and b/sound/mob/robots/MasterSee.ogg differ diff --git a/sound/mob/robots/infector.ogg b/sound/mob/robots/infector.ogg new file mode 100644 index 0000000000..9407f86606 Binary files /dev/null and b/sound/mob/robots/infector.ogg differ diff --git a/sound/talksounds/xeno/xenotalk.ogg b/sound/talksounds/xeno/xenotalk.ogg new file mode 100644 index 0000000000..761348cb3b Binary files /dev/null and b/sound/talksounds/xeno/xenotalk.ogg differ diff --git a/sound/talksounds/xeno/xenotalk2.ogg b/sound/talksounds/xeno/xenotalk2.ogg new file mode 100644 index 0000000000..c58b29abae Binary files /dev/null and b/sound/talksounds/xeno/xenotalk2.ogg differ diff --git a/sound/talksounds/xeno/xenotalk3.ogg b/sound/talksounds/xeno/xenotalk3.ogg new file mode 100644 index 0000000000..cb348a4878 Binary files /dev/null and b/sound/talksounds/xeno/xenotalk3.ogg differ diff --git a/sound/voice/android_scream.ogg b/sound/voice/android_scream.ogg new file mode 100644 index 0000000000..d3f179a84a Binary files /dev/null and b/sound/voice/android_scream.ogg differ diff --git a/sound/voice/death/canine/wolf_death1.ogg b/sound/voice/death/canine/wolf_death1.ogg new file mode 100644 index 0000000000..168f8ad6c2 Binary files /dev/null and b/sound/voice/death/canine/wolf_death1.ogg differ diff --git a/sound/voice/death/canine/wolf_death2.ogg b/sound/voice/death/canine/wolf_death2.ogg new file mode 100644 index 0000000000..9e158091e3 Binary files /dev/null and b/sound/voice/death/canine/wolf_death2.ogg differ diff --git a/sound/voice/death/canine/wolf_death3.ogg b/sound/voice/death/canine/wolf_death3.ogg new file mode 100644 index 0000000000..dba735f5aa Binary files /dev/null and b/sound/voice/death/canine/wolf_death3.ogg differ diff --git a/sound/voice/death/canine/wolf_death4.ogg b/sound/voice/death/canine/wolf_death4.ogg new file mode 100644 index 0000000000..0395cfa209 Binary files /dev/null and b/sound/voice/death/canine/wolf_death4.ogg differ diff --git a/sound/voice/death/canine/wolf_death5.ogg b/sound/voice/death/canine/wolf_death5.ogg new file mode 100644 index 0000000000..c2fb41e1da Binary files /dev/null and b/sound/voice/death/canine/wolf_death5.ogg differ diff --git a/sound/voice/death/cervine/cervine_death.ogg b/sound/voice/death/cervine/cervine_death.ogg new file mode 100644 index 0000000000..6ffbf27cd1 Binary files /dev/null and b/sound/voice/death/cervine/cervine_death.ogg differ diff --git a/sound/voice/death/feline/feline_death.ogg b/sound/voice/death/feline/feline_death.ogg new file mode 100644 index 0000000000..b4710a2754 Binary files /dev/null and b/sound/voice/death/feline/feline_death.ogg differ diff --git a/sound/voice/death/generic/female/female_death_1.ogg b/sound/voice/death/generic/female/female_death_1.ogg new file mode 100644 index 0000000000..b5c0daf5c9 Binary files /dev/null and b/sound/voice/death/generic/female/female_death_1.ogg differ diff --git a/sound/voice/death/generic/female/female_death_2.ogg b/sound/voice/death/generic/female/female_death_2.ogg new file mode 100644 index 0000000000..639306f66c Binary files /dev/null and b/sound/voice/death/generic/female/female_death_2.ogg differ diff --git a/sound/voice/death/generic/female/female_death_3.ogg b/sound/voice/death/generic/female/female_death_3.ogg new file mode 100644 index 0000000000..71015d2b82 Binary files /dev/null and b/sound/voice/death/generic/female/female_death_3.ogg differ diff --git a/sound/voice/death/generic/female/female_death_4.ogg b/sound/voice/death/generic/female/female_death_4.ogg new file mode 100644 index 0000000000..45e11421cd Binary files /dev/null and b/sound/voice/death/generic/female/female_death_4.ogg differ diff --git a/sound/voice/death/generic/female/female_death_5.ogg b/sound/voice/death/generic/female/female_death_5.ogg new file mode 100644 index 0000000000..b0f93a6ce4 Binary files /dev/null and b/sound/voice/death/generic/female/female_death_5.ogg differ diff --git a/sound/voice/death/generic/female/female_death_6.ogg b/sound/voice/death/generic/female/female_death_6.ogg new file mode 100644 index 0000000000..2a414f3269 Binary files /dev/null and b/sound/voice/death/generic/female/female_death_6.ogg differ diff --git a/sound/voice/death/generic/male/male_death_1.ogg b/sound/voice/death/generic/male/male_death_1.ogg new file mode 100644 index 0000000000..3da1953d99 Binary files /dev/null and b/sound/voice/death/generic/male/male_death_1.ogg differ diff --git a/sound/voice/death/generic/male/male_death_2.ogg b/sound/voice/death/generic/male/male_death_2.ogg new file mode 100644 index 0000000000..eb79677737 Binary files /dev/null and b/sound/voice/death/generic/male/male_death_2.ogg differ diff --git a/sound/voice/death/generic/male/male_death_3.ogg b/sound/voice/death/generic/male/male_death_3.ogg new file mode 100644 index 0000000000..c5eac27e59 Binary files /dev/null and b/sound/voice/death/generic/male/male_death_3.ogg differ diff --git a/sound/voice/death/generic/male/male_death_4.ogg b/sound/voice/death/generic/male/male_death_4.ogg new file mode 100644 index 0000000000..5feb54b123 Binary files /dev/null and b/sound/voice/death/generic/male/male_death_4.ogg differ diff --git a/sound/voice/death/generic/male/male_death_5.ogg b/sound/voice/death/generic/male/male_death_5.ogg new file mode 100644 index 0000000000..6989fafcdd Binary files /dev/null and b/sound/voice/death/generic/male/male_death_5.ogg differ diff --git a/sound/voice/death/generic/male/male_death_6.ogg b/sound/voice/death/generic/male/male_death_6.ogg new file mode 100644 index 0000000000..107ef06948 Binary files /dev/null and b/sound/voice/death/generic/male/male_death_6.ogg differ diff --git a/sound/voice/death/generic/male/male_death_7.ogg b/sound/voice/death/generic/male/male_death_7.ogg new file mode 100644 index 0000000000..591c56b7fb Binary files /dev/null and b/sound/voice/death/generic/male/male_death_7.ogg differ diff --git a/sound/voice/death/lizard/lizard_death.ogg b/sound/voice/death/lizard/lizard_death.ogg new file mode 100644 index 0000000000..d42db48374 Binary files /dev/null and b/sound/voice/death/lizard/lizard_death.ogg differ diff --git a/sound/voice/death/spider/spider_death.ogg b/sound/voice/death/spider/spider_death.ogg new file mode 100644 index 0000000000..e03acecc92 Binary files /dev/null and b/sound/voice/death/spider/spider_death.ogg differ diff --git a/sound/voice/death/xeno/xeno_death.ogg b/sound/voice/death/xeno/xeno_death.ogg new file mode 100644 index 0000000000..3762b1e683 Binary files /dev/null and b/sound/voice/death/xeno/xeno_death.ogg differ diff --git a/sound/voice/death/xeno/xeno_death2.ogg b/sound/voice/death/xeno/xeno_death2.ogg new file mode 100644 index 0000000000..9cb00d374d Binary files /dev/null and b/sound/voice/death/xeno/xeno_death2.ogg differ diff --git a/sound/voice/emotes/caw.ogg b/sound/voice/emotes/caw.ogg new file mode 100644 index 0000000000..149434961f Binary files /dev/null and b/sound/voice/emotes/caw.ogg differ diff --git a/sound/voice/emotes/gwah.ogg b/sound/voice/emotes/gwah.ogg new file mode 100644 index 0000000000..f0cc1e0a9a Binary files /dev/null and b/sound/voice/emotes/gwah.ogg differ diff --git a/sound/voice/emotes/squealemote.ogg b/sound/voice/emotes/squealemote.ogg new file mode 100644 index 0000000000..f4624376e2 Binary files /dev/null and b/sound/voice/emotes/squealemote.ogg differ diff --git a/sound/voice/emotes/tailthumpemote.ogg b/sound/voice/emotes/tailthumpemote.ogg new file mode 100644 index 0000000000..e4bf25f7b8 Binary files /dev/null and b/sound/voice/emotes/tailthumpemote.ogg differ diff --git a/sound/voice/emotes/wawa.ogg b/sound/voice/emotes/wawa.ogg new file mode 100644 index 0000000000..3953970560 Binary files /dev/null and b/sound/voice/emotes/wawa.ogg differ diff --git a/sound/voice/emotes/xenogrowl.ogg b/sound/voice/emotes/xenogrowl.ogg new file mode 100644 index 0000000000..a6b820bf1f Binary files /dev/null and b/sound/voice/emotes/xenogrowl.ogg differ diff --git a/sound/voice/emotes/xenohiss.ogg b/sound/voice/emotes/xenohiss.ogg new file mode 100644 index 0000000000..ea6a0a960c Binary files /dev/null and b/sound/voice/emotes/xenohiss.ogg differ diff --git a/sound/voice/emotes/xenopurr.ogg b/sound/voice/emotes/xenopurr.ogg new file mode 100644 index 0000000000..2231494c40 Binary files /dev/null and b/sound/voice/emotes/xenopurr.ogg differ diff --git a/sound/voice/emotes/yip1.ogg b/sound/voice/emotes/yip1.ogg new file mode 100644 index 0000000000..9f54efe3eb Binary files /dev/null and b/sound/voice/emotes/yip1.ogg differ diff --git a/sound/voice/emotes/yip2.ogg b/sound/voice/emotes/yip2.ogg new file mode 100644 index 0000000000..acd24ae256 Binary files /dev/null and b/sound/voice/emotes/yip2.ogg differ diff --git a/sound/voice/emotes/yip3.ogg b/sound/voice/emotes/yip3.ogg new file mode 100644 index 0000000000..36bc9ec00f Binary files /dev/null and b/sound/voice/emotes/yip3.ogg differ diff --git a/sound/voice/gasp/canine/wolf_gasp.ogg b/sound/voice/gasp/canine/wolf_gasp.ogg new file mode 100644 index 0000000000..894e6b2d55 Binary files /dev/null and b/sound/voice/gasp/canine/wolf_gasp.ogg differ diff --git a/sound/voice/gasp/feline/feline_gasp.ogg b/sound/voice/gasp/feline/feline_gasp.ogg new file mode 100644 index 0000000000..eb0d9926c8 Binary files /dev/null and b/sound/voice/gasp/feline/feline_gasp.ogg differ diff --git a/sound/voice/gasp/generic/female/female_gasp1.ogg b/sound/voice/gasp/generic/female/female_gasp1.ogg new file mode 100644 index 0000000000..e06d178523 Binary files /dev/null and b/sound/voice/gasp/generic/female/female_gasp1.ogg differ diff --git a/sound/voice/gasp/generic/female/female_gasp2.ogg b/sound/voice/gasp/generic/female/female_gasp2.ogg new file mode 100644 index 0000000000..a9683910d5 Binary files /dev/null and b/sound/voice/gasp/generic/female/female_gasp2.ogg differ diff --git a/sound/voice/gasp/generic/male/male_gasp1.ogg b/sound/voice/gasp/generic/male/male_gasp1.ogg new file mode 100644 index 0000000000..ab513a5b2d Binary files /dev/null and b/sound/voice/gasp/generic/male/male_gasp1.ogg differ diff --git a/sound/voice/gasp/generic/male/male_gasp2.ogg b/sound/voice/gasp/generic/male/male_gasp2.ogg new file mode 100644 index 0000000000..33e87af4ee Binary files /dev/null and b/sound/voice/gasp/generic/male/male_gasp2.ogg differ diff --git a/sound/voice/gasp/generic/male/male_gasp3.ogg b/sound/voice/gasp/generic/male/male_gasp3.ogg new file mode 100644 index 0000000000..ca9c423b7a Binary files /dev/null and b/sound/voice/gasp/generic/male/male_gasp3.ogg differ diff --git a/sound/voice/gasp/xeno/alien_hiss1.ogg b/sound/voice/gasp/xeno/alien_hiss1.ogg new file mode 100644 index 0000000000..f29323687b Binary files /dev/null and b/sound/voice/gasp/xeno/alien_hiss1.ogg differ diff --git a/sound/voice/malescream_2.ogg b/sound/voice/malescream_2.ogg new file mode 100644 index 0000000000..989b612ab1 Binary files /dev/null and b/sound/voice/malescream_2.ogg differ diff --git a/sound/voice/mgeow.ogg b/sound/voice/mgeow.ogg new file mode 100644 index 0000000000..e6c6677644 Binary files /dev/null and b/sound/voice/mgeow.ogg differ diff --git a/sound/voice/pain/canine/wolf_pain.ogg b/sound/voice/pain/canine/wolf_pain.ogg new file mode 100644 index 0000000000..c86dea537b Binary files /dev/null and b/sound/voice/pain/canine/wolf_pain.ogg differ diff --git a/sound/voice/pain/canine/wolf_pain2.ogg b/sound/voice/pain/canine/wolf_pain2.ogg new file mode 100644 index 0000000000..3d3fc32ffd Binary files /dev/null and b/sound/voice/pain/canine/wolf_pain2.ogg differ diff --git a/sound/voice/pain/canine/wolf_pain3.ogg b/sound/voice/pain/canine/wolf_pain3.ogg new file mode 100644 index 0000000000..1223c4f73f Binary files /dev/null and b/sound/voice/pain/canine/wolf_pain3.ogg differ diff --git a/sound/voice/pain/canine/wolf_pain4.ogg b/sound/voice/pain/canine/wolf_pain4.ogg new file mode 100644 index 0000000000..224ff50a31 Binary files /dev/null and b/sound/voice/pain/canine/wolf_pain4.ogg differ diff --git a/sound/voice/pain/feline/feline_pain.ogg b/sound/voice/pain/feline/feline_pain.ogg new file mode 100644 index 0000000000..4a24bae3e1 Binary files /dev/null and b/sound/voice/pain/feline/feline_pain.ogg differ diff --git a/sound/voice/pain/generic/female/female_pain_1.ogg b/sound/voice/pain/generic/female/female_pain_1.ogg new file mode 100644 index 0000000000..944518095b Binary files /dev/null and b/sound/voice/pain/generic/female/female_pain_1.ogg differ diff --git a/sound/voice/pain/generic/female/female_pain_2.ogg b/sound/voice/pain/generic/female/female_pain_2.ogg new file mode 100644 index 0000000000..aa2eaba352 Binary files /dev/null and b/sound/voice/pain/generic/female/female_pain_2.ogg differ diff --git a/sound/voice/pain/generic/female/female_pain_3.ogg b/sound/voice/pain/generic/female/female_pain_3.ogg new file mode 100644 index 0000000000..c21d462ba5 Binary files /dev/null and b/sound/voice/pain/generic/female/female_pain_3.ogg differ diff --git a/sound/voice/pain/generic/male/male_pain_1.ogg b/sound/voice/pain/generic/male/male_pain_1.ogg new file mode 100644 index 0000000000..bf8e75fa8d Binary files /dev/null and b/sound/voice/pain/generic/male/male_pain_1.ogg differ diff --git a/sound/voice/pain/generic/male/male_pain_2.ogg b/sound/voice/pain/generic/male/male_pain_2.ogg new file mode 100644 index 0000000000..b56dd913b6 Binary files /dev/null and b/sound/voice/pain/generic/male/male_pain_2.ogg differ diff --git a/sound/voice/pain/generic/male/male_pain_3.ogg b/sound/voice/pain/generic/male/male_pain_3.ogg new file mode 100644 index 0000000000..dbecee87bd Binary files /dev/null and b/sound/voice/pain/generic/male/male_pain_3.ogg differ diff --git a/sound/voice/pain/generic/male/male_pain_4.ogg b/sound/voice/pain/generic/male/male_pain_4.ogg new file mode 100644 index 0000000000..59a865574f Binary files /dev/null and b/sound/voice/pain/generic/male/male_pain_4.ogg differ diff --git a/sound/voice/pain/generic/male/male_pain_5.ogg b/sound/voice/pain/generic/male/male_pain_5.ogg new file mode 100644 index 0000000000..5292671585 Binary files /dev/null and b/sound/voice/pain/generic/male/male_pain_5.ogg differ diff --git a/sound/voice/pain/generic/male/male_pain_6.ogg b/sound/voice/pain/generic/male/male_pain_6.ogg new file mode 100644 index 0000000000..41feebf8c5 Binary files /dev/null and b/sound/voice/pain/generic/male/male_pain_6.ogg differ diff --git a/sound/voice/pain/generic/male/male_pain_7.ogg b/sound/voice/pain/generic/male/male_pain_7.ogg new file mode 100644 index 0000000000..488e5a99fe Binary files /dev/null and b/sound/voice/pain/generic/male/male_pain_7.ogg differ diff --git a/sound/voice/pain/generic/male/male_pain_8.ogg b/sound/voice/pain/generic/male/male_pain_8.ogg new file mode 100644 index 0000000000..b2afea3365 Binary files /dev/null and b/sound/voice/pain/generic/male/male_pain_8.ogg differ diff --git a/sound/voice/pain/lizard/lizard_pain.ogg b/sound/voice/pain/lizard/lizard_pain.ogg new file mode 100644 index 0000000000..8b1bca088c Binary files /dev/null and b/sound/voice/pain/lizard/lizard_pain.ogg differ diff --git a/sound/voice/pain/robotic/robot_pain1.ogg b/sound/voice/pain/robotic/robot_pain1.ogg new file mode 100644 index 0000000000..8c155c18c6 Binary files /dev/null and b/sound/voice/pain/robotic/robot_pain1.ogg differ diff --git a/sound/voice/pain/robotic/robot_pain2.ogg b/sound/voice/pain/robotic/robot_pain2.ogg new file mode 100644 index 0000000000..4ec71e874e Binary files /dev/null and b/sound/voice/pain/robotic/robot_pain2.ogg differ diff --git a/sound/voice/pain/robotic/robot_pain3.ogg b/sound/voice/pain/robotic/robot_pain3.ogg new file mode 100644 index 0000000000..3f2a8ff647 Binary files /dev/null and b/sound/voice/pain/robotic/robot_pain3.ogg differ diff --git a/sound/voice/pain/scientist/sci_pain1.ogg b/sound/voice/pain/scientist/sci_pain1.ogg new file mode 100644 index 0000000000..d5096def72 Binary files /dev/null and b/sound/voice/pain/scientist/sci_pain1.ogg differ diff --git a/sound/voice/pain/scientist/sci_pain4.ogg b/sound/voice/pain/scientist/sci_pain4.ogg new file mode 100644 index 0000000000..b78b75e96b Binary files /dev/null and b/sound/voice/pain/scientist/sci_pain4.ogg differ diff --git a/sound/voice/pain/scientist/sci_pain5.ogg b/sound/voice/pain/scientist/sci_pain5.ogg new file mode 100644 index 0000000000..7d2cf7ea18 Binary files /dev/null and b/sound/voice/pain/scientist/sci_pain5.ogg differ diff --git a/sound/voice/pain/vulpine/fox_pain1.ogg b/sound/voice/pain/vulpine/fox_pain1.ogg new file mode 100644 index 0000000000..e3bf86e69f Binary files /dev/null and b/sound/voice/pain/vulpine/fox_pain1.ogg differ diff --git a/sound/voice/pain/vulpine/fox_pain2.ogg b/sound/voice/pain/vulpine/fox_pain2.ogg new file mode 100644 index 0000000000..d45d568757 Binary files /dev/null and b/sound/voice/pain/vulpine/fox_pain2.ogg differ diff --git a/sound/voice/pain/vulpine/fox_pain3.ogg b/sound/voice/pain/vulpine/fox_pain3.ogg new file mode 100644 index 0000000000..611a99d849 Binary files /dev/null and b/sound/voice/pain/vulpine/fox_pain3.ogg differ diff --git a/sound/voice/pain/vulpine/fox_pain4.ogg b/sound/voice/pain/vulpine/fox_pain4.ogg new file mode 100644 index 0000000000..d94dfefc05 Binary files /dev/null and b/sound/voice/pain/vulpine/fox_pain4.ogg differ diff --git a/sound/voice/pain/xeno/alien_roar1.ogg b/sound/voice/pain/xeno/alien_roar1.ogg new file mode 100644 index 0000000000..302ebf8104 Binary files /dev/null and b/sound/voice/pain/xeno/alien_roar1.ogg differ diff --git a/sound/voice/pain/xeno/alien_roar10.ogg b/sound/voice/pain/xeno/alien_roar10.ogg new file mode 100644 index 0000000000..1672c58d3e Binary files /dev/null and b/sound/voice/pain/xeno/alien_roar10.ogg differ diff --git a/sound/voice/pain/xeno/alien_roar11.ogg b/sound/voice/pain/xeno/alien_roar11.ogg new file mode 100644 index 0000000000..6a3f694d0c Binary files /dev/null and b/sound/voice/pain/xeno/alien_roar11.ogg differ diff --git a/sound/voice/pain/xeno/alien_roar12.ogg b/sound/voice/pain/xeno/alien_roar12.ogg new file mode 100644 index 0000000000..aa7c0064b1 Binary files /dev/null and b/sound/voice/pain/xeno/alien_roar12.ogg differ diff --git a/sound/voice/pain/xeno/alien_roar2.ogg b/sound/voice/pain/xeno/alien_roar2.ogg new file mode 100644 index 0000000000..c670730c4f Binary files /dev/null and b/sound/voice/pain/xeno/alien_roar2.ogg differ diff --git a/sound/voice/pain/xeno/alien_roar3.ogg b/sound/voice/pain/xeno/alien_roar3.ogg new file mode 100644 index 0000000000..73da74d97a Binary files /dev/null and b/sound/voice/pain/xeno/alien_roar3.ogg differ diff --git a/sound/voice/pain/xeno/alien_roar4.ogg b/sound/voice/pain/xeno/alien_roar4.ogg new file mode 100644 index 0000000000..e5c7a6b985 Binary files /dev/null and b/sound/voice/pain/xeno/alien_roar4.ogg differ diff --git a/sound/voice/pain/xeno/alien_roar5.ogg b/sound/voice/pain/xeno/alien_roar5.ogg new file mode 100644 index 0000000000..4f96d740c0 Binary files /dev/null and b/sound/voice/pain/xeno/alien_roar5.ogg differ diff --git a/sound/voice/pain/xeno/alien_roar6.ogg b/sound/voice/pain/xeno/alien_roar6.ogg new file mode 100644 index 0000000000..868e926f77 Binary files /dev/null and b/sound/voice/pain/xeno/alien_roar6.ogg differ diff --git a/sound/voice/pain/xeno/alien_roar7.ogg b/sound/voice/pain/xeno/alien_roar7.ogg new file mode 100644 index 0000000000..5deec41a04 Binary files /dev/null and b/sound/voice/pain/xeno/alien_roar7.ogg differ diff --git a/sound/voice/pain/xeno/alien_roar8.ogg b/sound/voice/pain/xeno/alien_roar8.ogg new file mode 100644 index 0000000000..70564ea3d0 Binary files /dev/null and b/sound/voice/pain/xeno/alien_roar8.ogg differ diff --git a/sound/voice/pain/xeno/alien_roar9.ogg b/sound/voice/pain/xeno/alien_roar9.ogg new file mode 100644 index 0000000000..1bec52faa0 Binary files /dev/null and b/sound/voice/pain/xeno/alien_roar9.ogg differ diff --git a/sound/voice/raccoon.ogg b/sound/voice/raccoon.ogg new file mode 100644 index 0000000000..4e5937b734 Binary files /dev/null and b/sound/voice/raccoon.ogg differ diff --git a/sound/voice/scream/canine/wolf_scream.ogg b/sound/voice/scream/canine/wolf_scream.ogg new file mode 100644 index 0000000000..e56fdc76b6 Binary files /dev/null and b/sound/voice/scream/canine/wolf_scream.ogg differ diff --git a/sound/voice/scream/canine/wolf_scream2.ogg b/sound/voice/scream/canine/wolf_scream2.ogg new file mode 100644 index 0000000000..2c457b3048 Binary files /dev/null and b/sound/voice/scream/canine/wolf_scream2.ogg differ diff --git a/sound/voice/scream/canine/wolf_scream3.ogg b/sound/voice/scream/canine/wolf_scream3.ogg new file mode 100644 index 0000000000..915bba8793 Binary files /dev/null and b/sound/voice/scream/canine/wolf_scream3.ogg differ diff --git a/sound/voice/scream/canine/wolf_scream4.ogg b/sound/voice/scream/canine/wolf_scream4.ogg new file mode 100644 index 0000000000..5f7e0dc571 Binary files /dev/null and b/sound/voice/scream/canine/wolf_scream4.ogg differ diff --git a/sound/voice/scream/canine/wolf_scream5.ogg b/sound/voice/scream/canine/wolf_scream5.ogg new file mode 100644 index 0000000000..d9e7cf77d5 Binary files /dev/null and b/sound/voice/scream/canine/wolf_scream5.ogg differ diff --git a/sound/voice/scream/canine/wolf_scream6.ogg b/sound/voice/scream/canine/wolf_scream6.ogg new file mode 100644 index 0000000000..690b7f0c26 Binary files /dev/null and b/sound/voice/scream/canine/wolf_scream6.ogg differ diff --git a/sound/voice/scream/cervine/cervine_scream.ogg b/sound/voice/scream/cervine/cervine_scream.ogg new file mode 100644 index 0000000000..6860612a0d Binary files /dev/null and b/sound/voice/scream/cervine/cervine_scream.ogg differ diff --git a/sound/voice/scream/feline/feline_scream.ogg b/sound/voice/scream/feline/feline_scream.ogg new file mode 100644 index 0000000000..a01047304d Binary files /dev/null and b/sound/voice/scream/feline/feline_scream.ogg differ diff --git a/sound/voice/scream/generic/female/female_scream_1.ogg b/sound/voice/scream/generic/female/female_scream_1.ogg new file mode 100644 index 0000000000..93bf9b7e4a Binary files /dev/null and b/sound/voice/scream/generic/female/female_scream_1.ogg differ diff --git a/sound/voice/scream/generic/female/female_scream_2.ogg b/sound/voice/scream/generic/female/female_scream_2.ogg new file mode 100644 index 0000000000..9ca58d86b0 Binary files /dev/null and b/sound/voice/scream/generic/female/female_scream_2.ogg differ diff --git a/sound/voice/scream/generic/female/female_scream_3.ogg b/sound/voice/scream/generic/female/female_scream_3.ogg new file mode 100644 index 0000000000..593b0f76bc Binary files /dev/null and b/sound/voice/scream/generic/female/female_scream_3.ogg differ diff --git a/sound/voice/scream/generic/female/female_scream_4.ogg b/sound/voice/scream/generic/female/female_scream_4.ogg new file mode 100644 index 0000000000..a838c298df Binary files /dev/null and b/sound/voice/scream/generic/female/female_scream_4.ogg differ diff --git a/sound/voice/scream/generic/female/female_scream_5.ogg b/sound/voice/scream/generic/female/female_scream_5.ogg new file mode 100644 index 0000000000..de81de5990 Binary files /dev/null and b/sound/voice/scream/generic/female/female_scream_5.ogg differ diff --git a/sound/voice/scream/generic/male/male_scream_1.ogg b/sound/voice/scream/generic/male/male_scream_1.ogg new file mode 100644 index 0000000000..dc36553769 Binary files /dev/null and b/sound/voice/scream/generic/male/male_scream_1.ogg differ diff --git a/sound/voice/scream/generic/male/male_scream_2.ogg b/sound/voice/scream/generic/male/male_scream_2.ogg new file mode 100644 index 0000000000..9c92a37409 Binary files /dev/null and b/sound/voice/scream/generic/male/male_scream_2.ogg differ diff --git a/sound/voice/scream/generic/male/male_scream_3.ogg b/sound/voice/scream/generic/male/male_scream_3.ogg new file mode 100644 index 0000000000..c77aa75074 Binary files /dev/null and b/sound/voice/scream/generic/male/male_scream_3.ogg differ diff --git a/sound/voice/scream/generic/male/male_scream_4.ogg b/sound/voice/scream/generic/male/male_scream_4.ogg new file mode 100644 index 0000000000..d5c2655380 Binary files /dev/null and b/sound/voice/scream/generic/male/male_scream_4.ogg differ diff --git a/sound/voice/scream/generic/male/male_scream_5.ogg b/sound/voice/scream/generic/male/male_scream_5.ogg new file mode 100644 index 0000000000..cad0ee02c1 Binary files /dev/null and b/sound/voice/scream/generic/male/male_scream_5.ogg differ diff --git a/sound/voice/scream/generic/male/male_scream_6.ogg b/sound/voice/scream/generic/male/male_scream_6.ogg new file mode 100644 index 0000000000..a778537745 Binary files /dev/null and b/sound/voice/scream/generic/male/male_scream_6.ogg differ diff --git a/sound/voice/scream/robotic/robot_scream1.ogg b/sound/voice/scream/robotic/robot_scream1.ogg new file mode 100644 index 0000000000..4442624b10 Binary files /dev/null and b/sound/voice/scream/robotic/robot_scream1.ogg differ diff --git a/sound/voice/scream/robotic/robot_scream2.ogg b/sound/voice/scream/robotic/robot_scream2.ogg new file mode 100644 index 0000000000..28a9c26469 Binary files /dev/null and b/sound/voice/scream/robotic/robot_scream2.ogg differ diff --git a/sound/voice/scream/robotic/robot_scream3.ogg b/sound/voice/scream/robotic/robot_scream3.ogg new file mode 100644 index 0000000000..ba1308ef0b Binary files /dev/null and b/sound/voice/scream/robotic/robot_scream3.ogg differ diff --git a/sound/voice/scream/scientist/scream01.ogg b/sound/voice/scream/scientist/scream01.ogg new file mode 100644 index 0000000000..074f77ae0f Binary files /dev/null and b/sound/voice/scream/scientist/scream01.ogg differ diff --git a/sound/voice/scream/scientist/scream02.ogg b/sound/voice/scream/scientist/scream02.ogg new file mode 100644 index 0000000000..400ffea92b Binary files /dev/null and b/sound/voice/scream/scientist/scream02.ogg differ diff --git a/sound/voice/scream/scientist/scream06.ogg b/sound/voice/scream/scientist/scream06.ogg new file mode 100644 index 0000000000..00c1eaaf86 Binary files /dev/null and b/sound/voice/scream/scientist/scream06.ogg differ diff --git a/sound/voice/scream/scientist/scream08.ogg b/sound/voice/scream/scientist/scream08.ogg new file mode 100644 index 0000000000..75840558fb Binary files /dev/null and b/sound/voice/scream/scientist/scream08.ogg differ diff --git a/sound/voice/scream/scientist/scream25.ogg b/sound/voice/scream/scientist/scream25.ogg new file mode 100644 index 0000000000..4907db22a8 Binary files /dev/null and b/sound/voice/scream/scientist/scream25.ogg differ diff --git a/sound/voice/scream/vulpine/fox_yip1.ogg b/sound/voice/scream/vulpine/fox_yip1.ogg new file mode 100644 index 0000000000..3feea0a467 Binary files /dev/null and b/sound/voice/scream/vulpine/fox_yip1.ogg differ diff --git a/sound/voice/scream/vulpine/fox_yip2.ogg b/sound/voice/scream/vulpine/fox_yip2.ogg new file mode 100644 index 0000000000..8478eee546 Binary files /dev/null and b/sound/voice/scream/vulpine/fox_yip2.ogg differ diff --git a/sound/voice/scream/vulpine/fox_yip3.ogg b/sound/voice/scream/vulpine/fox_yip3.ogg new file mode 100644 index 0000000000..974f597bbd Binary files /dev/null and b/sound/voice/scream/vulpine/fox_yip3.ogg differ diff --git a/sound/voice/scream_f1.ogg b/sound/voice/scream_f1.ogg new file mode 100644 index 0000000000..2303650148 Binary files /dev/null and b/sound/voice/scream_f1.ogg differ diff --git a/sound/voice/scream_f2.ogg b/sound/voice/scream_f2.ogg new file mode 100644 index 0000000000..6c4a1d33ad Binary files /dev/null and b/sound/voice/scream_f2.ogg differ diff --git a/sound/voice/scream_f3.ogg b/sound/voice/scream_f3.ogg new file mode 100644 index 0000000000..d66c602640 Binary files /dev/null and b/sound/voice/scream_f3.ogg differ diff --git a/sound/voice/scream_jelly_f1.ogg b/sound/voice/scream_jelly_f1.ogg new file mode 100644 index 0000000000..6bbe8d2811 Binary files /dev/null and b/sound/voice/scream_jelly_f1.ogg differ diff --git a/sound/voice/scream_jelly_f2.ogg b/sound/voice/scream_jelly_f2.ogg new file mode 100644 index 0000000000..03bd62728a Binary files /dev/null and b/sound/voice/scream_jelly_f2.ogg differ diff --git a/sound/voice/scream_jelly_m1.ogg b/sound/voice/scream_jelly_m1.ogg new file mode 100644 index 0000000000..496d5b1719 Binary files /dev/null and b/sound/voice/scream_jelly_m1.ogg differ diff --git a/sound/voice/scream_jelly_m2.ogg b/sound/voice/scream_jelly_m2.ogg new file mode 100644 index 0000000000..2a70ae29fe Binary files /dev/null and b/sound/voice/scream_jelly_m2.ogg differ diff --git a/sound/voice/scream_m.ogg b/sound/voice/scream_m.ogg new file mode 100644 index 0000000000..54a547d20e Binary files /dev/null and b/sound/voice/scream_m.ogg differ diff --git a/sound/voice/scream_m1.ogg b/sound/voice/scream_m1.ogg new file mode 100644 index 0000000000..6c74f52946 Binary files /dev/null and b/sound/voice/scream_m1.ogg differ diff --git a/sound/voice/scream_m2.ogg b/sound/voice/scream_m2.ogg new file mode 100644 index 0000000000..72e9933f2f Binary files /dev/null and b/sound/voice/scream_m2.ogg differ diff --git a/sound/voice/scream_monkey.ogg b/sound/voice/scream_monkey.ogg new file mode 100644 index 0000000000..c7e1a966b4 Binary files /dev/null and b/sound/voice/scream_monkey.ogg differ diff --git a/sound/voice/scream_moth.ogg b/sound/voice/scream_moth.ogg new file mode 100644 index 0000000000..c94644fc17 Binary files /dev/null and b/sound/voice/scream_moth.ogg differ diff --git a/sound/voice/scream_silicon.ogg b/sound/voice/scream_silicon.ogg new file mode 100644 index 0000000000..a58c72b8ab Binary files /dev/null and b/sound/voice/scream_silicon.ogg differ diff --git a/sound/voice/silence.ogg b/sound/voice/silence.ogg new file mode 100644 index 0000000000..41ee44cd04 Binary files /dev/null and b/sound/voice/silence.ogg differ diff --git a/sound/voice/wheeze.ogg b/sound/voice/wheeze.ogg new file mode 100644 index 0000000000..873bbbd2c7 Binary files /dev/null and b/sound/voice/wheeze.ogg differ diff --git a/sound/weapons/Laser4.ogg b/sound/weapons/Laser4.ogg index 2a3929356d..87d72eff5c 100644 Binary files a/sound/weapons/Laser4.ogg and b/sound/weapons/Laser4.ogg differ diff --git a/sound/weapons/SmallLaser.ogg b/sound/weapons/SmallLaser.ogg new file mode 100644 index 0000000000..9319ccf6e3 Binary files /dev/null and b/sound/weapons/SmallLaser.ogg differ diff --git a/sound/weapons/ballistics/smg_heavy.ogg b/sound/weapons/ballistics/smg_heavy.ogg new file mode 100644 index 0000000000..1a5aec845c Binary files /dev/null and b/sound/weapons/ballistics/smg_heavy.ogg differ diff --git a/sound/weapons/clockwork/clockwork_cock.ogg b/sound/weapons/clockwork/clockwork_cock.ogg new file mode 100644 index 0000000000..a2748ecae5 Binary files /dev/null and b/sound/weapons/clockwork/clockwork_cock.ogg differ diff --git a/sound/weapons/clockwork/cwc_rifle_fabricate.ogg b/sound/weapons/clockwork/cwc_rifle_fabricate.ogg new file mode 100644 index 0000000000..8c7470c54a Binary files /dev/null and b/sound/weapons/clockwork/cwc_rifle_fabricate.ogg differ diff --git a/sound/weapons/clockwork/cwc_rifle_fire.ogg b/sound/weapons/clockwork/cwc_rifle_fire.ogg new file mode 100644 index 0000000000..abd90e0fc6 Binary files /dev/null and b/sound/weapons/clockwork/cwc_rifle_fire.ogg differ diff --git a/sound/weapons/clockwork/voltbeam_fire.ogg b/sound/weapons/clockwork/voltbeam_fire.ogg new file mode 100644 index 0000000000..e4f765c156 Binary files /dev/null and b/sound/weapons/clockwork/voltbeam_fire.ogg differ diff --git a/sound/weapons/clockwork/voltbeamsearwall.ogg b/sound/weapons/clockwork/voltbeamsearwall.ogg new file mode 100644 index 0000000000..5b17450528 Binary files /dev/null and b/sound/weapons/clockwork/voltbeamsearwall.ogg differ diff --git a/sound/weapons/energy/laser_strong.ogg b/sound/weapons/energy/laser_strong.ogg new file mode 100644 index 0000000000..1fc399265d Binary files /dev/null and b/sound/weapons/energy/laser_strong.ogg differ diff --git a/sound/weapons/marksmanalt.ogg b/sound/weapons/marksmanalt.ogg new file mode 100644 index 0000000000..f84dc5aa9c Binary files /dev/null and b/sound/weapons/marksmanalt.ogg differ diff --git a/sound/weapons/meleetear.ogg b/sound/weapons/meleetear.ogg new file mode 100644 index 0000000000..edb5a00fca Binary files /dev/null and b/sound/weapons/meleetear.ogg differ diff --git a/sound/weapons/phase_new/phasecannon.ogg b/sound/weapons/phase_new/phasecannon.ogg new file mode 100644 index 0000000000..c44f3598fb Binary files /dev/null and b/sound/weapons/phase_new/phasecannon.ogg differ diff --git a/sound/weapons/phase_new/phasecarbine.ogg b/sound/weapons/phase_new/phasecarbine.ogg new file mode 100644 index 0000000000..5844bd65f9 Binary files /dev/null and b/sound/weapons/phase_new/phasecarbine.ogg differ diff --git a/sound/weapons/phase_new/phasepistol.ogg b/sound/weapons/phase_new/phasepistol.ogg new file mode 100644 index 0000000000..51bea9d6f2 Binary files /dev/null and b/sound/weapons/phase_new/phasepistol.ogg differ diff --git a/sound/weapons/phase_new/phaserifle.ogg b/sound/weapons/phase_new/phaserifle.ogg new file mode 100644 index 0000000000..7d420be486 Binary files /dev/null and b/sound/weapons/phase_new/phaserifle.ogg differ diff --git a/sound/weapons/plasmaNEW.ogg b/sound/weapons/plasmaNEW.ogg new file mode 100644 index 0000000000..a004753006 Binary files /dev/null and b/sound/weapons/plasmaNEW.ogg differ diff --git a/tgui/packages/tgui/interfaces/AppearanceChanger/AppearanceChangerBody.tsx b/tgui/packages/tgui/interfaces/AppearanceChanger/AppearanceChangerBody.tsx index d976d5bfc9..16ed991fc6 100644 --- a/tgui/packages/tgui/interfaces/AppearanceChanger/AppearanceChangerBody.tsx +++ b/tgui/packages/tgui/interfaces/AppearanceChanger/AppearanceChangerBody.tsx @@ -65,13 +65,11 @@ export const AppearanceChangerSpecies = (props) => { {data.digitigrade ? 'Yes' : 'No'} - {/* Disabled until species sounds ported up