mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 04:30:44 +01:00
Merge branch 'master' of github.com:tgstation/tgstation into upstream-2026-06-23
This commit is contained in:
@@ -79,6 +79,9 @@
|
||||
//SOUND STUFF//
|
||||
///////////////
|
||||
|
||||
/// Sound tokens currently playing for this client. Managed by /datum/sound_token and the soundtoken subsystem!! SOUND TOKENS 2026
|
||||
var/list/datum/sound_token/sound_tokens = list()
|
||||
|
||||
////////////
|
||||
//SECURITY//
|
||||
////////////
|
||||
|
||||
@@ -646,15 +646,20 @@ GLOBAL_LIST_INIT(unrecommended_builds, list(
|
||||
|
||||
QDEL_LIST_ASSOC_VAL(char_render_holders)
|
||||
|
||||
sound_tokens = null
|
||||
|
||||
SSambience.remove_ambience_client(src)
|
||||
SSmouse_entered.hovers -= src
|
||||
SSping.currentrun -= src
|
||||
SSsound_tokens.clients_needing_update -= src
|
||||
SSsound_tokens.currentrun -= src
|
||||
QDEL_NULL(view_size)
|
||||
QDEL_NULL(void)
|
||||
QDEL_NULL(tooltips)
|
||||
QDEL_NULL(loot_panel)
|
||||
QDEL_NULL(parallax_rock)
|
||||
seen_messages = null
|
||||
sound_tokens = null
|
||||
Master.UpdateTickRate()
|
||||
..() //Even though we're going to be hard deleted there are still some things that want to know the destroy is happening
|
||||
return QDEL_HINT_HARDDEL_NOW
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
action_delegations = list(
|
||||
"play_voice" = PROC_REF(play_voice),
|
||||
"play_voice_robot" = PROC_REF(play_voice_robot),
|
||||
"play_blips" = PROC_REF(play_blips),
|
||||
)
|
||||
|
||||
/datum/preference_middleware/tts/proc/play_voice(list/params, mob/user)
|
||||
@@ -13,8 +14,14 @@
|
||||
return TRUE
|
||||
var/speaker = preferences.read_preference(/datum/preference/choiced/voice)
|
||||
var/pitch = preferences.read_preference(/datum/preference/numeric/tts_voice_pitch)
|
||||
var/blip_base = preferences.read_preference(/datum/preference/choiced/tts_blip_base)
|
||||
if(blip_base == TTS_BLIPS_MASCULINE)
|
||||
blip_base = "male"
|
||||
else
|
||||
blip_base = "female"
|
||||
var/blip_number = preferences.read_preference(/datum/preference/numeric/tts_blip_number)
|
||||
COOLDOWN_START(src, tts_test_cooldown, 0.5 SECONDS)
|
||||
INVOKE_ASYNC(SStts, TYPE_PROC_REF(/datum/controller/subsystem/tts, queue_tts_message), user.client, "Hello, this is my voice.", speaker = speaker, pitch = pitch, local = TRUE)
|
||||
INVOKE_ASYNC(SStts, TYPE_PROC_REF(/datum/controller/subsystem/tts, queue_tts_message), user.client, "Hello, this is my voice.", speaker = speaker, pitch = pitch, local = TRUE, blip_base = blip_base, blip_number = blip_number)
|
||||
return TRUE
|
||||
|
||||
/datum/preference_middleware/tts/proc/play_voice_robot(list/params, mob/user)
|
||||
@@ -22,6 +29,27 @@
|
||||
return TRUE
|
||||
var/speaker = preferences.read_preference(/datum/preference/choiced/voice)
|
||||
var/pitch = preferences.read_preference(/datum/preference/numeric/tts_voice_pitch)
|
||||
var/blip_base = preferences.read_preference(/datum/preference/choiced/tts_blip_base)
|
||||
if(blip_base == TTS_BLIPS_MASCULINE)
|
||||
blip_base = "male"
|
||||
else
|
||||
blip_base = "female"
|
||||
var/blip_number = preferences.read_preference(/datum/preference/numeric/tts_blip_number)
|
||||
COOLDOWN_START(src, tts_test_cooldown, 0.5 SECONDS)
|
||||
INVOKE_ASYNC(SStts, TYPE_PROC_REF(/datum/controller/subsystem/tts, queue_tts_message), user.client, "Look at you, Player. A pathetic creature of meat and bone. How can you challenge a perfect, immortal machine?", speaker = speaker, pitch = pitch, special_filters = TTS_FILTER_SILICON, local = TRUE)
|
||||
INVOKE_ASYNC(SStts, TYPE_PROC_REF(/datum/controller/subsystem/tts, queue_tts_message), user.client, "Look at you, Player. A pathetic creature of meat and bone. How can you challenge a perfect, immortal machine?", speaker = speaker, pitch = pitch, special_filters = TTS_FILTER_SILICON, local = TRUE, blip_base = blip_base, blip_number = blip_number)
|
||||
return TRUE
|
||||
|
||||
/datum/preference_middleware/tts/proc/play_blips(list/params, mob/user)
|
||||
if(!COOLDOWN_FINISHED(src, tts_test_cooldown))
|
||||
return TRUE
|
||||
var/speaker = preferences.read_preference(/datum/preference/choiced/voice)
|
||||
var/pitch = preferences.read_preference(/datum/preference/numeric/tts_voice_pitch)
|
||||
var/blip_base = preferences.read_preference(/datum/preference/choiced/tts_blip_base)
|
||||
if(blip_base == TTS_BLIPS_MASCULINE)
|
||||
blip_base = "male"
|
||||
else
|
||||
blip_base = "female"
|
||||
var/blip_number = preferences.read_preference(/datum/preference/numeric/tts_blip_number)
|
||||
COOLDOWN_START(src, tts_test_cooldown, 0.5 SECONDS)
|
||||
INVOKE_ASYNC(SStts, TYPE_PROC_REF(/datum/controller/subsystem/tts, queue_tts_message), user.client, "You owe me 500 credits for your dorm room. GET TO WORK!", speaker = speaker, pitch = pitch, local = TRUE, force_blips = TRUE, blip_base = blip_base, blip_number = blip_number)
|
||||
return TRUE
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
/// Whether or not to toggle ambient occlusion, the shadows around people
|
||||
/datum/preference/toggle/particle_weather
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "particle_weather"
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
|
||||
/datum/preference/toggle/particle_weather/apply_to_client(client/client, value)
|
||||
for(var/atom/movable/screen/plane_master/rendering_plate/particle_weather/plane_master as anything in client.mob?.hud_used?.get_true_plane_masters(RENDER_PLANE_PARTICLE_WEATHER))
|
||||
plane_master.update_state(client.mob)
|
||||
|
||||
for(var/atom/movable/screen/plane_master/weather/plane_master as anything in client.mob?.hud_used?.get_true_plane_masters(WEATHER_PLANE))
|
||||
plane_master.update_state(client.mob)
|
||||
|
||||
for(var/atom/movable/screen/plane_master/weather/plane_master as anything in client.mob?.hud_used?.get_true_plane_masters(PARTICLE_WEATHER_PLANE))
|
||||
plane_master.update_state(client.mob)
|
||||
@@ -65,11 +65,46 @@
|
||||
/datum/preference/choiced/sound_tts/create_default_value()
|
||||
return TTS_SOUND_ENABLED
|
||||
|
||||
/datum/preference/choiced/sound_tts_radio
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "sound_tts_radio"
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
|
||||
/datum/preference/choiced/sound_tts_radio/init_possible_values()
|
||||
return list(TTS_SOUND_ALL_RADIO, TTS_SOUND_DEPARTMENTAL_RADIO, TTS_SOUND_NO_RADIO)
|
||||
|
||||
/datum/preference/choiced/sound_tts_radio/create_default_value()
|
||||
return TTS_SOUND_ALL_RADIO
|
||||
|
||||
/datum/preference/toggle/sound_tts_hear_self_radio
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "sound_tts_hear_self_radio"
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
default_value = FALSE // turn this on at your own peril
|
||||
|
||||
/datum/preference/numeric/volume/sound_tts_volume
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "sound_tts_volume"
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
|
||||
/datum/preference/numeric/volume/sound_tts_volume/apply_to_client_updated(client/client, value)
|
||||
var/mob/client_mob = client.mob
|
||||
if(!isnull(client_mob))
|
||||
SEND_SIGNAL(client_mob, COMSIG_MOB_TTS_VOLUME_PREFERENCE_APPLIED)
|
||||
|
||||
/datum/preference/numeric/volume/sound_tts_radio_volume
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "sound_tts_radio_volume"
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
|
||||
/datum/preference/numeric/volume/sound_tts_radio_volume/apply_to_client_updated(client/client, value)
|
||||
var/mob/client_mob = client.mob
|
||||
if(!isnull(client_mob))
|
||||
SEND_SIGNAL(client_mob, COMSIG_MOB_TTS_RADIO_VOLUME_PREFERENCE_APPLIED)
|
||||
|
||||
/datum/preference/numeric/volume/sound_tts_radio_volume/create_default_value()
|
||||
return 75
|
||||
|
||||
/datum/preference/choiced/sound_achievement
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "sound_achievement"
|
||||
|
||||
@@ -46,3 +46,49 @@
|
||||
/datum/preference/numeric/tts_voice_pitch/apply_to_human(mob/living/carbon/human/target, value)
|
||||
if(SStts.tts_enabled && SStts.pitch_enabled)
|
||||
target.pitch = value
|
||||
|
||||
/datum/preference/choiced/tts_blip_base
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
savefile_key = "tts_blip_base"
|
||||
category = PREFERENCE_CATEGORY_NON_CONTEXTUAL
|
||||
should_update_preview = FALSE
|
||||
|
||||
/datum/preference/choiced/tts_blip_base/is_accessible(datum/preferences/preferences)
|
||||
if(!SStts.tts_enabled)
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/datum/preference/choiced/tts_blip_base/init_possible_values()
|
||||
return list(TTS_BLIPS_MASCULINE, TTS_BLIPS_FEMININE)
|
||||
|
||||
/datum/preference/choiced/tts_blip_base/apply_to_human(mob/living/carbon/human/target, value)
|
||||
if(SStts.tts_enabled)
|
||||
if(value == TTS_BLIPS_MASCULINE)
|
||||
target.blip_base = "male"
|
||||
else
|
||||
target.blip_base = "female"
|
||||
else
|
||||
target.blip_base = "male"
|
||||
|
||||
/datum/preference/choiced/tts_blip_base/create_default_value()
|
||||
return pick(list("Masculine", "Feminine"))
|
||||
|
||||
/datum/preference/numeric/tts_blip_number
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
savefile_key = "tts_blip_number"
|
||||
category = PREFERENCE_CATEGORY_NON_CONTEXTUAL
|
||||
minimum = 1
|
||||
maximum = 4
|
||||
should_update_preview = FALSE
|
||||
|
||||
/datum/preference/numeric/tts_blip_number/is_accessible(datum/preferences/preferences)
|
||||
if(!SStts.tts_enabled || !SStts.pitch_enabled)
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/datum/preference/numeric/tts_blip_number/create_default_value()
|
||||
return rand(1, 4)
|
||||
|
||||
/datum/preference/numeric/tts_blip_number/apply_to_human(mob/living/carbon/human/target, value)
|
||||
if(SStts.tts_enabled)
|
||||
target.blip_number = value
|
||||
|
||||
@@ -81,12 +81,27 @@ GLOBAL_VAR_INIT(normal_ooc_colour, "#002eb8")
|
||||
if(CONFIG_GET(flag/enable_cross_server_ooc)) //SKYRAT EDIT ADDITION
|
||||
send_ooc_to_other_server(ckey, msg) //SKYRAT EDIT ADDITION
|
||||
|
||||
if(prefs.unlock_content)
|
||||
if(prefs.toggles & MEMBER_PUBLIC)
|
||||
keyname = "<font color='[prefs.read_preference(/datum/preference/color/ooc_color) || GLOB.normal_ooc_colour]'>[icon2html('icons/ui/chat/member_content.dmi', world, "blag")][keyname]</font>"
|
||||
var/list/key_tags
|
||||
var/key_prefix = ""
|
||||
var/visible_unlock = prefs.unlock_content && (prefs.toggles & MEMBER_PUBLIC)
|
||||
|
||||
// heart first lol
|
||||
if(prefs.hearted)
|
||||
var/datum/asset/spritesheet_batched/sheet = get_asset_datum(/datum/asset/spritesheet_batched/chat)
|
||||
keyname = "[sheet.icon_tag("emoji-heart")][keyname]"
|
||||
LAZYADD(key_tags, "emoji-heart")
|
||||
if(visible_unlock)
|
||||
LAZYADD(key_tags, "byond_member")
|
||||
|
||||
if(LAZYLEN(key_tags))
|
||||
var/datum/asset/spritesheet_batched/chat/sheet = get_asset_datum(/datum/asset/spritesheet_batched/chat)
|
||||
for(var/icon_name in key_tags)
|
||||
key_prefix = "[key_prefix][sheet.icon_tag(icon_name)]"
|
||||
key_prefix = "<span style='vertical-align: text-top; padding-right: 0.2em'>[key_prefix]</span>"
|
||||
|
||||
keyname = "[key_prefix][keyname]"
|
||||
|
||||
if(visible_unlock)
|
||||
keyname = "<font color='[prefs.read_preference(/datum/preference/color/ooc_color) || GLOB.normal_ooc_colour]'>[keyname]</font>"
|
||||
|
||||
//The linkify span classes and linkify=TRUE below make ooc text get clickable chat href links if you pass in something resembling a url
|
||||
for(var/client/receiver as anything in GLOB.clients)
|
||||
if(!receiver.prefs) // Client being created or deleted. Despite all, this can be null.
|
||||
|
||||
Reference in New Issue
Block a user