From 9ae66dd496fd9eb5cd9711563fe567d465d5f3c0 Mon Sep 17 00:00:00 2001 From: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> Date: Sun, 5 May 2024 05:42:12 -0400 Subject: [PATCH] You can no longer see hud / screen when asleep. DOESN'T AFFECT BLINDNESS (#24360) * You can no longer see hud / screen when asleep * oh fuck the huds * Update code/_onclick/hud/robot_hud.dm Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com> * storing when looking into a bug * more tweaks * Initial screen object fixes * fix for old screen types * animation my dear watson --------- Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com> Co-authored-by: S34N <12197162+S34NW@users.noreply.github.com> --- code/__DEFINES/hud_locations.dm | 4 +- code/_onclick/hud/fullscreen.dm | 111 ++++++++++++------ code/_onclick/hud/hud_datum.dm | 12 ++ code/_onclick/hud/human_hud.dm | 6 +- code/_onclick/hud/other_mobs_hud.dm | 2 +- code/_onclick/hud/plane_master.dm | 4 +- code/_onclick/hud/robot_hud.dm | 2 +- code/datums/status_effects/buffs.dm | 4 +- code/datums/status_effects/debuffs.dm | 4 +- code/game/machinery/camera/camera.dm | 2 +- .../machinery/computer/camera_advanced.dm | 2 +- .../structures/crates_lockers/closets.dm | 2 +- code/game/objects/structures/morgue.dm | 4 +- code/game/objects/structures/safe.dm | 4 +- .../components/unary_devices/cryo.dm | 2 +- .../alien/humanoid/humanoid_update_icons.dm | 2 +- code/modules/mob/living/carbon/carbon_life.dm | 6 +- .../modules/mob/living/carbon/carbon_procs.dm | 6 +- .../living/carbon/human/human_update_icons.dm | 28 ++--- .../carbon/human/human_update_status.dm | 2 +- code/modules/mob/living/living.dm | 2 +- code/modules/mob/living/living_life.dm | 2 +- .../mob/living/living_update_status.dm | 17 ++- .../modules/mob/living/silicon/silicon_mob.dm | 2 +- .../hostile/megafauna/bubblegum.dm | 2 +- .../living/simple_animal/slime/slime_mob.dm | 2 +- code/modules/mob/living/stat_states.dm | 6 +- code/modules/mob/mob.dm | 2 +- code/modules/mod/modules/module_kinesis.dm | 6 +- code/modules/recycling/disposal.dm | 2 +- icons/mob/screen_sleeping.dmi | Bin 0 -> 45945 bytes icons/mob/screen_tight.dmi | Bin 0 -> 11643 bytes 32 files changed, 156 insertions(+), 96 deletions(-) create mode 100644 icons/mob/screen_sleeping.dmi create mode 100644 icons/mob/screen_tight.dmi diff --git a/code/__DEFINES/hud_locations.dm b/code/__DEFINES/hud_locations.dm index 3c907ddf9b5..c475b4d7a4d 100644 --- a/code/__DEFINES/hud_locations.dm +++ b/code/__DEFINES/hud_locations.dm @@ -171,9 +171,11 @@ #define HUD_STYLE_STANDARD 1 #define HUD_STYLE_REDUCED 2 #define HUD_STYLE_NOHUD 3 +#define HUD_STYLE_ACTIONHUD 4 -#define HUD_VERSIONS 3 //used in show_hud() +#define HUD_VERSIONS 4 //used in show_hud() //1 = standard hud //2 = reduced hud (just hands and intent switcher) //3 = no hud (for screenshots) +//4 = Only action buttons (so vampires / changelings and such can use abilities while asleep) diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index e93a0a206bd..afc30ca3422 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -1,21 +1,30 @@ -/mob/proc/overlay_fullscreen(category, type, severity) +/mob/proc/overlay_fullscreen(category, type, severity, animated = 0) var/atom/movable/screen/fullscreen/screen = screens[category] + var/is_centered = istype(screen, /atom/movable/screen/fullscreen/center) + 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)) + else if((!severity || severity == screen.severity) && (!is_centered && (!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) + if(animated) + INVOKE_ASYNC(src, PROC_REF(apply_screen_animation), animated, screen) + if(!is_centered) + screen.update_for_view(client.view) client.screen += screen return screen +/mob/proc/apply_screen_animation(animated = 0, atom/movable/screen/fullscreen/screen) + screen.alpha = 0 + animate(screen, alpha = 255, time = animated) + /mob/proc/clear_fullscreen(category, animated = 10) var/atom/movable/screen/fullscreen/screen = screens[category] if(!screen) @@ -30,10 +39,11 @@ if(client) client.screen -= screen qdel(screen) - else - if(client) - client.screen -= screen - qdel(screen) + return + + if(client) + client.screen -= screen + qdel(screen) /mob/proc/clear_fullscreens() for(var/category in screens) @@ -46,28 +56,21 @@ for(var/category in screens) screen = screens[category] if(screen.should_show_to(mymob)) - screen.update_for_view(mymob.client.view) mymob.client.screen |= screen - else - mymob.client.screen -= screen + continue + mymob.client.screen -= screen /atom/movable/screen/fullscreen icon = 'icons/mob/screen_full.dmi' icon_state = "default" screen_loc = "CENTER-7,CENTER-7" + var/view layer = FULLSCREEN_LAYER plane = FULLSCREEN_PLANE mouse_opacity = MOUSE_OPACITY_TRANSPARENT - var/view = 7 var/severity = 0 var/show_when_dead = FALSE -/atom/movable/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]/FULLSCREEN_OVERLAY_RESOLUTION_X, 0, 0, 0, actualview[2]/FULLSCREEN_OVERLAY_RESOLUTION_Y, 0) - /atom/movable/screen/fullscreen/proc/should_show_to(mob/mymob) if(!show_when_dead && mymob.stat == DEAD) return FALSE @@ -77,51 +80,62 @@ severity = 0 return ..() -/atom/movable/screen/fullscreen/brute +/// Stretch version is suitable for images that stick to screen edges, as they scale with user screen size +/// For centrally located screen objects, use /atom/movable/screen/fullscreen/center +/atom/movable/screen/fullscreen/stretch + view = 7 + +/atom/movable/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]/FULLSCREEN_OVERLAY_RESOLUTION_X, 0, 0, 0, actualview[2]/FULLSCREEN_OVERLAY_RESOLUTION_Y, 0) + +/atom/movable/screen/fullscreen/stretch/brute icon_state = "brutedamageoverlay" layer = UI_DAMAGE_LAYER -/atom/movable/screen/fullscreen/oxy +/atom/movable/screen/fullscreen/stretch/oxy icon_state = "oxydamageoverlay" layer = UI_DAMAGE_LAYER -/atom/movable/screen/fullscreen/crit +/atom/movable/screen/fullscreen/stretch/crit icon_state = "passage" layer = CRIT_LAYER -/atom/movable/screen/fullscreen/blind +/atom/movable/screen/fullscreen/stretch/blind icon_state = "blackimageoverlay" layer = BLIND_LAYER -/atom/movable/screen/fullscreen/impaired +/atom/movable/screen/fullscreen/stretch/impaired icon_state = "impairedoverlay" -/atom/movable/screen/fullscreen/payback +/atom/movable/screen/fullscreen/stretch/payback icon = 'icons/mob/screen_payback.dmi' icon_state = "payback" show_when_dead = TRUE -/atom/movable/screen/fullscreen/fog +/atom/movable/screen/fullscreen/stretch/fog icon = 'icons/mob/screen_fog.dmi' icon_state = "fog" color = "#FF0000" -/atom/movable/screen/fullscreen/flash +/atom/movable/screen/fullscreen/stretch/flash icon = 'icons/mob/screen_gen.dmi' screen_loc = "WEST,SOUTH to EAST,NORTH" icon_state = "flash" -/atom/movable/screen/fullscreen/flash/noise +/atom/movable/screen/fullscreen/stretch/flash/noise icon = 'icons/mob/screen_gen.dmi' screen_loc = "WEST,SOUTH to EAST,NORTH" icon_state = "noise" -/atom/movable/screen/fullscreen/high +/atom/movable/screen/fullscreen/stretch/high icon = 'icons/mob/screen_gen.dmi' screen_loc = "WEST,SOUTH to EAST,NORTH" icon_state = "druggy" -/atom/movable/screen/fullscreen/lighting_backdrop +/atom/movable/screen/fullscreen/stretch/lighting_backdrop icon = 'icons/mob/screen_gen.dmi' icon_state = "flash" transform = matrix(200, 0, 0, 0, 200, 0) @@ -130,18 +144,18 @@ show_when_dead = TRUE //Provides darkness to the back of the lighting plane -/atom/movable/screen/fullscreen/lighting_backdrop/lit +/atom/movable/screen/fullscreen/stretch/lighting_backdrop/lit invisibility = INVISIBILITY_LIGHTING layer = BACKGROUND_LAYER+21 color = "#000" show_when_dead = TRUE //Provides whiteness in case you don't see lights so everything is still visible -/atom/movable/screen/fullscreen/lighting_backdrop/unlit +/atom/movable/screen/fullscreen/stretch/lighting_backdrop/unlit layer = BACKGROUND_LAYER+20 show_when_dead = TRUE -/atom/movable/screen/fullscreen/see_through_darkness +/atom/movable/screen/fullscreen/stretch/see_through_darkness icon_state = "nightvision" plane = LIGHTING_PLANE layer = LIGHTING_LAYER @@ -149,7 +163,7 @@ show_when_dead = TRUE /// An effect which tracks the cursor's location on the screen -/atom/movable/screen/fullscreen/cursor_catcher +/atom/movable/screen/fullscreen/stretch/cursor_catcher icon_state = "fullscreen_blocker" // Fullscreen semi transparent icon plane = HUD_PLANE mouse_opacity = MOUSE_OPACITY_ICON @@ -167,14 +181,14 @@ var/mouse_params /// Links this up with a mob -/atom/movable/screen/fullscreen/cursor_catcher/proc/assign_to_mob(mob/owner) +/atom/movable/screen/fullscreen/stretch/cursor_catcher/proc/assign_to_mob(mob/owner) src.owner = owner view_list = getviewsize(owner.client.view) RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) calculate_params() /// Update when the mob we're assigned to has moved -/atom/movable/screen/fullscreen/cursor_catcher/proc/on_move(atom/source, atom/oldloc, dir, forced) +/atom/movable/screen/fullscreen/stretch/cursor_catcher/proc/on_move(atom/source, atom/oldloc, dir, forced) SIGNAL_HANDLER if(!given_turf) @@ -183,19 +197,18 @@ var/y_offset = source.loc.y - oldloc.y given_turf = locate(given_turf.x + x_offset, given_turf.y + y_offset, given_turf.z) - -/atom/movable/screen/fullscreen/cursor_catcher/MouseEntered(location, control, params) +/atom/movable/screen/fullscreen/stretch/cursor_catcher/MouseEntered(location, control, params) . = ..() MouseMove(location, control, params) if(usr == owner) calculate_params() -/atom/movable/screen/fullscreen/cursor_catcher/MouseMove(location, control, params) +/atom/movable/screen/fullscreen/stretch/cursor_catcher/MouseMove(location, control, params) if(usr != owner) return mouse_params = params -/atom/movable/screen/fullscreen/cursor_catcher/proc/calculate_params() +/atom/movable/screen/fullscreen/stretch/cursor_catcher/proc/calculate_params() var/list/modifiers = params2list(mouse_params) var/icon_x = text2num(LAZYACCESS(modifiers, "vis-x")) if(isnull(icon_x)) @@ -209,6 +222,28 @@ given_x = round(icon_x - world.icon_size * our_x, 1) given_y = round(icon_y - world.icon_size * our_y, 1) +/// Centered fullscreen atoms +/// These are used to center a widescreen image so it scales properly across screen sizes, not suitable for screen images that eminate from the edge of the screen +/atom/movable/screen/fullscreen/center + appearance_flags = TILE_BOUND + +/atom/movable/screen/fullscreen/center/Initialize(mapload) + . = ..() + var/icon/I = new(icon) + var/x_offset = -((I.Width() - world.icon_size) / 2) + var/y_offset = -((I.Height() - world.icon_size) / 2) + qdel(I) + screen_loc = "CENTER:[x_offset],CENTER:[y_offset]" + +/atom/movable/screen/fullscreen/center/blind/sleeping + icon = 'icons/mob/screen_sleeping.dmi' + icon_state = "sleepblind" + layer = BLIND_LAYER + +/atom/movable/screen/fullscreen/center/blind/disky + icon = 'icons/mob/screen_tight.dmi' + icon_state = "disky" + layer = BLIND_LAYER #undef FULLSCREEN_LAYER #undef BLIND_LAYER diff --git a/code/_onclick/hud/hud_datum.dm b/code/_onclick/hud/hud_datum.dm index 804e0c0f90f..566e07c7bb9 100644 --- a/code/_onclick/hud/hud_datum.dm +++ b/code/_onclick/hud/hud_datum.dm @@ -210,6 +210,15 @@ if(length(infodisplay)) mymob.client.screen -= infodisplay + if(HUD_STYLE_ACTIONHUD) //No HUD + hud_shown = TRUE //Governs behavior of other procs + if(static_inventory.len) + mymob.client.screen -= static_inventory + if(toggleable_inventory.len) + mymob.client.screen -= toggleable_inventory + if(infodisplay.len) + mymob.client.screen -= infodisplay + hud_version = display_hud_version persistent_inventory_update() mymob.update_action_buttons(1) @@ -244,6 +253,9 @@ return /mob/proc/hide_hud() + if(HAS_TRAIT(src, TRAIT_KNOCKEDOUT) && isliving(src)) + to_chat(src, "You can not change huds while asleep!") + return if(hud_used && client) hud_used.show_hud() //Shows the next hud preset to_chat(src, "Switched HUD mode. Press the key you just pressed to toggle the HUD mode again.") diff --git a/code/_onclick/hud/human_hud.dm b/code/_onclick/hud/human_hud.dm index 848fd46b2b9..68eb065069f 100644 --- a/code/_onclick/hud/human_hud.dm +++ b/code/_onclick/hud/human_hud.dm @@ -59,7 +59,7 @@ /datum/hud/human/New(mob/living/carbon/human/owner, ui_style = 'icons/mob/screen_white.dmi', ui_color = "#ffffff", ui_alpha = 255) ..() - owner.overlay_fullscreen("see_through_darkness", /atom/movable/screen/fullscreen/see_through_darkness) + owner.overlay_fullscreen("see_through_darkness", /atom/movable/screen/fullscreen/stretch/see_through_darkness) var/atom/movable/screen/using var/atom/movable/screen/inventory/inv_box @@ -393,7 +393,7 @@ if(!mymob) return var/mob/living/carbon/human/H = mymob - if(inventory_shown && hud_shown) + if(inventory_shown && hud_version == HUD_STYLE_STANDARD) if(H.shoes) H.shoes.screen_loc = ui_shoes H.client.screen += H.shoes @@ -436,7 +436,7 @@ if(!mymob) return var/mob/living/carbon/human/H = mymob - if(hud_shown) + if(hud_version == HUD_STYLE_STANDARD) if(H.s_store) H.s_store.screen_loc = ui_sstore1 H.client.screen += H.s_store diff --git a/code/_onclick/hud/other_mobs_hud.dm b/code/_onclick/hud/other_mobs_hud.dm index 39fe3a31552..51e1562a73c 100644 --- a/code/_onclick/hud/other_mobs_hud.dm +++ b/code/_onclick/hud/other_mobs_hud.dm @@ -10,7 +10,7 @@ static_inventory += using action_intent = using - user.overlay_fullscreen("see_through_darkness", /atom/movable/screen/fullscreen/see_through_darkness) + user.overlay_fullscreen("see_through_darkness", /atom/movable/screen/fullscreen/stretch/see_through_darkness) /datum/hud/corgi/New(mob/user) ..() diff --git a/code/_onclick/hud/plane_master.dm b/code/_onclick/hud/plane_master.dm index 321239833a4..bc7ae0dca0f 100644 --- a/code/_onclick/hud/plane_master.dm +++ b/code/_onclick/hud/plane_master.dm @@ -44,8 +44,8 @@ /atom/movable/screen/plane_master/lighting/backdrop(mob/mymob) . = ..() - mymob.overlay_fullscreen("lighting_backdrop_lit", /atom/movable/screen/fullscreen/lighting_backdrop/lit) - mymob.overlay_fullscreen("lighting_backdrop_unlit", /atom/movable/screen/fullscreen/lighting_backdrop/unlit) + mymob.overlay_fullscreen("lighting_backdrop_lit", /atom/movable/screen/fullscreen/stretch/lighting_backdrop/lit) + mymob.overlay_fullscreen("lighting_backdrop_unlit", /atom/movable/screen/fullscreen/stretch/lighting_backdrop/unlit) /atom/movable/screen/plane_master/lighting/Initialize() . = ..() diff --git a/code/_onclick/hud/robot_hud.dm b/code/_onclick/hud/robot_hud.dm index b2c692dfc32..30fae75f816 100644 --- a/code/_onclick/hud/robot_hud.dm +++ b/code/_onclick/hud/robot_hud.dm @@ -205,7 +205,7 @@ if(!R.module) return - if(R.shown_robot_modules && hud_shown) + if(R.shown_robot_modules && hud_version == HUD_STYLE_STANDARD) //Modules display is shown R.client.screen += module_store_icon //"store" icon diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 38f94e4ce89..4e976e9e5d6 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -670,13 +670,13 @@ return ..() /datum/status_effect/drill_payback/on_apply() - owner.overlay_fullscreen("payback", /atom/movable/screen/fullscreen/payback, 0) + owner.overlay_fullscreen("payback", /atom/movable/screen/fullscreen/stretch/payback, 0) addtimer(CALLBACK(src, PROC_REF(payback_phase_2)), 2.7 SECONDS) return TRUE /datum/status_effect/drill_payback/proc/payback_phase_2() owner.clear_fullscreen("payback") - owner.overlay_fullscreen("payback", /atom/movable/screen/fullscreen/payback, 1) + owner.overlay_fullscreen("payback", /atom/movable/screen/fullscreen/stretch/payback, 1) /datum/status_effect/drill_payback/tick() //They are not staying down. This will be a fight. if(!drilled_successfully && (get_dist(owner, drilled) >= 9)) //We don't want someone drilling the safe at arivals then raiding bridge with the buff diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index e65da3535cd..1a93201a1d9 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -1023,7 +1023,7 @@ /datum/status_effect/bubblegum_curse/on_creation(mob/living/new_owner, mob/living/source) . = ..() source_UID = source.UID() - owner.overlay_fullscreen("Bubblegum", /atom/movable/screen/fullscreen/fog, 1) + owner.overlay_fullscreen("Bubblegum", /atom/movable/screen/fullscreen/stretch/fog, 1) /datum/status_effect/bubblegum_curse/tick() var/mob/living/simple_animal/hostile/megafauna/bubblegum/attacker = locateUID(source_UID) @@ -1031,7 +1031,7 @@ qdel(src) if(attacker.health <= attacker.maxHealth / 2) owner.clear_fullscreen("Bubblegum") - owner.overlay_fullscreen("Bubblegum", /atom/movable/screen/fullscreen/fog, 2) + owner.overlay_fullscreen("Bubblegum", /atom/movable/screen/fullscreen/stretch/fog, 2) if(!coward_checking) if(owner.z != attacker.z) addtimer(CALLBACK(src, PROC_REF(onstation_coward_callback)), 12 SECONDS) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 071cf52415f..d440e7624d3 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -398,7 +398,7 @@ /obj/machinery/camera/get_remote_view_fullscreens(mob/user) if(view_range == short_range) //unfocused - user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 2) + user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/stretch/impaired, 2) /obj/machinery/camera/update_remote_sight(mob/living/user) if(isXRay() && isAI(user)) diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index 8c5a22d2544..ee045ecb935 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -208,7 +208,7 @@ if(final) playsound(origin, 'sound/machines/terminal_prompt_confirm.ogg', 25, FALSE) remote_eye.setLoc(get_turf(final)) - C.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/flash/noise) + C.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/stretch/flash/noise) C.clear_fullscreen("flash", 3) //Shorter flash than normal since it's an ~~advanced~~ console! else playsound(origin, 'sound/machines/terminal_prompt_deny.ogg', 25, FALSE) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 3dde46e83a2..151e2c22692 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -374,7 +374,7 @@ /obj/structure/closet/get_remote_view_fullscreens(mob/user) if(user.stat == DEAD || !(user.sight & (SEEOBJS|SEEMOBS))) - user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 1) + user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/stretch/impaired, 1) /obj/structure/closet/ex_act(severity) for(var/atom/A in contents) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 5d80c18fe1a..194ad6dd440 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -241,7 +241,7 @@ /obj/structure/morgue/get_remote_view_fullscreens(mob/user) if(user.stat == DEAD || !(user.sight & (SEEOBJS|SEEMOBS))) - user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 2) + user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/stretch/impaired, 2) /* * Morgue tray @@ -534,7 +534,7 @@ GLOBAL_LIST_EMPTY(crematoriums) /obj/structure/crematorium/get_remote_view_fullscreens(mob/user) if(user.stat == DEAD || !(user.sight & (SEEOBJS|SEEMOBS))) - user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 2) + user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/stretch/impaired, 2) /* * Crematorium tray diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index bb77fd7f3e4..aedb6c68765 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -359,13 +359,13 @@ GLOBAL_LIST_EMPTY(safes) drill.song.start_playing(driller) notify_ghosts("Security assault in progress in [get_area(src)]!", enter_link="(Click to jump to!)", source = src, action = NOTIFY_FOLLOW) for(var/mob/dead/observer/O in GLOB.player_list) - O.overlay_fullscreen("payback", /atom/movable/screen/fullscreen/payback, 0) + O.overlay_fullscreen("payback", /atom/movable/screen/fullscreen/stretch/payback, 0) addtimer(CALLBACK(src, PROC_REF(ghost_payback_phase_2)), 2.7 SECONDS) /obj/structure/safe/proc/ghost_payback_phase_2() for(var/mob/dead/observer/O in GLOB.player_list) O.clear_fullscreen("payback") - O.overlay_fullscreen("payback", /atom/movable/screen/fullscreen/payback, 1) + O.overlay_fullscreen("payback", /atom/movable/screen/fullscreen/stretch/payback, 1) addtimer(CALLBACK(src, PROC_REF(clear_payback)), 2 MINUTES) /obj/structure/safe/proc/clear_payback() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 4e696bc6025..0fac7c4668c 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -482,7 +482,7 @@ return /obj/machinery/atmospherics/unary/cryo_cell/get_remote_view_fullscreens(mob/user) - user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 1) + user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/stretch/impaired, 1) /obj/machinery/atmospherics/unary/cryo_cell/update_remote_sight(mob/living/user) return //we don't see the pipe network while inside cryo. diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid_update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid_update_icons.dm index 5732c200ee6..ac13fd82732 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid_update_icons.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid_update_icons.dm @@ -72,7 +72,7 @@ inv.update_icon() if(wear_suit) - if(client && hud_used && hud_used.hud_shown) + if(client && hud_used && hud_used.hud_version == HUD_STYLE_STANDARD) if(hud_used.inventory_shown) //if the inventory is open ... wear_suit.screen_loc = ui_oclothing //TODO //...draw the item in the inventory screen client.screen += wear_suit //Either way, add the item to the HUD diff --git a/code/modules/mob/living/carbon/carbon_life.dm b/code/modules/mob/living/carbon/carbon_life.dm index 4f393cbe8ee..381443e3e9a 100644 --- a/code/modules/mob/living/carbon/carbon_life.dm +++ b/code/modules/mob/living/carbon/carbon_life.dm @@ -319,7 +319,7 @@ severity = 9 if(-INFINITY to -95) severity = 10 - overlay_fullscreen("crit", /atom/movable/screen/fullscreen/crit, severity) + overlay_fullscreen("crit", /atom/movable/screen/fullscreen/stretch/crit, severity) else if(stat == CONSCIOUS) if(check_death_method()) clear_fullscreen("crit") @@ -340,7 +340,7 @@ severity = 6 if(45 to INFINITY) severity = 7 - overlay_fullscreen("oxy", /atom/movable/screen/fullscreen/oxy, severity) + overlay_fullscreen("oxy", /atom/movable/screen/fullscreen/stretch/oxy, severity) else clear_fullscreen("oxy") @@ -356,7 +356,7 @@ if(45 to 70) severity = 4 if(70 to 85) severity = 5 if(85 to INFINITY) severity = 6 - overlay_fullscreen("brute", /atom/movable/screen/fullscreen/brute, severity) + overlay_fullscreen("brute", /atom/movable/screen/fullscreen/stretch/brute, severity) else clear_fullscreen("brute") diff --git a/code/modules/mob/living/carbon/carbon_procs.dm b/code/modules/mob/living/carbon/carbon_procs.dm index 1807cdb3533..6cbdbd9d46f 100644 --- a/code/modules/mob/living/carbon/carbon_procs.dm +++ b/code/modules/mob/living/carbon/carbon_procs.dm @@ -353,7 +353,7 @@ if((E && (E.status & ORGAN_DEAD)) || !.) return FALSE -/mob/living/carbon/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, laser_pointer = FALSE, type = /atom/movable/screen/fullscreen/flash) +/mob/living/carbon/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, laser_pointer = FALSE, type = /atom/movable/screen/fullscreen/stretch/flash) //Parent proc checks if a mob can_be_flashed() . = ..() @@ -1201,9 +1201,9 @@ so that different stomachs can handle things in different ways VB*/ /mob/living/carbon/proc/update_tint() var/tinttotal = get_total_tint() if(tinttotal >= TINT_BLIND) - overlay_fullscreen("tint", /atom/movable/screen/fullscreen/blind) + overlay_fullscreen("tint", /atom/movable/screen/fullscreen/stretch/blind) else if(tinttotal >= TINT_IMPAIR) - overlay_fullscreen("tint", /atom/movable/screen/fullscreen/impaired, 2) + overlay_fullscreen("tint", /atom/movable/screen/fullscreen/stretch/impaired, 2) else clear_fullscreen("tint", 0) diff --git a/code/modules/mob/living/carbon/human/human_update_icons.dm b/code/modules/mob/living/carbon/human/human_update_icons.dm index 78100d015d6..feaad4085f9 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -567,7 +567,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) inv.update_icon() if(w_uniform && istype(w_uniform, /obj/item/clothing/under)) - if(client && hud_used && hud_used.hud_shown) + if(client && hud_used && hud_used.hud_version == HUD_STYLE_STANDARD) if(hud_used.inventory_shown) //if the inventory is open ... w_uniform.screen_loc = ui_iclothing //...draw the item in the inventory screen client.screen += w_uniform //Either way, add the item to the HUD @@ -644,7 +644,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) inv.update_icon() if(wear_id) - if(client && hud_used && hud_used.hud_shown) + if(client && hud_used && hud_used.hud_version == HUD_STYLE_STANDARD) wear_id.screen_loc = ui_id client.screen += wear_id @@ -660,7 +660,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) inv.update_icon() if(gloves) - if(client && hud_used && hud_used.hud_shown) + if(client && hud_used && hud_used.hud_version == HUD_STYLE_STANDARD) if(hud_used.inventory_shown) //if the inventory is open ... gloves.screen_loc = ui_gloves //...draw the item in the inventory screen client.screen += gloves //Either way, add the item to the HUD @@ -702,7 +702,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) if(glasses) var/mutable_appearance/new_glasses var/obj/item/organ/external/head/head_organ = get_organ("head") - if(client && hud_used && hud_used.hud_shown) + if(client && hud_used && hud_used.hud_version == HUD_STYLE_STANDARD) if(hud_used.inventory_shown) //if the inventory is open ... glasses.screen_loc = ui_glasses //...draw the item in the inventory screen client.screen += glasses //Either way, add the item to the HUD @@ -744,7 +744,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) if(l_ear || r_ear) if(l_ear) - if(client && hud_used && hud_used.hud_shown) + if(client && hud_used && hud_used.hud_version == HUD_STYLE_STANDARD) if(hud_used.inventory_shown) //if the inventory is open ... l_ear.screen_loc = ui_l_ear //...draw the item in the inventory screen client.screen += l_ear //Either way, add the item to the HUD @@ -761,7 +761,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) overlays_standing[EARS_LAYER] = mutable_appearance('icons/mob/clothing/ears.dmi', "[t_type]", layer = -EARS_LAYER) if(r_ear) - if(client && hud_used && hud_used.hud_shown) + if(client && hud_used && hud_used.hud_version == HUD_STYLE_STANDARD) if(hud_used.inventory_shown) //if the inventory is open ... r_ear.screen_loc = ui_r_ear //...draw the item in the inventory screen client.screen += r_ear //Either way, add the item to the HUD @@ -786,7 +786,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) inv.update_icon() if(shoes) - if(client && hud_used && hud_used.hud_shown) + if(client && hud_used && hud_used.hud_version == HUD_STYLE_STANDARD) if(hud_used.inventory_shown) //if the inventory is open ... shoes.screen_loc = ui_shoes //...draw the item in the inventory screen client.screen += shoes //Either way, add the item to the HUD @@ -822,7 +822,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) inv.update_icon() if(s_store) - if(client && hud_used && hud_used.hud_shown) + if(client && hud_used && hud_used.hud_version == HUD_STYLE_STANDARD) s_store.screen_loc = ui_sstore1 client.screen += s_store @@ -872,7 +872,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) if(inv) inv.update_icon() - if(hud_used.hud_shown && belt) + if(hud_used.hud_version == HUD_STYLE_STANDARD && belt) client.screen += belt belt.screen_loc = ui_belt @@ -899,7 +899,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) inv.update_icon() if(wear_suit && istype(wear_suit, /obj/item/clothing/suit)) - if(client && hud_used && hud_used.hud_shown) + if(client && hud_used && hud_used.hud_version == HUD_STYLE_STANDARD) if(hud_used.inventory_shown) //if the inventory is open ... wear_suit.screen_loc = ui_oclothing //TODO //...draw the item in the inventory screen client.screen += wear_suit //Either way, add the item to the HUD @@ -948,7 +948,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) if(inv) inv.update_icon() - if(hud_used.hud_shown) + if(hud_used.hud_version == HUD_STYLE_STANDARD) if(l_store) client.screen += l_store l_store.screen_loc = ui_storage1 @@ -1082,21 +1082,21 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) //update whether our head item appears on our hud. /mob/living/carbon/human/update_hud_head(obj/item/I) - if(client && hud_used && hud_used.hud_shown) + if(client && hud_used && hud_used.hud_version == HUD_STYLE_STANDARD) if(hud_used.inventory_shown) I.screen_loc = ui_head client.screen += I //update whether our mask item appears on our hud. /mob/living/carbon/human/update_hud_wear_mask(obj/item/I) - if(client && hud_used && hud_used.hud_shown) + if(client && hud_used && hud_used.hud_version == HUD_STYLE_STANDARD) if(hud_used.inventory_shown) I.screen_loc = ui_mask client.screen += I //update whether our back item appears on our hud. /mob/living/carbon/human/update_hud_back(obj/item/I) - if(client && hud_used && hud_used.hud_shown) + if(client && hud_used && hud_used.hud_version == HUD_STYLE_STANDARD) I.screen_loc = ui_back client.screen += I diff --git a/code/modules/mob/living/carbon/human/human_update_status.dm b/code/modules/mob/living/carbon/human/human_update_status.dm index 855a3d39e74..ee7fe70d3ee 100644 --- a/code/modules/mob/living/carbon/human/human_update_status.dm +++ b/code/modules/mob/living/carbon/human/human_update_status.dm @@ -13,7 +13,7 @@ /mob/living/carbon/human/update_nearsighted_effects() var/obj/item/clothing/glasses/G = glasses if(HAS_TRAIT(src, TRAIT_NEARSIGHT) && (!istype(G) || !G.prescription)) - overlay_fullscreen("nearsighted", /atom/movable/screen/fullscreen/impaired, 1) + overlay_fullscreen("nearsighted", /atom/movable/screen/fullscreen/stretch/impaired, 1) else clear_fullscreen("nearsighted") diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 7f083bd1755..b7bb510dc0f 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -828,7 +828,7 @@ return TRUE //called when the mob receives a bright flash -/mob/living/proc/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, laser_pointer = FALSE, type = /atom/movable/screen/fullscreen/flash) +/mob/living/proc/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, laser_pointer = FALSE, type = /atom/movable/screen/fullscreen/stretch/flash) if(can_be_flashed(intensity, override_blindness_check)) overlay_fullscreen("flash", type) addtimer(CALLBACK(src, PROC_REF(clear_fullscreen), "flash", 25), 25) diff --git a/code/modules/mob/living/living_life.dm b/code/modules/mob/living/living_life.dm index 1611a0a09c8..fad7b238c42 100644 --- a/code/modules/mob/living/living_life.dm +++ b/code/modules/mob/living/living_life.dm @@ -173,7 +173,7 @@ healths.icon_state = "health7" severity = 6 if(severity > 0) - overlay_fullscreen("brute", /atom/movable/screen/fullscreen/brute, severity) + overlay_fullscreen("brute", /atom/movable/screen/fullscreen/stretch/brute, severity) else clear_fullscreen("brute") if(health <= HEALTH_THRESHOLD_CRIT) diff --git a/code/modules/mob/living/living_update_status.dm b/code/modules/mob/living/living_update_status.dm index 041d28afdf3..7394a6de87a 100644 --- a/code/modules/mob/living/living_update_status.dm +++ b/code/modules/mob/living/living_update_status.dm @@ -1,12 +1,19 @@ -/mob/living/update_blind_effects() +/mob/living/update_blind_effects(sleeping = FALSE) if(!has_vision(information_only=TRUE)) - overlay_fullscreen("blind", /atom/movable/screen/fullscreen/blind) + if(sleeping) + overlay_fullscreen("sleepblind", /atom/movable/screen/fullscreen/center/blind/sleeping, animated = 2 SECONDS) + overlay_fullscreen("disky", /atom/movable/screen/fullscreen/center/blind/disky, animated = 7 SECONDS) + throw_alert("blind", /atom/movable/screen/alert/blind) + return TRUE + overlay_fullscreen("blind", /atom/movable/screen/fullscreen/stretch/blind) throw_alert("blind", /atom/movable/screen/alert/blind) return TRUE else clear_fullscreen("blind") + clear_fullscreen("sleepblind") + clear_fullscreen("disky") clear_alert("blind") - return 0 + return FALSE /mob/living/update_blurry_effects() var/atom/movable/plane_master_controller/game_plane_master_controller = hud_used?.plane_master_controllers[PLANE_MASTERS_GAME] @@ -19,7 +26,7 @@ /mob/living/update_druggy_effects() if(AmountDruggy()) - overlay_fullscreen("high", /atom/movable/screen/fullscreen/high) + overlay_fullscreen("high", /atom/movable/screen/fullscreen/stretch/high) throw_alert("high", /atom/movable/screen/alert/high) sound_environment_override = SOUND_ENVIRONMENT_DRUGGED else @@ -29,7 +36,7 @@ /mob/living/update_nearsighted_effects() if(HAS_TRAIT(src, TRAIT_NEARSIGHT)) - overlay_fullscreen("nearsighted", /atom/movable/screen/fullscreen/impaired, 1) + overlay_fullscreen("nearsighted", /atom/movable/screen/fullscreen/stretch/impaired, 1) else clear_fullscreen("nearsighted") diff --git a/code/modules/mob/living/silicon/silicon_mob.dm b/code/modules/mob/living/silicon/silicon_mob.dm index a487def354f..42d8bf19b98 100644 --- a/code/modules/mob/living/silicon/silicon_mob.dm +++ b/code/modules/mob/living/silicon/silicon_mob.dm @@ -447,7 +447,7 @@ /mob/living/silicon/get_access() return IGNORE_ACCESS //silicons always have access -/mob/living/silicon/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /atom/movable/screen/fullscreen/flash/noise) +/mob/living/silicon/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /atom/movable/screen/fullscreen/stretch/flash/noise) if(affect_silicon) return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index 94af1932245..09585012a39 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -141,7 +141,7 @@ Difficulty: Hard H.apply_status_effect(STATUS_EFFECT_BUBBLEGUM_CURSE, src) if(second_life) H.clear_fullscreen("Bubblegum") - H.overlay_fullscreen("Bubblegum", /atom/movable/screen/fullscreen/fog, 2) + H.overlay_fullscreen("Bubblegum", /atom/movable/screen/fullscreen/stretch/fog, 2) /mob/living/simple_animal/hostile/megafauna/bubblegum/death(gibbed) diff --git a/code/modules/mob/living/simple_animal/slime/slime_mob.dm b/code/modules/mob/living/simple_animal/slime/slime_mob.dm index 4e880cfa7f7..16e4a8773f9 100644 --- a/code/modules/mob/living/simple_animal/slime/slime_mob.dm +++ b/code/modules/mob/living/simple_animal/slime/slime_mob.dm @@ -194,7 +194,7 @@ healths.icon_state = "slime_health7" severity = 6 if(severity > 0) - overlay_fullscreen("brute", /atom/movable/screen/fullscreen/brute, severity) + overlay_fullscreen("brute", /atom/movable/screen/fullscreen/stretch/brute, severity) else clear_fullscreen("brute") diff --git a/code/modules/mob/living/stat_states.dm b/code/modules/mob/living/stat_states.dm index 8048e4cb75a..2d72e6e498a 100644 --- a/code/modules/mob/living/stat_states.dm +++ b/code/modules/mob/living/stat_states.dm @@ -19,8 +19,10 @@ if(updating) update_sight() - update_blind_effects() + update_blind_effects(TRUE) set_typing_indicator(FALSE) + if(hud_used && client) + hud_used.show_hud(HUD_STYLE_ACTIONHUD) return TRUE @@ -41,6 +43,8 @@ if(updating) update_sight() update_blind_effects() + if(hud_used && client) + hud_used.show_hud(HUD_STYLE_STANDARD) return TRUE diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 5bf5402ba26..b89bb7ec75a 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1254,7 +1254,7 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \ sync_nightvision_screen() //Sync up the overlay used for nightvision to the amount of see_in_dark a mob has. This needs to be called everywhere sync_lighting_plane_alpha() is. /mob/proc/sync_nightvision_screen() - var/atom/movable/screen/fullscreen/see_through_darkness/S = screens["see_through_darkness"] + var/atom/movable/screen/fullscreen/stretch/see_through_darkness/S = screens["see_through_darkness"] if(S) var/suffix = "" switch(see_in_dark) diff --git a/code/modules/mod/modules/module_kinesis.dm b/code/modules/mod/modules/module_kinesis.dm index dcacecc1737..c2c9242fb40 100644 --- a/code/modules/mod/modules/module_kinesis.dm +++ b/code/modules/mod/modules/module_kinesis.dm @@ -30,7 +30,7 @@ /// Overlay we add to each grabbed atom. var/image/kinesis_icon /// Our mouse movement catcher. - var/atom/movable/screen/fullscreen/cursor_catcher/kinesis/kinesis_catcher + var/atom/movable/screen/fullscreen/stretch/cursor_catcher/kinesis/kinesis_catcher /// The sounds playing while we grabbed an object. var/datum/looping_sound/kinesis/soundloop ///The pixel_X of whatever we were grabbing before hand. @@ -83,7 +83,7 @@ pre_pixel_x = grabbed_atom.pixel_x pre_pixel_y = grabbed_atom.pixel_y beam.chain = beam.Beam(grabbed_atom, icon_state = "kinesis", icon='icons/effects/beam.dmi', time = 100 SECONDS, maxdistance = 15, beam_type = /obj/effect/ebeam, beam_sleep_time = 3) - kinesis_catcher = mod.wearer.overlay_fullscreen("kinesis", /atom/movable/screen/fullscreen/cursor_catcher/kinesis, 0) + kinesis_catcher = mod.wearer.overlay_fullscreen("kinesis", /atom/movable/screen/fullscreen/stretch/cursor_catcher/kinesis, 0) kinesis_catcher.assign_to_mob(mod.wearer) soundloop.start() START_PROCESSING(SSfastprocess, src) @@ -249,7 +249,7 @@ complexity = 0 use_power_cost = DEFAULT_CHARGE_DRAIN * 5 -/atom/movable/screen/fullscreen/cursor_catcher/kinesis +/atom/movable/screen/fullscreen/stretch/cursor_catcher/kinesis icon = 'icons/mob/screen_kinesis.dmi' icon_state = "kinesis" diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index f273631c1f5..76740a9a988 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -545,7 +545,7 @@ /obj/machinery/disposal/get_remote_view_fullscreens(mob/user) if(user.stat == DEAD || !(user.sight & (SEEOBJS|SEEMOBS))) - user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 2) + user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/stretch/impaired, 2) /obj/machinery/disposal/force_eject_occupant(mob/target) target.forceMove(get_turf(src)) diff --git a/icons/mob/screen_sleeping.dmi b/icons/mob/screen_sleeping.dmi new file mode 100644 index 0000000000000000000000000000000000000000..c86eff475d5081a1c2ac9f7e4cc25ae8d2e4702e GIT binary patch literal 45945 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 literal 0 HcmV?d00001 diff --git a/icons/mob/screen_tight.dmi b/icons/mob/screen_tight.dmi new file mode 100644 index 0000000000000000000000000000000000000000..2bf7de62e4b89e2bf09a94a637d5a6ccb5c3615f GIT binary patch literal 11643 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 literal 0 HcmV?d00001