/* The global hud: Uses the same visual objects for all players. */ var/datum/global_hud/global_hud = new() var/list/global_huds = list( global_hud.druggy, global_hud.blurry, global_hud.vimpaired, global_hud.darkMask, global_hud.nvg, global_hud.thermal, global_hud.meson, global_hud.science) /datum/hud/var/obj/screen/grab_intent /datum/hud/var/obj/screen/hurt_intent /datum/hud/var/obj/screen/disarm_intent /datum/hud/var/obj/screen/help_intent /datum/global_hud var/obj/screen/druggy var/obj/screen/blurry var/list/vimpaired var/list/darkMask var/obj/screen/nvg var/obj/screen/thermal var/obj/screen/meson var/obj/screen/science /datum/global_hud/proc/setup_overlay(var/icon_state) var/obj/screen/screen = new /obj/screen() screen.screen_loc = "1,1" screen.icon = 'icons/obj/hud_full.dmi' screen.icon_state = icon_state screen.layer = SCREEN_LAYER screen.mouse_opacity = 0 return screen /datum/global_hud/New() //420erryday psychedellic colours screen overlay for when you are high druggy = new /obj/screen() druggy.screen_loc = "WEST,SOUTH to EAST,NORTH" druggy.icon_state = "druggy" druggy.layer = 17 druggy.mouse_opacity = 0 //that white blurry effect you get when you eyes are damaged blurry = new /obj/screen() blurry.screen_loc = "WEST,SOUTH to EAST,NORTH" blurry.icon_state = "blurry" blurry.layer = 17 blurry.mouse_opacity = 0 nvg = setup_overlay("nvg_hud") thermal = setup_overlay("thermal_hud") meson = setup_overlay("meson_hud") science = setup_overlay("science_hud") var/obj/screen/O var/i //that nasty looking dither you get when you're short-sighted vimpaired = newlist(/obj/screen,/obj/screen,/obj/screen,/obj/screen) O = vimpaired[1] O.screen_loc = "1,1 to 5,15" O = vimpaired[2] O.screen_loc = "5,1 to 10,5" O = vimpaired[3] O.screen_loc = "6,11 to 10,15" O = vimpaired[4] O.screen_loc = "11,1 to 15,15" //welding mask overlay black/dither darkMask = newlist(/obj/screen, /obj/screen, /obj/screen, /obj/screen, /obj/screen, /obj/screen, /obj/screen, /obj/screen) O = darkMask[1] O.screen_loc = "3,3 to 5,13" O = darkMask[2] O.screen_loc = "5,3 to 10,5" O = darkMask[3] O.screen_loc = "6,11 to 10,13" O = darkMask[4] O.screen_loc = "11,3 to 13,13" O = darkMask[5] O.screen_loc = "1,1 to 15,2" O = darkMask[6] O.screen_loc = "1,3 to 2,15" O = darkMask[7] O.screen_loc = "14,3 to 15,15" O = darkMask[8] O.screen_loc = "3,14 to 13,15" for(i = 1, i <= 4, i++) O = vimpaired[i] O.icon_state = "dither50" O.layer = 17 O.mouse_opacity = 0 O = darkMask[i] O.icon_state = "dither50" O.layer = 17 O.mouse_opacity = 0 for(i = 5, i <= 8, i++) O = darkMask[i] O.icon_state = "black" O.layer = 17 O.mouse_opacity = 0 /* The hud datum Used to show and hide huds for all the different mob types, including inventories and item quick actions. */ /datum/hud var/mob/mymob var/hud_shown = 1 //Used for the HUD toggle (F12) var/inventory_shown = 1 //the inventory var/show_intent_icons = 0 var/hotkey_ui_hidden = 0 //This is to hide the buttons that can be used via hotkeys. (hotkeybuttons list of buttons) var/obj/screen/lingchemdisplay var/obj/screen/blobpwrdisplay var/obj/screen/blobhealthdisplay var/obj/screen/r_hand_hud_object var/obj/screen/l_hand_hud_object var/obj/screen/action_intent var/obj/screen/move_intent var/list/adding var/list/other var/list/obj/screen/hotkeybuttons var/list/obj/screen/item_action/item_action_list = list() //Used for the item action ui buttons. datum/hud/New(mob/owner) mymob = owner instantiate() ..() /datum/hud/proc/hidden_inventory_update() if(!mymob) return if(ishuman(mymob)) var/mob/living/carbon/human/H = mymob for(var/gear_slot in H.species.hud.gear) var/list/hud_data = H.species.hud.gear[gear_slot] if(inventory_shown && hud_shown) switch(hud_data["slot"]) if(slot_head) if(H.head) H.head.screen_loc = hud_data["loc"] if(slot_shoes) if(H.shoes) H.shoes.screen_loc = hud_data["loc"] if(slot_l_ear) if(H.l_ear) H.l_ear.screen_loc = hud_data["loc"] if(slot_r_ear) if(H.r_ear) H.r_ear.screen_loc = hud_data["loc"] if(slot_gloves) if(H.gloves) H.gloves.screen_loc = hud_data["loc"] if(slot_glasses) if(H.glasses) H.glasses.screen_loc = hud_data["loc"] if(slot_w_uniform) if(H.w_uniform) H.w_uniform.screen_loc = hud_data["loc"] if(slot_wear_suit) if(H.wear_suit) H.wear_suit.screen_loc = hud_data["loc"] if(slot_wear_mask) if(H.wear_mask) H.wear_mask.screen_loc = hud_data["loc"] else switch(hud_data["slot"]) if(slot_head) if(H.head) H.head.screen_loc = null if(slot_shoes) if(H.shoes) H.shoes.screen_loc = null if(slot_l_ear) if(H.l_ear) H.l_ear.screen_loc = null if(slot_r_ear) if(H.r_ear) H.r_ear.screen_loc = null if(slot_gloves) if(H.gloves) H.gloves.screen_loc = null if(slot_glasses) if(H.glasses) H.glasses.screen_loc = null if(slot_w_uniform) if(H.w_uniform) H.w_uniform.screen_loc = null if(slot_wear_suit) if(H.wear_suit) H.wear_suit.screen_loc = null if(slot_wear_mask) if(H.wear_mask) H.wear_mask.screen_loc = null /datum/hud/proc/persistant_inventory_update() if(!mymob) return if(ishuman(mymob)) var/mob/living/carbon/human/H = mymob for(var/gear_slot in H.species.hud.gear) var/list/hud_data = H.species.hud.gear[gear_slot] if(hud_shown) switch(hud_data["slot"]) if(slot_s_store) if(H.s_store) H.s_store.screen_loc = hud_data["loc"] if(slot_wear_id) if(H.wear_id) H.wear_id.screen_loc = hud_data["loc"] if(slot_belt) if(H.belt) H.belt.screen_loc = hud_data["loc"] if(slot_back) if(H.back) H.back.screen_loc = hud_data["loc"] if(slot_l_store) if(H.l_store) H.l_store.screen_loc = hud_data["loc"] if(slot_r_store) if(H.r_store) H.r_store.screen_loc = hud_data["loc"] else switch(hud_data["slot"]) if(slot_s_store) if(H.s_store) H.s_store.screen_loc = null if(slot_wear_id) if(H.wear_id) H.wear_id.screen_loc = null if(slot_belt) if(H.belt) H.belt.screen_loc = null if(slot_back) if(H.back) H.back.screen_loc = null if(slot_l_store) if(H.l_store) H.l_store.screen_loc = null if(slot_r_store) if(H.r_store) H.r_store.screen_loc = null /datum/hud/proc/instantiate() if(!ismob(mymob)) return 0 if(!mymob.client) return 0 var/ui_style = ui_style2icon(mymob.client.prefs.UI_style) var/ui_color = mymob.client.prefs.UI_style_color var/ui_alpha = mymob.client.prefs.UI_style_alpha if(ishuman(mymob)) human_hud(ui_style, ui_color, ui_alpha, mymob) // Pass the player the UI style chosen in preferences else if(issmall(mymob)) monkey_hud(ui_style) else if(isbrain(mymob)) brain_hud(ui_style) else if(isalien(mymob)) larva_hud() else if(isslime(mymob)) slime_hud() else if(isAI(mymob)) ai_hud() else if(isrobot(mymob)) robot_hud() else if(isobserver(mymob)) ghost_hud() else mymob.instantiate_hud(src) /mob/proc/instantiate_hud(var/datum/hud/HUD) return //Triggered when F12 is pressed (Unless someone changed something in the DMF) /mob/verb/button_pressed_F12(var/full = 0 as null) set name = "F12" set hidden = 1 if(!hud_used) usr << "\red This mob type does not use a HUD." return if(!ishuman(src)) usr << "\red Inventory hiding is currently only supported for human mobs, sorry." return if(!client) return if(client.view != world.view) return if(hud_used.hud_shown) hud_used.hud_shown = 0 if(src.hud_used.adding) src.client.screen -= src.hud_used.adding if(src.hud_used.other) src.client.screen -= src.hud_used.other if(src.hud_used.hotkeybuttons) src.client.screen -= src.hud_used.hotkeybuttons if(src.hud_used.item_action_list) src.client.screen -= src.hud_used.item_action_list //Due to some poor coding some things need special treatment: //These ones are a part of 'adding', 'other' or 'hotkeybuttons' but we want them to stay if(!full) src.client.screen += src.hud_used.l_hand_hud_object //we want the hands to be visible src.client.screen += src.hud_used.r_hand_hud_object //we want the hands to be visible src.client.screen += src.hud_used.action_intent //we want the intent swticher visible src.hud_used.action_intent.screen_loc = ui_acti_alt //move this to the alternative position, where zone_select usually is. else src.client.screen -= src.healths src.client.screen -= src.internals src.client.screen -= src.gun_setting_icon //These ones are not a part of 'adding', 'other' or 'hotkeybuttons' but we want them gone. src.client.screen -= src.zone_sel //zone_sel is a mob variable for some reason. else hud_used.hud_shown = 1 if(src.hud_used.adding) src.client.screen += src.hud_used.adding if(src.hud_used.other && src.hud_used.inventory_shown) src.client.screen += src.hud_used.other if(src.hud_used.hotkeybuttons && !src.hud_used.hotkey_ui_hidden) src.client.screen += src.hud_used.hotkeybuttons if(src.healths) src.client.screen |= src.healths if(src.internals) src.client.screen |= src.internals if(src.gun_setting_icon) src.client.screen |= src.gun_setting_icon src.hud_used.action_intent.screen_loc = ui_acti //Restore intent selection to the original position src.client.screen += src.zone_sel //This one is a special snowflake hud_used.hidden_inventory_update() hud_used.persistant_inventory_update() update_action_buttons() //Similar to button_pressed_F12() but keeps zone_sel, gun_setting_icon, and healths. /mob/proc/toggle_zoom_hud() if(!hud_used) return if(!ishuman(src)) return if(!client) return if(client.view != world.view) return if(hud_used.hud_shown) hud_used.hud_shown = 0 if(src.hud_used.adding) src.client.screen -= src.hud_used.adding if(src.hud_used.other) src.client.screen -= src.hud_used.other if(src.hud_used.hotkeybuttons) src.client.screen -= src.hud_used.hotkeybuttons if(src.hud_used.item_action_list) src.client.screen -= src.hud_used.item_action_list src.client.screen -= src.internals src.client.screen += src.hud_used.action_intent //we want the intent swticher visible else hud_used.hud_shown = 1 if(src.hud_used.adding) src.client.screen += src.hud_used.adding if(src.hud_used.other && src.hud_used.inventory_shown) src.client.screen += src.hud_used.other if(src.hud_used.hotkeybuttons && !src.hud_used.hotkey_ui_hidden) src.client.screen += src.hud_used.hotkeybuttons if(src.internals) src.client.screen |= src.internals src.hud_used.action_intent.screen_loc = ui_acti //Restore intent selection to the original position hud_used.hidden_inventory_update() hud_used.persistant_inventory_update() update_action_buttons()