Skip to content

Commit

Permalink
[MIRROR] Ambience Buzz Handling Changes + Ambience buzz requires envi…
Browse files Browse the repository at this point in the history
…orment power (#28537)

* Ambience Buzz Handling Changes + Ambience buzz requires enviorment power

* Update areas.dm

---------

Co-authored-by: The Sharkening <[email protected]>
Co-authored-by: SpaceLoveSs13 <[email protected]>
  • Loading branch information
3 people committed Jul 1, 2024
1 parent 92f2365 commit 5ea82d6
Show file tree
Hide file tree
Showing 6 changed files with 64 additions and 33 deletions.
49 changes: 49 additions & 0 deletions code/controllers/subsystem/ambience.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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))
35 changes: 3 additions & 32 deletions code/game/area/areas.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 6 additions & 0 deletions code/modules/mob/dead/observer/observer.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
3 changes: 2 additions & 1 deletion code/modules/mob/login.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
1 change: 1 addition & 0 deletions code/modules/mob/logout.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
3 changes: 3 additions & 0 deletions code/modules/mob/mob_defines.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 5ea82d6

Please sign in to comment.