mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-28 15:47:15 +01:00
[MIRROR] Ambience Buzz Handling Changes + Ambience buzz requires enviorment power (#28537)
* Ambience Buzz Handling Changes + Ambience buzz requires enviorment power * Update areas.dm --------- Co-authored-by: The Sharkening <95130227+StrangeWeirdKitten@users.noreply.github.com> Co-authored-by: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com>
This commit is contained in:
committed by
StrangeWeirdKitten
co-authored by
The Sharkening
SpaceLoveSs13
parent
92f2365bc2
commit
5ea82d6fd5
@@ -86,3 +86,52 @@ SUBSYSTEM_DEF(ambience)
|
||||
if(!M.has_light_nearby() && prob(0.5))
|
||||
return ..(M, pick(minecraft_cave_noises))
|
||||
return ..()
|
||||
|
||||
/**
|
||||
* Ambience buzz handling called by either area/Enter() or refresh_looping_ambience()
|
||||
*/
|
||||
|
||||
/mob/proc/update_ambience_area(area/new_area)
|
||||
|
||||
var/old_tracked_area = ambience_tracked_area
|
||||
if(old_tracked_area)
|
||||
UnregisterSignal(old_tracked_area, COMSIG_AREA_POWER_CHANGE)
|
||||
ambience_tracked_area = null
|
||||
if(!client)
|
||||
return
|
||||
if(new_area)
|
||||
ambience_tracked_area = new_area
|
||||
RegisterSignal(ambience_tracked_area, COMSIG_AREA_POWER_CHANGE, PROC_REF(refresh_looping_ambience), TRUE)
|
||||
|
||||
refresh_looping_ambience()
|
||||
|
||||
/mob/proc/refresh_looping_ambience()
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(!client) // If a tree falls in the woods.
|
||||
return
|
||||
|
||||
var/area/my_area = get_area(src)
|
||||
var/sound_to_use = my_area.ambient_buzz
|
||||
|
||||
if(!sound_to_use || !(client.prefs.read_preference(/datum/preference/toggle/sound_ship_ambience)))
|
||||
SEND_SOUND(src, sound(null, repeat = 0, wait = 0, channel = CHANNEL_BUZZ))
|
||||
client.current_ambient_sound = null
|
||||
return
|
||||
|
||||
if(!can_hear()) // Can the mob hear?
|
||||
SEND_SOUND(src, sound(null, repeat = 0, wait = 0, channel = CHANNEL_BUZZ))
|
||||
client.current_ambient_sound = null
|
||||
return
|
||||
|
||||
//Station ambience is dependant on a functioning and charged APC with enviorment power enabled.
|
||||
if(!is_mining_level(my_area.z) && ((!my_area.apc || !my_area.apc.operating || !my_area.apc.cell?.charge && my_area.requires_power || !my_area.power_environ)))
|
||||
SEND_SOUND(src, sound(null, repeat = 0, wait = 0, channel = CHANNEL_BUZZ))
|
||||
client.current_ambient_sound = null
|
||||
return
|
||||
else
|
||||
if(sound_to_use == client.current_ambient_sound) // Don't reset current loops
|
||||
return
|
||||
|
||||
client.current_ambient_sound = sound_to_use
|
||||
SEND_SOUND(src, sound(my_area.ambient_buzz, repeat = 1, wait = 0, volume = my_area.ambient_buzz_vol, channel = CHANNEL_BUZZ))
|
||||
|
||||
+3
-32
@@ -540,38 +540,9 @@ GLOBAL_LIST_EMPTY(teleportlocs)
|
||||
for(var/atom/movable/recipient as anything in arrived.important_recursive_contents[RECURSIVE_CONTENTS_AREA_SENSITIVE])
|
||||
SEND_SIGNAL(recipient, COMSIG_ENTER_AREA, src)
|
||||
|
||||
if(!isliving(arrived))
|
||||
return
|
||||
|
||||
var/mob/living/L = arrived
|
||||
if(!L.ckey)
|
||||
return
|
||||
|
||||
if(ambient_buzz != old_area.ambient_buzz)
|
||||
L.refresh_looping_ambience()
|
||||
|
||||
///Tries to play looping ambience to the mobs.
|
||||
/mob/proc/refresh_looping_ambience()
|
||||
if(!client) //if a tree falls in the woods...
|
||||
return
|
||||
var/area/my_area = get_area(src)
|
||||
var/sound_to_use = my_area.ambient_buzz
|
||||
|
||||
if(!sound_to_use || !(client.prefs.read_preference(/datum/preference/toggle/sound_ship_ambience)))
|
||||
SEND_SOUND(src, sound(null, repeat = 0, wait = 0, channel = CHANNEL_BUZZ))
|
||||
client.current_ambient_sound = null
|
||||
return
|
||||
|
||||
if(!can_hear())
|
||||
SEND_SOUND(src, sound(null, repeat = 0, wait = 0, channel = CHANNEL_BUZZ))
|
||||
client.current_ambient_sound = null
|
||||
return
|
||||
|
||||
if(sound_to_use == client.current_ambient_sound)
|
||||
return //don't reset current loops.
|
||||
|
||||
client.current_ambient_sound = sound_to_use
|
||||
SEND_SOUND(src, sound(sound_to_use, repeat = 1, wait = 0, volume = my_area.ambient_buzz_vol, channel = CHANNEL_BUZZ))
|
||||
if(ismob(arrived))
|
||||
var/mob/mob = arrived
|
||||
mob.update_ambience_area(src)
|
||||
|
||||
/**
|
||||
* Called when an atom exits an area
|
||||
|
||||
@@ -364,6 +364,12 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
abstract_move(destination) // move like the wind
|
||||
return TRUE
|
||||
|
||||
/mob/dead/observer/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change)
|
||||
. = ..()
|
||||
var/area/new_area = get_area(src)
|
||||
if(new_area != ambience_tracked_area)
|
||||
update_ambience_area(new_area)
|
||||
|
||||
/mob/dead/observer/verb/reenter_corpse()
|
||||
set category = "Ghost"
|
||||
set name = "Re-enter Corpse"
|
||||
|
||||
@@ -99,7 +99,8 @@
|
||||
|
||||
update_client_colour()
|
||||
update_mouse_pointer()
|
||||
refresh_looping_ambience()
|
||||
update_ambience_area(get_area(src))
|
||||
|
||||
if(!can_hear())
|
||||
stop_sound_channel(CHANNEL_AMBIENCE)
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
log_message("[key_name(src)] is no longer owning mob [src]([src.type])", LOG_OWNERSHIP)
|
||||
SStgui.on_logout(src)
|
||||
remove_from_player_list()
|
||||
update_ambience_area(null) // Unset ambience vars so it plays again on login
|
||||
..()
|
||||
|
||||
if(loc)
|
||||
|
||||
@@ -191,3 +191,6 @@
|
||||
var/active_typing_indicator
|
||||
///the icon currently used for the thinking indicator's bubble
|
||||
var/active_thinking_indicator
|
||||
|
||||
/// A ref of the area we're taking our ambient loop from.
|
||||
var/area/ambience_tracked_area
|
||||
|
||||
Reference in New Issue
Block a user