diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index a3398a2dc46..8bea8675147 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -315,28 +315,31 @@ /area/Entered(A) var/musVolume = 25 var/sound = 'sound/ambience/ambigen1.ogg' + var/area/newarea + var/area/oldarea + + if(istype(A,/mob)) + var/mob/M=A + + if(!M.lastarea) + M.lastarea = get_area_master(M) + newarea = get_area_master(M) + oldarea = M.lastarea + + if(newarea==oldarea) return + + M.lastarea = src + + // /vg/ - EVENTS! + CallHook("MobAreaChange", list("mob" = M, "new" = newarea, "old" = oldarea)) if(!istype(A,/mob/living)) return var/mob/living/L = A if(!L.ckey) return - - if(!L.lastarea) - L.lastarea = get_area(L.loc) - if(L.lastarea.master) - L.lastarea = L.lastarea.master - var/area/newarea = get_area(L.loc) - if(newarea.master) - newarea = newarea.master - var/area/oldarea = L.lastarea if((oldarea.has_gravity == 0) && (newarea.has_gravity == 1) && (L.m_intent == "run")) // Being ready when you change areas gives you a chance to avoid falling all together. thunk(L) - L.lastarea = newarea - - // /vg/ - EVENTS! - CallHook("MobAreaChange", list("mob" = L, "new" = newarea, "old" = oldarea)) - // Ambience goes down here -- make sure to list each area seperately for ease of adding things in later, thanks! Note: areas adjacent to each other should have the same sounds to prevent cutoff when possible.- LastyScratch if(L && L.client && (L.client.prefs.toggles & SOUND_AMBIENCE)) if(!L.client.ambience_playing) diff --git a/code/modules/media/mediamanager.dm b/code/modules/media/mediamanager.dm index c242747d735..c8d4e9b8f10 100644 --- a/code/modules/media/mediamanager.dm +++ b/code/modules/media/mediamanager.dm @@ -33,10 +33,11 @@ function SetMusic(url, time, volume) { // Update when moving between areas. proc/OnMobAreaChange(var/list/args) - //testing("Received OnMobAreaChange.") var/mob/M = args["mob"] - - M.update_music() + //if(istype(M, /mob/living/carbon/human)||istype(M, /mob/dead/observer)) + // testing("Received OnMobAreaChange for [M.type] [M] (M.client=[M.client==null?"null":"/client"]).") + if(M.client) + M.update_music() /mob/proc/update_music() if (client && client.media) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 9c3d34d52fe..21554782bab 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -176,6 +176,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp for(var/obj/effect/step_trigger/S in NewLoc) S.Crossed(src) + var/area/A = get_area_master(src) + if(A) + A.Entered(src) + return loc = get_turf(src) //Get out of closets and such as a ghost if((direct & NORTH) && y < world.maxy) @@ -190,6 +194,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp for(var/obj/effect/step_trigger/S in locate(x, y, z)) //<-- this is dumb S.Crossed(src) + var/area/A = get_area_master(src) + if(A) + A.Entered(src) + /mob/dead/observer/examine() if(usr) usr << desc