/mob var/list/screens = list() /mob/proc/set_fullscreen(condition, screen_name, screen_type, arg) condition ? overlay_fullscreen(screen_name, screen_type, arg) : clear_fullscreen(screen_name) /mob/proc/overlay_fullscreen(category, type, severity) var/obj/screen/fullscreen/screen = screens[category] if (!screen || screen.type != type) // needs to be recreated clear_fullscreen(category, FALSE) screens[category] = screen = new type() else if ((!severity || severity == screen.severity) && (!client || screen.screen_loc != "CENTER-7,CENTER-7" || screen.view == client.view)) // doesn't need to be updated return screen screen.icon_state = "[initial(screen.icon_state)][severity]" screen.severity = severity if (client && screen.should_show_to(src)) screen.update_for_view(client.view) client.screen += screen return screen /mob/proc/clear_fullscreen(category, animated = 10) var/obj/screen/fullscreen/screen = screens[category] if(!screen) return screens -= category if(animated) spawn(0) animate(screen, alpha = 0, time = animated) sleep(animated) if(client) client.screen -= screen qdel(screen) else if(client) client.screen -= screen qdel(screen) /mob/proc/clear_fullscreens() for(var/category in screens) clear_fullscreen(category) /mob/proc/hide_fullscreens() if(client) for(var/category in screens) client.screen -= screens[category] /mob/proc/reload_fullscreen() if(client && stat != DEAD) //dead mob do not see any of the fullscreen overlays that he has. for(var/category in screens) client.screen |= screens[category] /obj/screen/fullscreen icon = 'icons/mob/screen_full.dmi' icon_state = "default" screen_loc = "CENTER-7,CENTER-7" layer = FULLSCREEN_LAYER plane = PLANE_FULLSCREEN mouse_opacity = MOUSE_OPACITY_TRANSPARENT var/view = 7 var/severity = 0 var/show_when_dead = FALSE /obj/screen/fullscreen/Destroy() severity = 0 return ..() /obj/screen/fullscreen/proc/update_for_view(client_view) if (screen_loc == "CENTER-7,CENTER-7" && view != client_view) var/list/actualview = getviewsize(client_view) view = client_view transform = matrix(actualview[1]/15, 0, 0, 0, actualview[2]/15, 0) /obj/screen/fullscreen/proc/should_show_to(mob/mymob) if(!show_when_dead && mymob.stat == DEAD) return FALSE return TRUE /obj/screen/fullscreen/brute icon_state = "brutedamageoverlay" layer = DAMAGE_LAYER /obj/screen/fullscreen/oxy icon_state = "oxydamageoverlay" layer = DAMAGE_LAYER /obj/screen/fullscreen/crit icon_state = "passage" layer = CRIT_LAYER /obj/screen/fullscreen/blind icon_state = "blackimageoverlay" layer = BLIND_LAYER /obj/screen/fullscreen/impaired icon_state = "impairedoverlay" /obj/screen/fullscreen/blurry icon = 'icons/mob/screen1.dmi' screen_loc = "WEST,SOUTH to EAST,NORTH" icon_state = "blurry" /obj/screen/fullscreen/flash icon = 'icons/mob/screen1.dmi' screen_loc = "WEST,SOUTH to EAST,NORTH" icon_state = "flash_static" /obj/screen/fullscreen/flash/noise icon_state = "noise" /obj/screen/fullscreen/high icon = 'icons/mob/screen1.dmi' screen_loc = "WEST,SOUTH to EAST,NORTH" icon_state = "druggy" /obj/screen/fullscreen/noise icon = 'icons/effects/static.dmi' icon_state = "1 light" screen_loc = ui_entire_screen layer = FULLSCREEN_LAYER /obj/screen/fullscreen/scanline icon = 'icons/effects/static.dmi' icon_state = "scanlines" screen_loc = ui_entire_screen alpha = 50 layer = FULLSCREEN_LAYER /obj/screen/fullscreen/fishbed icon_state = "fishbed" /obj/screen/fullscreen/fear icon_state = "fear" /obj/screen/fullscreen/lighting_backdrop icon = 'icons/mob/screen_gen.dmi' icon_state = "flash" transform = matrix(200, 0, 0, 0, 200, 0) plane = PLANE_LIGHTING blend_mode = BLEND_OVERLAY show_when_dead = TRUE //Provides darkness to the back of the lighting plane /obj/screen/fullscreen/lighting_backdrop/lit invisibility = INVISIBILITY_LIGHTING layer = BACKGROUND_LAYER+21 color = "#000" //Provides whiteness in case you don't see lights so everything is still visible /obj/screen/fullscreen/lighting_backdrop/unlit layer = BACKGROUND_LAYER+20