diff --git a/code/__DEFINES/color/colors.dm b/code/__DEFINES/color/colors.dm index d88320d094..ca2d0fe496 100644 --- a/code/__DEFINES/color/colors.dm +++ b/code/__DEFINES/color/colors.dm @@ -30,6 +30,7 @@ #define COLOR_YELLOW "#FFFF00" #define COLOR_VIVID_YELLOW "#FBFF23" #define COLOR_VERY_SOFT_YELLOW "#FAE48E" +#define COLOR_GOLD "#FFD700" #define COLOR_OLIVE "#808000" #define COLOR_VIBRANT_LIME "#00FF00" diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index 14a3b7dc49..f5676b626c 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -94,11 +94,12 @@ #define ui_palette_scroll_offset(north_offset) ("WEST+1:8,NORTH-[6+north_offset]:28") //Middle right (status indicators) -#define ui_healthdoll "EAST-1:28,CENTER-2:13" -#define ui_health "EAST-1:28,CENTER-1:15" -#define ui_internal "EAST-1:28,CENTER+1:19"//CIT CHANGE - moves internal icon up a little bit to accommodate for the stamina meter -#define ui_mood "EAST-1:28,CENTER-3:10" -// #define ui_spacesuit "EAST-1:28,CENTER-4:10" +#define ui_healthdoll "EAST-1:28,CENTER-2:17" +#define ui_health "EAST-1:28,CENTER-1:19" +#define ui_internal "EAST-1:28,CENTER+1:21" // RIP, although nobody will remember this, unsmart coders have used this for other stuff. DO NOT REMOVE UNLESS RENAMING OR REPLACING. +#define ui_mood "EAST-1:28,CENTER:21" +#define ui_stamina "EAST-1:28,CENTER-3:14" +// #define ui_spacesuit "EAST-1:28,CENTER-4:14" //Pop-up inventory #define ui_shoes "WEST+1:8,SOUTH:5" @@ -208,7 +209,6 @@ #define ui_ghost_spawners "SOUTH: 6, CENTER+1:24" // LEGACY. SAME LOC AS PAI //UI position overrides for 1:1 screen layout. (default is 7:5) -#define ui_stamina "EAST-1:28,CENTER:17" // replacing internals button #define ui_overridden_resist "EAST-3:24,SOUTH+1:7" #define ui_clickdelay "CENTER,SOUTH+1:-31" #define ui_resistdelay "EAST-3:24,SOUTH+1:4" @@ -231,6 +231,8 @@ #define SCRN_OBJ_IN_LIST "list" /// In the collapseable palette #define SCRN_OBJ_IN_PALETTE "palette" +///Inserted first in the list +#define SCRN_OBJ_INSERT_FIRST "first" /// The filter name for the hover outline #define HOVER_OUTLINE_FILTER "hover_outline" diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm index f5826579c8..05c16c12ed 100644 --- a/code/_onclick/hud/action_button.dm +++ b/code/_onclick/hud/action_button.dm @@ -5,10 +5,11 @@ var/datum/hud/our_hud var/actiontooltipstyle = "" screen_loc = null + mouse_over_pointer = MOUSE_HAND_POINTER var/button_icon_state var/appearance_cache - + var/mutable_appearance/button_overlay /// Where we are currently placed on the hud. SCRN_OBJ_DEFAULT asks the linked action what it thinks var/location = SCRN_OBJ_DEFAULT /// A unique bitflag, combined with the name of our linked action this lets us persistently remember any user changes to our position @@ -199,6 +200,7 @@ icon = 'icons/hud/64x16_actions.dmi' icon_state = "screen_gen_palette" screen_loc = ui_action_palette + mouse_over_pointer = MOUSE_HAND_POINTER var/datum/hud/our_hud var/expanded = FALSE /// Id of any currently running timers that set our color matrix @@ -324,6 +326,7 @@ GLOBAL_LIST_INIT(palette_removed_matrix, list(1.4,0,0,0, 0.7,0.4,0,0, 0.4,0,0.6, /atom/movable/screen/palette_scroll icon = 'icons/mob/screen_gen.dmi' screen_loc = ui_palette_scroll + mouse_over_pointer = MOUSE_HAND_POINTER /// How should we move the palette's actions? /// Positive scrolls down the list, negative scrolls back var/scroll_direction = 0 diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm index 419de492ef..d4344b9464 100644 --- a/code/_onclick/hud/ai.dm +++ b/code/_onclick/hud/ai.dm @@ -1,5 +1,6 @@ /atom/movable/screen/ai icon = 'icons/mob/screen_ai.dmi' + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/ai/Click() if(isobserver(usr) || usr.incapacitated()) diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 060e44e007..815e46f9eb 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -91,6 +91,8 @@ name = "Alert" desc = "Something seems to have gone wrong with this alert, so report this bug please" mouse_opacity = MOUSE_OPACITY_ICON + /// do we glow to represent we do stuff when clicked + var/clickable_glow = FALSE var/timeout = 0 //If set to a number, this alert will clear itself after that many deciseconds var/severity = 0 var/alerttooltipstyle = "" @@ -100,6 +102,12 @@ /// Boolean. If TRUE, the Click() proc will attempt to Click() on the master first if there is a master. var/click_master = TRUE +/atom/movable/screen/alert/Initialize(mapload, datum/hud/hud_owner) + . = ..() + if(clickable_glow) + add_filter("clickglow", 2, outline_filter(color = COLOR_GOLD, size = 1)) + mouse_over_pointer = MOUSE_HAND_POINTER + /atom/movable/screen/alert/MouseEntered(location,control,params) if(!QDELETED(src)) openToolTip(usr,src,params,title = name,content = desc,theme = alerttooltipstyle) @@ -247,6 +255,7 @@ or something covering your eyes." name = "Mind Control" desc = "Your mind has been hijacked! Click to view the mind control command." icon_state = "mind_control" + clickable_glow = TRUE var/command /atom/movable/screen/alert/mind_control/Click() @@ -271,6 +280,7 @@ or something covering your eyes." desc = "Something got lodged into your flesh and is causing major bleeding. It might fall out with time, but surgery is the safest way. \ If you're feeling frisky, examine yourself and click the underlined item to pull the object out." icon_state = "embeddedobject" + clickable_glow = TRUE /atom/movable/screen/alert/embeddedobject/Click() if(isliving(usr) && usr == owner) @@ -299,6 +309,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." name = "On Fire" desc = "You're on fire. Stop, drop and roll to put the fire out or move to a vacuum area." icon_state = "fire" + clickable_glow = TRUE /atom/movable/screen/alert/fire/Click() var/mob/living/L = usr @@ -310,8 +321,29 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." /atom/movable/screen/alert/give // information set when the give alert is made icon_state = "default" + clickable_glow = TRUE var/mob/living/carbon/offerer var/obj/item/receiving + /// Additional text displayed in the description of the alert. + var/additional_desc_text = "Click this alert to take it, or shift click it to examine it." + /// Text to override what appears in screentips for the alert + var/screentip_override_text + /// Whether the offered item can be examined by shift-clicking the alert + var/examinable = TRUE + +/atom/movable/screen/alert/give/Initialize(mapload, datum/hud/hud_owner) + . = ..() + register_context() + +/atom/movable/screen/alert/give/Destroy() + offerer = null + receiving = null + return ..() + +/atom/movable/screen/alert/give/add_context(atom/source, list/context, obj/item/held_item, mob/user) + LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, screentip_override_text || "Take [receiving.name]") + LAZYSET(context[SCREENTIP_CONTEXT_SHIFT_LMB], INTENT_ANY, "Examine") + return CONTEXTUAL_SCREENTIP_SET /** * Handles assigning most of the variables for the alert that pops up when an item is offered @@ -341,6 +373,16 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." CRASH("User for [src] is of type \[[usr.type]\]. This should never happen.") handle_transfer() +/atom/movable/screen/alert/give/examine(mob/user) + if(!examinable) + return ..() + + return list( + span_boldnotice(name), + span_info("[offerer] is offering you the following item (click the alert to take it!):"), + "
[jointext(examine(usr), "\n")]") return FALSE if(master && click_master) return usr.client.Click(master, location, control, params) @@ -829,3 +886,9 @@ so as to remain in compliance with the most up-to-date laws." master = null owner = null screen_loc = "" + +/atom/movable/screen/alert/examine(mob/user) + return list( + span_boldnotice(name), + span_info(desc), + ) diff --git a/code/_onclick/hud/blob_overmind.dm b/code/_onclick/hud/blob_overmind.dm index f4d6ffc919..8a981d5796 100644 --- a/code/_onclick/hud/blob_overmind.dm +++ b/code/_onclick/hud/blob_overmind.dm @@ -1,6 +1,7 @@ /atom/movable/screen/blob icon = 'icons/mob/blob.dmi' + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/blob/MouseEntered(location,control,params) openToolTip(usr,src,params,title = name,content = desc, theme = "blob") diff --git a/code/_onclick/hud/ghost.dm b/code/_onclick/hud/ghost.dm index bb637ed445..f4f1f2f7b0 100644 --- a/code/_onclick/hud/ghost.dm +++ b/code/_onclick/hud/ghost.dm @@ -1,5 +1,6 @@ /atom/movable/screen/ghost icon = 'icons/mob/screen_ghost.dmi' + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/ghost/MouseEntered() flick(icon_state + "_anim", src) diff --git a/code/_onclick/hud/guardian.dm b/code/_onclick/hud/guardian.dm index 2af02d8437..09ec5d925c 100644 --- a/code/_onclick/hud/guardian.dm +++ b/code/_onclick/hud/guardian.dm @@ -93,6 +93,7 @@ /atom/movable/screen/guardian icon = 'icons/mob/guardian.dmi' + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/guardian/Manifest icon_state = "manifest" diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index c10e781833..52397c3036 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -87,7 +87,6 @@ GLOBAL_LIST_INIT(available_ui_styles, list( var/atom/movable/screen/healths var/atom/movable/screen/healthdoll - var/atom/movable/screen/internals var/atom/movable/screen/wanted/wanted_lvl // subtypes can override this to force a specific UI style @@ -148,7 +147,6 @@ GLOBAL_LIST_INIT(available_ui_styles, list( healths = null healthdoll = null wanted_lvl = null - internals = null lingchemdisplay = null devilsouldisplay = null lingstingdisplay = null @@ -365,6 +363,9 @@ GLOBAL_LIST_INIT(available_ui_styles, list( listed_actions.insert_action(button) if(SCRN_OBJ_IN_PALETTE) palette_actions.insert_action(button) + if(SCRN_OBJ_INSERT_FIRST) + listed_actions.insert_action(button, index = 1) + position = SCRN_OBJ_IN_LIST else // If we don't have it as a define, this is a screen_loc, and we should be floating floating_actions += button button.screen_loc = position diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 27989f3bb1..c8b7b3327d 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -4,6 +4,7 @@ /atom/movable/screen/human/toggle name = "toggle" icon_state = "toggle" + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/human/toggle/Click() @@ -26,6 +27,7 @@ /atom/movable/screen/human/equip name = "equip" icon_state = "act_equip" + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/human/equip/Click() if(ismecha(usr.loc)) // stops inventory actions in a mech @@ -68,6 +70,7 @@ /atom/movable/screen/ling/sting name = "current sting" screen_loc = ui_lingstingdisplay + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/ling/sting/Click() if(isobserver(usr)) @@ -412,10 +415,6 @@ throw_icon.hud = src hotkeybuttons += throw_icon - internals = new /atom/movable/screen/internals() - internals.hud = src - infodisplay += internals - healths = new /atom/movable/screen/healths() healths.hud = src infodisplay += healths diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm index b63f8241cb..9ee795a745 100644 --- a/code/_onclick/hud/monkey.dm +++ b/code/_onclick/hud/monkey.dm @@ -85,10 +85,6 @@ throw_icon.hud = src hotkeybuttons += throw_icon - internals = new /atom/movable/screen/internals() - internals.hud = src - infodisplay += internals - healths = new /atom/movable/screen/healths() healths.hud = src infodisplay += healths diff --git a/code/_onclick/hud/new_player.dm b/code/_onclick/hud/new_player.dm index 539b842375..c7f40e4dcc 100644 --- a/code/_onclick/hud/new_player.dm +++ b/code/_onclick/hud/new_player.dm @@ -62,8 +62,9 @@ screen_loc = "TOP,CENTER:-61" /atom/movable/screen/lobby/button + mouse_over_pointer = MOUSE_HAND_POINTER ///Is the button currently enabled? - var/enabled = TRUE + VAR_PROTECTED/enabled = TRUE ///Is the button currently being hovered over with the mouse? var/highlighted = FALSE /// The ref of the mob that owns this button. Only the owner can click on it. @@ -113,6 +114,7 @@ return FALSE enabled = status update_appearance(UPDATE_ICON) + mouse_over_pointer = enabled ? MOUSE_HAND_POINTER : MOUSE_INACTIVE_POINTER return TRUE ///Prefs menu @@ -184,10 +186,10 @@ icon = 'icons/hud/lobby/join.dmi' icon_state = "" //Default to not visible base_icon_state = "join_game" - enabled = FALSE /atom/movable/screen/lobby/button/join/Initialize(mapload) . = ..() + set_button_status(FALSE) switch(SSticker.current_state) if(GAME_STATE_PREGAME, GAME_STATE_STARTUP) RegisterSignal(SSticker, COMSIG_TICKER_ENTER_SETTING_UP, PROC_REF(show_join_button)) @@ -248,13 +250,13 @@ icon = 'icons/hud/lobby/observe.dmi' icon_state = "observe_disabled" base_icon_state = "observe" - enabled = FALSE /atom/movable/screen/lobby/button/observe/Initialize(mapload) . = ..() if(SSticker.current_state > GAME_STATE_STARTUP) set_button_status(TRUE) else + set_button_status(FALSE) RegisterSignal(SSticker, COMSIG_TICKER_ENTER_PREGAME, PROC_REF(enable_observing)) /atom/movable/screen/lobby/button/observe/Click(location, control, params) diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 35fd31cbdb..58b52dea49 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -1,5 +1,6 @@ /atom/movable/screen/robot icon = 'icons/mob/screen_cyborg.dmi' + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/robot/module name = "cyborg module" diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index c0d500511f..8e3dd1ccce 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -57,6 +57,7 @@ /atom/movable/screen/swap_hand plane = HUD_PLANE name = "swap hand" + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/swap_hand/Click() // At this point in client Click() code we have passed the 1/10 sec check and little else @@ -85,12 +86,14 @@ icon = 'icons/mob/screen_midnight.dmi' icon_state = "craft" screen_loc = ui_crafting + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/area_creator name = "create new area" icon = 'icons/mob/screen_midnight.dmi' icon_state = "area_edit" screen_loc = ui_building + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/area_creator/Click() if(usr.incapacitated() || (isobserver(usr) && !IsAdminGhost(usr))) @@ -106,11 +109,11 @@ icon = 'icons/mob/screen_midnight.dmi' icon_state = "talk_wheel" screen_loc = ui_language_menu + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/language_menu/Click() - var/mob/M = usr - var/datum/language_holder/H = M.get_language_holder() - H.open_language_menu(usr) + + usr.get_language_holder().open_language_menu(usr) /atom/movable/screen/inventory /// The identifier for the slot. It has nothing to do with ID cards. @@ -172,7 +175,7 @@ var/image/item_overlay = image(holding) item_overlay.alpha = 92 - if(!user.can_equip(holding, slot_id, disable_warning = TRUE, bypass_equip_delay_self = TRUE)) + if(!holding.mob_can_equip(user, slot_id, disable_warning = TRUE, bypass_equip_delay_self = TRUE)) item_overlay.color = "#FF0000" else item_overlay.color = "#00ff00" @@ -247,6 +250,7 @@ icon = 'icons/mob/screen_midnight.dmi' icon_state = "act_drop" plane = HUD_PLANE + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/drop/Click() if(usr.stat == CONSCIOUS) @@ -256,6 +260,7 @@ name = "intent" icon_state = "help" screen_loc = ui_acti + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/act_intent/Click(location, control, params) usr.a_intent_change(INTENT_HOTKEY_RIGHT) @@ -287,76 +292,11 @@ icon = 'icons/mob/screen_cyborg.dmi' screen_loc = ui_borg_intents -/atom/movable/screen/internals - name = "toggle internals" - icon_state = "internal0" - screen_loc = ui_internal - -/atom/movable/screen/internals/Click() - if(!iscarbon(usr)) - return - var/mob/living/carbon/C = usr - if(C.incapacitated()) - return - - if(C.internal) - C.internal = null - to_chat(C, span_notice("You are no longer running on internals.")) - icon_state = "internal0" - else - if(!C.getorganslot(ORGAN_SLOT_BREATHING_TUBE)) - if(HAS_TRAIT(C, TRAIT_NO_INTERNALS)) - to_chat(C, span_warning("Due to cumbersome equipment or anatomy, you are currently unable to use internals!")) - return - var/obj/item/clothing/check - var/internals = FALSE - - for(check in GET_INTERNAL_SLOTS(C)) - if(istype(check, /obj/item/clothing/mask)) - var/obj/item/clothing/mask/M = check - if(M.mask_adjusted) - M.adjustmask(C) - if((check.clothing_flags & ALLOWINTERNALS)) - internals = TRUE - if(!internals) - to_chat(C, span_warning("You are not wearing an internals mask!")) - return - - var/obj/item/I = C.is_holding_item_of_type(/obj/item/tank) - if(I) - to_chat(C, span_notice("You are now running on internals from [I] in your [C.get_held_index_name(C.get_held_index_of_item(I))].")) - C.internal = I - else if(ishuman(C)) - var/mob/living/carbon/human/H = C - if(istype(H.s_store, /obj/item/tank)) - to_chat(H, span_notice("You are now running on internals from [H.s_store] on your [H.wear_suit.name].")) - H.internal = H.s_store - else if(istype(H.belt, /obj/item/tank)) - to_chat(H, span_notice("You are now running on internals from [H.belt] on your belt.")) - H.internal = H.belt - else if(istype(H.l_store, /obj/item/tank)) - to_chat(H, span_notice("You are now running on internals from [H.l_store] in your left pocket.")) - H.internal = H.l_store - else if(istype(H.r_store, /obj/item/tank)) - to_chat(H, span_notice("You are now running on internals from [H.r_store] in your right pocket.")) - H.internal = H.r_store - - //Separate so CO2 jetpacks are a little less cumbersome. - if(!C.internal && istype(C.back, /obj/item/tank)) - to_chat(C, span_notice("You are now running on internals from [C.back] on your back.")) - C.internal = C.back - - if(C.internal) - icon_state = "internal1" - else - to_chat(C, span_warning("You don't have an oxygen tank!")) - return - C.update_action_buttons_icon() - /atom/movable/screen/mov_intent name = "run/walk toggle" icon = 'icons/mob/screen_midnight.dmi' icon_state = "running" + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/mov_intent/Initialize(mapload) . = ..() @@ -366,7 +306,10 @@ toggle(usr) /atom/movable/screen/mov_intent/update_icon_state() - switch(hud?.mymob?.m_intent) + if(!hud || !hud.mymob || !isliving(hud.mymob)) + return + var/mob/living/living_hud_owner = hud.mymob + switch(living_hud_owner.m_intent) if(MOVE_INTENT_WALK) icon_state = CONFIG_GET(flag/sprint_enabled)? "walking" : "walking_nosprint" if(MOVE_INTENT_RUN) @@ -382,6 +325,8 @@ name = "stop pulling" icon = 'icons/mob/screen_midnight.dmi' icon_state = "pull" + base_icon_state = "pull" + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/pull/Click() if(isobserver(usr)) @@ -389,17 +334,14 @@ usr.stop_pulling() /atom/movable/screen/pull/update_icon_state() - if(hud?.mymob?.pulling) - icon_state = "pull" - else - icon_state = "pull0" + icon_state = "[base_icon_state][hud?.mymob?.pulling ? null : 0]" return ..() /atom/movable/screen/resist name = "resist" icon = 'icons/mob/screen_midnight.dmi' icon_state = "act_resist" - plane = HUD_PLANE + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/resist/Click() if(isliving(usr)) @@ -411,7 +353,7 @@ icon = 'icons/mob/screen_midnight.dmi' icon_state = "act_rest" base_icon_state = "act_rest" - plane = HUD_PLANE + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/rest/Click() if(isliving(usr)) @@ -429,6 +371,7 @@ name = "throw/catch" icon = 'icons/mob/screen_midnight.dmi' icon_state = "act_throw_off" + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/throw_catch/Click() if(iscarbon(usr)) @@ -439,6 +382,7 @@ name = "damage zone" icon_state = "zone_sel" screen_loc = ui_zonesel + mouse_over_pointer = MOUSE_HAND_POINTER var/overlay_icon = 'icons/mob/screen_gen.dmi' var/static/list/hover_overlays_cache = list() var/hovering @@ -641,6 +585,7 @@ /atom/movable/screen/healthdoll name = "health doll" screen_loc = ui_healthdoll + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/healthdoll/Click() if (iscarbon(usr)) @@ -656,6 +601,7 @@ name = "mood" icon_state = "mood5" screen_loc = ui_mood + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/mood/attack_tk() return @@ -708,6 +654,7 @@ /atom/movable/screen/component_button + mouse_over_pointer = MOUSE_HAND_POINTER var/atom/movable/screen/parent /atom/movable/screen/component_button/Initialize(mapload, atom/movable/screen/parent) diff --git a/code/_onclick/hud/screen_objects/sprint.dm b/code/_onclick/hud/screen_objects/sprint.dm index b32973f2dd..1a655a4db6 100644 --- a/code/_onclick/hud/screen_objects/sprint.dm +++ b/code/_onclick/hud/screen_objects/sprint.dm @@ -5,7 +5,7 @@ name = "toggle sprint" icon = 'modular_citadel/icons/ui/screen_midnight.dmi' icon_state = "act_sprint" - layer = ABOVE_HUD_LAYER - 0.1 + mouse_over_pointer = MOUSE_HAND_POINTER var/mutable_appearance/flashy /atom/movable/screen/sprintbutton/Click() @@ -44,6 +44,7 @@ name = "sprint buffer" icon = 'icons/effects/progessbar.dmi' icon_state = "prog_bar_100" + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/sprint_buffer/Click() if(isliving(usr)) diff --git a/code/_onclick/hud/screen_objects/stamina.dm b/code/_onclick/hud/screen_objects/stamina.dm index b4c4807ec8..967bdb4f1f 100644 --- a/code/_onclick/hud/screen_objects/stamina.dm +++ b/code/_onclick/hud/screen_objects/stamina.dm @@ -1,19 +1,20 @@ -/datum/hud/var/atom/movable/screen/staminas/staminas -/datum/hud/var/atom/movable/screen/staminabuffer/staminabuffer +/datum/hud + var/atom/movable/screen/staminas/staminas + var/atom/movable/screen/staminabuffer/staminabuffer /atom/movable/screen/staminas icon = 'modular_citadel/icons/ui/screen_gen.dmi' name = "stamina" icon_state = "stamina0" screen_loc = ui_stamina - mouse_opacity = 1 + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/staminas/Click(location,control,params) if(isliving(usr)) var/mob/living/L = usr CONFIG_CACHE_ENTRY_AND_FETCH_VALUE(number/stamina_combat/buffer_max, buffer_max) - to_chat(L, "You have [L.getStaminaLoss()] stamina loss.
You have [L.getStaminaLoss()] stamina loss.") /atom/movable/screen/staminas/update_icon_state() var/mob/living/carbon/user = hud?.mymob diff --git a/code/_onclick/hud/screen_objects/vore.dm b/code/_onclick/hud/screen_objects/vore.dm index 91aa8f318c..1eea40f565 100644 --- a/code/_onclick/hud/screen_objects/vore.dm +++ b/code/_onclick/hud/screen_objects/vore.dm @@ -2,6 +2,7 @@ name = "toggle vore mode" icon = 'modular_citadel/icons/ui/screen_midnight.dmi' icon_state = "nom_off" + mouse_over_pointer = MOUSE_HAND_POINTER /atom/movable/screen/voretoggle/Click() if(usr != hud.mymob) diff --git a/code/datums/action.dm b/code/datums/action.dm index f7093b1ff6..e1e84c8f51 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -39,6 +39,7 @@ var/icon_icon = 'icons/mob/actions.dmi' /// This is the icon state for the icon that appears on the button var/button_icon_state = "default" + var/button_overlay_state /datum/action/New(Target) link_to(Target) @@ -177,6 +178,11 @@ ApplyIcon(button, force) + if(button_overlay_state) + button.cut_overlay(button.button_overlay) + button.button_overlay = mutable_appearance(icon = 'icons/mob/actions.dmi', icon_state = button_overlay_state) + button.add_overlay(button.button_overlay) + if(!IsAvailable(TRUE)) button.color = transparent_when_unavailable ? rgb(128,0,0,128) : rgb(128,0,0) else @@ -362,6 +368,8 @@ /datum/action/item_action/set_internals name = "Set Internals" + default_button_position = SCRN_OBJ_INSERT_FIRST + button_overlay_state = "ab_goldborder" /datum/action/item_action/set_internals/UpdateButton(atom/movable/screen/movable/action_button/button, status_only = FALSE, force) if(!..()) // no button available diff --git a/code/datums/components/combat_mode.dm b/code/datums/components/combat_mode.dm index 51661d5472..6fd2b2e4a7 100644 --- a/code/datums/components/combat_mode.dm +++ b/code/datums/components/combat_mode.dm @@ -182,6 +182,7 @@ name = "toggle combat mode" icon = 'modular_citadel/icons/ui/screen_midnight.dmi' icon_state = "combat_off" + mouse_over_pointer = MOUSE_HAND_POINTER var/mutable_appearance/flashy var/combat_on = FALSE ///Wheter combat mode is enabled or not, so we don't have to store a reference. diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index bf570ca885..5bd653556c 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -971,6 +971,7 @@ desc = "A magical strand of Durathread is wrapped around your neck, preventing you from breathing! Click this icon to remove the strand." icon_state = "his_grace" alerttooltipstyle = "hisgrace" + clickable_glow = TRUE /atom/movable/screen/alert/status_effect/strandling/Click(location, control, params) . = ..() diff --git a/code/datums/status_effects/wound_effects.dm b/code/datums/status_effects/wound_effects.dm index f5903bbc28..f8a51d2ad2 100644 --- a/code/datums/status_effects/wound_effects.dm +++ b/code/datums/status_effects/wound_effects.dm @@ -102,6 +102,7 @@ /atom/movable/screen/alert/status_effect/wound name = "Wounded" desc = "Your body has sustained serious damage, click here to inspect yourself." + clickable_glow = TRUE /atom/movable/screen/alert/status_effect/wound/Click() var/mob/living/carbon/C = usr diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 91999acac5..b672d79024 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -647,6 +647,11 @@ /// Gets or creates the relevant language holder. For mindless atoms, gets the local one. For atom with mind, gets the mind one. /atom/movable/proc/get_language_holder(get_minds = TRUE) + RETURN_TYPE(/datum/language_holder) + if(QDELING(src)) + CRASH("get_language_holder() called on a QDELing atom, \ + this will try to re-instantiate the language holder that's about to be deleted, which is bad.") + if(!language_holder) language_holder = new initial_language_holder(src) return language_holder diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index d852ce9850..8b7f265b11 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -291,7 +291,6 @@ Credit where due: W.update_label() if(plasmaman && !visualsOnly) //If we need to breathe from the plasma tank, we should probably start doing that H.internal = H.get_item_for_held_index(2) - H.update_internals_hud_icon(1) PDA.owner = H.real_name PDA.ownjob = "Assistant" PDA.update_label() diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm index f91a8acc60..fdcb47b275 100644 --- a/code/game/gamemodes/sandbox/h_sandbox.dm +++ b/code/game/gamemodes/sandbox/h_sandbox.dm @@ -176,7 +176,6 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) P.back.plane = ABOVE_HUD_PLANE P.update_inv_back() P.internal = P.back - P.update_internals_hud_icon(1) if("hsbscrubber") // This is beyond its normal capability but this is sandbox and you spawned one, I assume you need it var/obj/hsb = new/obj/machinery/portable_atmospherics/scrubber{volume_rate=50*ONE_ATMOSPHERE;on=1}(usr.loc) diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index 8c9caaf8c8..e2c276b207 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -14,6 +14,7 @@ use_power = IDLE_POWER_USE idle_power_usage = 2 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + mouse_over_pointer = MOUSE_HAND_POINTER /obj/machinery/button/Initialize(mapload, ndir = 0, built = 0) if(istext(id) && mapload && id[1] == "!") diff --git a/code/game/machinery/embedded_controller/access_controller.dm b/code/game/machinery/embedded_controller/access_controller.dm index dcfdeca502..e197c64f62 100644 --- a/code/game/machinery/embedded_controller/access_controller.dm +++ b/code/game/machinery/embedded_controller/access_controller.dm @@ -10,6 +10,7 @@ idle_power_usage = 2 active_power_usage = 4 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + mouse_over_pointer = MOUSE_HAND_POINTER var/idSelf /obj/machinery/doorButtons/attackby(obj/O, mob/user) diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 7959982ed0..9a096bf923 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -21,6 +21,7 @@ max_integrity = 250 integrity_failure = 0.4 armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 100, FIRE = 90, ACID = 30) + mouse_over_pointer = MOUSE_HAND_POINTER use_power = IDLE_POWER_USE idle_power_usage = 2 active_power_usage = 6 diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 1b7781abb8..9cc4da11b1 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -5,6 +5,7 @@ icon_state = "light1" base_icon_state = "light" desc = "Make dark." + mouse_over_pointer = MOUSE_HAND_POINTER var/area/area = null var/otherarea = null diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index ad18d1049e..0380c2d5ac 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -34,7 +34,6 @@ if(H.internal == src) to_chat(H, "You close [src] valve.") H.internal = null - H.update_internals_hud_icon(0) else if(!H.getorganslot(ORGAN_SLOT_BREATHING_TUBE)) if(HAS_TRAIT(H, TRAIT_NO_INTERNALS)) @@ -60,7 +59,6 @@ else to_chat(H, "You open [src] valve.") H.internal = src - H.update_internals_hud_icon(1) H.update_action_buttons_icon() diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index 0b8a7c5a30..1752009506 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -878,7 +878,6 @@ /datum/outfit/ghostcafe/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source) H.internal = H.get_item_for_held_index(1) - H.update_internals_hud_icon(1) /obj/item/storage/box/syndie_kit/chameleon/ghostcafe name = "ghost cafe costuming kit" diff --git a/code/modules/buildmode/buttons.dm b/code/modules/buildmode/buttons.dm index e29739f5ad..f3f1105a5c 100644 --- a/code/modules/buildmode/buttons.dm +++ b/code/modules/buildmode/buttons.dm @@ -1,5 +1,6 @@ /atom/movable/screen/buildmode icon = 'icons/misc/buildmode.dmi' + mouse_over_pointer = MOUSE_HAND_POINTER var/datum/buildmode/bd // If we don't do this, we get occluded by item action buttons layer = ABOVE_HUD_LAYER diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 86dc221654..47c9c61e34 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -793,10 +793,6 @@ else hud_used.healths.icon_state = "health7" -/mob/living/carbon/proc/update_internals_hud_icon(internal_state = 0) - if(hud_used && hud_used.internals) - hud_used.internals.icon_state = "internal[internal_state]" - /mob/living/carbon/update_stat() if(status_flags & GODMODE) return diff --git a/code/modules/mob/living/carbon/human/human_stripping.dm b/code/modules/mob/living/carbon/human/human_stripping.dm index 08db3fe552..db248959b9 100644 --- a/code/modules/mob/living/carbon/human/human_stripping.dm +++ b/code/modules/mob/living/carbon/human/human_stripping.dm @@ -285,12 +285,9 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list( if(carbon_source.internal) carbon_source.internal = null - // This isn't meant to be FALSE, it correlates to the icon's name. - carbon_source.update_internals_hud_icon(0) else if (!QDELETED(item)) if(internals || carbon_source.getorganslot(ORGAN_SLOT_BREATHING_TUBE)) carbon_source.internal = item - carbon_source.update_internals_hud_icon(1) carbon_source.visible_message( span_danger("[user] [isnull(carbon_source.internal) ? "closes": "opens"] the valve on [source]'s [item.name]."), diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index ace5cbaa6f..29866459d8 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -253,7 +253,6 @@ if((C.flags_inv & (HIDEHAIR|HIDEFACIALHAIR)) || (initial(C.flags_inv) & (HIDEHAIR|HIDEFACIALHAIR))) update_hair() if(toggle_off && internal && !getorganslot(ORGAN_SLOT_BREATHING_TUBE)) - update_internals_hud_icon(0) internal = null if(C.flags_inv & HIDEEYES) update_inv_glasses() diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index 0235be3268..a6670b186a 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -69,7 +69,6 @@ H.equipOutfit(O, visualsOnly) H.internal = H.get_item_for_held_index(2) - H.update_internals_hud_icon(1) return FALSE /datum/species/plasmaman/random_name(gender,unique,lastname) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 9b2db8b106..081e19b6c6 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -329,12 +329,9 @@ if(internal) if(internal.loc != src) internal = null - update_internals_hud_icon(0) else if (!internals && !getorganslot(ORGAN_SLOT_BREATHING_TUBE)) internal = null - update_internals_hud_icon(0) else - update_internals_hud_icon(1) . = internal.remove_air_volume(volume_needed) if(!.) return FALSE //to differentiate between no internals and active, but empty internals diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index e6e0abe111..53648fbba6 100644 Binary files a/icons/mob/actions.dmi and b/icons/mob/actions.dmi differ
\ +
Your stamina buffer is [round((L.stamina_buffer / buffer_max) * 100, 0.1)]% full.