From 329921639a93ed95d6bdf778d25eb7595be9c134 Mon Sep 17 00:00:00 2001 From: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Date: Sat, 3 Dec 2022 21:01:08 -0600 Subject: [PATCH] Rewrites how action buttons icons are generated, makes them layer nicer. Allows observers to see a mob's action buttons. (#71339) ## About The Pull Request - Rewrites how action button icons are generated. - Prior, generated an action button icon was fairly simplistic and didn't allow for many changes. Someone recently added the option for overlays to be generated over action buttons, but the framework was very weak. - Now, action button icon generation is split across multiple procs, like atom icon updates. - The background of action buttons are underlays - The actual icon of the action button is the icon and icon state of the action button movable - The rim / border of the button is an overlay, layered overtop the button. - Allows observers to see what action buttons a mob has. They even update in real time! And no, the observers cannot click on them. ## Why It's Good For The Game - Runechat text of action buttons are no longer hidden behind the actual icon. This was very ugly with cooldown actions, as the cooldown text was hidden behind a lot of spell icons. - Cuts down on a lot of icon duplication. - Gives much finer control over action button icons - Saves a bit of processing from generating full action button icons when not necessary. Not implemented in many places, but is in some. ![image](https://user-images.githubusercontent.com/51863163/202816617-342e87e6-2cc6-488e-9af2-4b2053dc3dc6.png) ![image](https://user-images.githubusercontent.com/51863163/202816604-da8d4821-0e2b-45af-b289-7442367f98ce.png) ## Changelog :cl: Melbert add: Observers can now see what action buttons an observed mob has. No, you can't click them. And no it doesn't show EVERY action. refactor: Refactored how action button icons are generated. Some actions will now use a colored border when active instead of just turning green. Cooldown text will also appear on the top layer of actions too. If you see any funky lookin' icons (namely their borders), let me know. refactor: Bluespace Golem's teleport action is now a cooldown action. fix: Construct actions go to the middle of the screen like expected. /:cl: --- code/__DEFINES/actions.dm | 8 + code/__DEFINES/dcs/signals/signals_action.dm | 6 + code/__DEFINES/is_helpers.dm | 1 - code/__HELPERS/roundend.dm | 1 + code/_onclick/hud/action_button.dm | 100 ++++++-- code/_onclick/hud/hud.dm | 13 +- code/controllers/subsystem/augury.dm | 12 +- code/controllers/subsystem/vote.dm | 1 + code/datums/actions/action.dm | 236 +++++++++++++----- code/datums/actions/cooldown_action.dm | 104 +++++--- code/datums/actions/innate_action.dm | 13 +- code/datums/actions/item_action.dm | 45 ++-- code/datums/actions/items/beam_rifle.dm | 6 +- code/datums/actions/items/beserk.dm | 3 +- code/datums/actions/items/boot_dash.dm | 2 +- code/datums/actions/items/cult_dagger.dm | 4 +- code/datums/actions/items/set_internals.dm | 12 +- code/datums/actions/items/stealth_box.dm | 3 +- code/datums/actions/items/summon_stickmen.dm | 2 +- code/datums/actions/items/toggles.dm | 26 +- code/datums/actions/items/vortex_recall.dm | 2 +- code/datums/actions/mobs/adjust_vision.dm | 3 +- code/datums/actions/mobs/blood_warp.dm | 2 +- code/datums/actions/mobs/charge.dm | 6 +- code/datums/actions/mobs/dash.dm | 2 +- code/datums/actions/mobs/fire_breath.dm | 4 +- code/datums/actions/mobs/lava_swoop.dm | 2 +- code/datums/actions/mobs/meteors.dm | 2 +- code/datums/actions/mobs/mobcooldown.dm | 2 +- code/datums/actions/mobs/projectileattack.dm | 16 +- .../actions/mobs/sequences/dash_attack.dm | 2 +- .../actions/mobs/sequences/projectile.dm | 2 +- code/datums/actions/mobs/sign_language.dm | 23 +- code/datums/actions/mobs/small_sprite.dm | 9 +- code/datums/actions/mobs/transform_weapon.dm | 2 +- code/datums/brain_damage/imaginary_friend.dm | 35 ++- code/datums/components/action_item_overlay.dm | 73 ++++++ code/datums/components/anti_magic.dm | 3 - code/datums/components/mind_linker.dm | 5 +- code/datums/components/seclight_attachable.dm | 2 +- code/datums/components/sign_language.dm | 1 - code/datums/dash_weapon.dm | 6 +- code/datums/holocall.dm | 2 +- code/datums/martial/krav_maga.dm | 6 +- code/datums/mutations/_mutations.dm | 6 +- code/datums/mutations/cold.dm | 5 +- code/datums/mutations/sight.dm | 2 +- code/datums/mutations/tongue_spike.dm | 4 +- code/datums/mutations/webbing.dm | 2 +- code/game/atoms.dm | 2 +- code/game/gamemodes/objective.dm | 2 +- .../machinery/computer/camera_advanced.dm | 8 +- .../machinery/porta_turret/portable_turret.dm | 4 +- code/game/objects/items.dm | 8 +- code/game/objects/items/RCL.dm | 4 +- code/game/objects/items/chainsaw.dm | 2 +- code/game/objects/items/defib.dm | 2 +- code/game/objects/items/devices/flashlight.dm | 2 +- code/game/objects/items/granters/_granters.dm | 1 - code/game/objects/items/granters/oragami.dm | 10 +- code/game/objects/items/scrolls.dm | 2 +- code/game/objects/items/tanks/jetpack.dm | 2 +- .../construction_actions.dm | 2 +- .../antagonists/_common/antag_datum.dm | 1 + .../abductor/equipment/abduction_gear.dm | 2 +- .../antagonists/abductor/machinery/camera.dm | 12 +- code/modules/antagonists/blob/blob.dm | 2 +- .../changeling/cellular_emporium.dm | 3 +- .../changeling/changeling_power.dm | 3 +- .../changeling/powers/fakedeath.dm | 23 +- .../changeling/powers/pheromone_receptors.dm | 2 +- code/modules/antagonists/cult/blood_magic.dm | 8 +- code/modules/antagonists/cult/cult.dm | 4 +- code/modules/antagonists/cult/cult_comms.dm | 41 +-- code/modules/antagonists/cult/cult_items.dm | 4 +- .../antagonists/cult/rune_spawn_action.dm | 8 +- .../antagonists/disease/disease_abilities.dm | 6 +- .../antagonists/disease/disease_mob.dm | 2 +- .../heretic/heretic_living_heart.dm | 4 +- .../antagonists/heretic/knowledge/ash_lore.dm | 2 +- .../heretic/magic/aggressive_spread.dm | 5 +- .../heretic/magic/ash_ascension.dm | 15 +- .../antagonists/heretic/magic/ash_jaunt.dm | 5 +- .../antagonists/heretic/magic/blood_cleave.dm | 5 +- .../antagonists/heretic/magic/blood_siphon.dm | 5 +- .../heretic/magic/eldritch_blind.dm | 3 +- .../heretic/magic/eldritch_emplosion.dm | 3 +- .../heretic/magic/eldritch_shapeshift.dm | 3 +- .../heretic/magic/eldritch_telepathy.dm | 3 +- .../antagonists/heretic/magic/expand_sight.dm | 5 +- .../antagonists/heretic/magic/fire_blast.dm | 5 +- .../heretic/magic/flesh_ascension.dm | 10 +- .../heretic/magic/flesh_surgery.dm | 5 +- .../heretic/magic/furious_steel.dm | 8 +- .../heretic/magic/madness_touch.dm | 5 +- .../antagonists/heretic/magic/manse_link.dm | 5 +- .../antagonists/heretic/magic/mansus_grasp.dm | 5 +- .../antagonists/heretic/magic/mirror_walk.dm | 9 +- .../heretic/magic/nightwatcher_rebirth.dm | 5 +- .../antagonists/heretic/magic/realignment.dm | 19 +- .../heretic/magic/rust_construction.dm | 3 +- .../antagonists/heretic/magic/rust_wave.dm | 10 +- .../antagonists/heretic/magic/shadow_cloak.dm | 5 +- .../heretic/magic/void_cold_cone.dm | 3 +- .../antagonists/heretic/magic/void_phase.dm | 5 +- .../antagonists/heretic/magic/void_pull.dm | 5 +- .../heretic/structures/carving_knife.dm | 5 +- code/modules/antagonists/revenant/revenant.dm | 10 +- .../revenant/revenant_abilities.dm | 8 +- .../antagonists/space_dragon/carp_rift.dm | 3 +- .../traitor/equipment/Malf_Modules.dm | 11 +- .../traitor/equipment/module_picker.dm | 2 +- code/modules/clothing/chameleon.dm | 18 +- code/modules/clothing/clothing.dm | 2 +- .../clothing/glasses/engine_goggles.dm | 2 +- code/modules/clothing/masks/_masks.dm | 2 +- code/modules/clothing/masks/gasmask.dm | 6 +- code/modules/clothing/shoes/magboots.dm | 2 +- .../clothing/spacesuits/_spacesuits.dm | 2 +- code/modules/clothing/spacesuits/plasmamen.dm | 2 +- code/modules/clothing/suits/toggles.dm | 4 +- code/modules/mafia/controller.dm | 2 +- .../equipment/monster_organs/monster_organ.dm | 2 +- .../modules/mining/lavaland/megafauna_loot.dm | 12 +- code/modules/mining/lavaland/tendril_loot.dm | 3 +- code/modules/mining/minebot.dm | 3 +- code/modules/mob/dead/observer/observer.dm | 1 + .../living/carbon/alien/adult/alien_powers.dm | 9 +- code/modules/mob/living/carbon/carbon.dm | 2 +- .../mob/living/carbon/human/inventory.dm | 4 +- .../carbon/human/species_types/golems.dm | 34 +-- .../carbon/human/species_types/jellypeople.dm | 199 ++++++++------- .../carbon/human/species_types/monkeys.dm | 10 +- code/modules/mob/living/carbon/inventory.dm | 6 +- code/modules/mob/living/death.dm | 2 +- code/modules/mob/living/init_signals.dm | 4 +- code/modules/mob/living/silicon/ai/ai.dm | 8 +- .../modules/mob/living/silicon/robot/robot.dm | 2 +- .../mob/living/silicon/robot/robot_model.dm | 16 +- .../mob/living/simple_animal/bot/vibebot.dm | 2 +- .../mob/living/simple_animal/constructs.dm | 10 +- .../living/simple_animal/heretic_monsters.dm | 2 +- .../hostile/bosses/paperwizard.dm | 4 +- .../simple_animal/hostile/giant_spider.dm | 22 +- .../mob/living/simple_animal/hostile/goose.dm | 2 +- .../living/simple_animal/hostile/hivebot.dm | 1 + .../hostile/megafauna/_megafauna.dm | 2 +- .../hostile/megafauna/colossus.dm | 2 +- .../hostile/megafauna/hierophant.dm | 10 +- .../simple_animal/hostile/megafauna/legion.dm | 6 +- .../hostile/megafauna/wendigo.dm | 6 +- .../mob/living/simple_animal/hostile/mimic.dm | 1 + .../hostile/mining_mobs/elites/elite.dm | 27 +- .../hostile/mining_mobs/goldgrub.dm | 1 + .../simple_animal/hostile/netherworld.dm | 1 + .../mob/living/simple_animal/hostile/ooze.dm | 12 +- .../living/simple_animal/hostile/regalrat.dm | 6 +- .../simple_animal/hostile/retaliate/clown.dm | 9 +- .../living/simple_animal/hostile/vatbeast.dm | 14 +- .../simple_animal/hostile/wumborian_fugu.dm | 3 +- .../mob/living/simple_animal/slime/life.dm | 2 +- .../mob/living/simple_animal/slime/powers.dm | 3 +- code/modules/mod/mod_actions.dm | 19 +- code/modules/mod/modules/module_pathfinder.dm | 3 +- .../computers/item/computer.dm | 2 +- code/modules/pai/actions.dm | 9 +- code/modules/power/singularity/emitter.dm | 4 +- .../projectiles/guns/ballistic/automatic.dm | 2 +- .../reagents/pyrotechnic_reagents.dm | 4 +- .../xenobiology/crossbreeding/_clothing.dm | 4 +- .../research/xenobiology/xenobio_camera.dm | 14 +- code/modules/shuttle/navigation_computer.dm | 4 +- code/modules/spells/spell.dm | 49 ++-- .../spell_types/aoe_spell/area_conversion.dm | 4 +- .../spell_types/aoe_spell/magic_missile.dm | 2 + .../spells/spell_types/aoe_spell/repulse.dm | 3 +- .../spells/spell_types/charged/_charged.dm | 9 +- .../spells/spell_types/conjure/constructs.dm | 4 +- .../spells/spell_types/conjure/cult_turfs.dm | 8 +- .../spell_types/conjure/invisible_chair.dm | 3 +- .../spell_types/conjure/invisible_wall.dm | 3 +- .../spells/spell_types/conjure/soulstone.dm | 4 +- .../spell_types/conjure_item/invisible_box.dm | 3 +- .../spell_types/conjure_item/snowball.dm | 2 +- .../spells/spell_types/jaunt/bloodcrawl.dm | 8 +- .../spell_types/jaunt/ethereal_jaunt.dm | 4 +- .../spells/spell_types/jaunt/shadow_walk.dm | 5 +- .../spell_types/list_target/telepathy.dm | 2 +- .../spells/spell_types/pointed/_pointed.dm | 10 +- .../spell_types/pointed/abyssal_gaze.dm | 4 +- .../spells/spell_types/pointed/dominate.dm | 4 +- .../spells/spell_types/pointed/finger_guns.dm | 4 +- .../spells/spell_types/pointed/fireball.dm | 1 - .../spell_types/pointed/lightning_bolt.dm | 4 +- .../spells/spell_types/pointed/spell_cards.dm | 1 - .../spells/spell_types/pointed/swap.dm | 6 + .../spell_types/projectile/juggernaut.dm | 4 +- .../spells/spell_types/self/forcewall.dm | 7 +- .../spells/spell_types/self/lichdom.dm | 2 +- .../spells/spell_types/self/mime_vow.dm | 5 +- code/modules/spells/spell_types/self/smoke.dm | 2 + .../spells/spell_types/self/voice_of_god.dm | 2 +- .../spells/spell_types/touch/_touch.dm | 9 +- code/modules/surgery/dental_implant.dm | 2 +- .../organs/external/wings/functional_wings.dm | 2 +- code/modules/vehicles/mecha/combat/durand.dm | 2 +- code/modules/vehicles/mecha/combat/gygax.dm | 2 +- .../modules/vehicles/mecha/combat/marauder.dm | 3 +- code/modules/vehicles/mecha/combat/phazon.dm | 4 +- .../vehicles/mecha/combat/savannah_ivanov.dm | 8 +- code/modules/vehicles/mecha/mecha_actions.dm | 8 +- code/modules/vehicles/mecha/working/clarke.dm | 4 +- code/modules/vehicles/vehicle_actions.dm | 6 +- .../wiremod/shell/brain_computer_interface.dm | 16 +- icons/hud/actions.dmi | Bin 8581 -> 8689 bytes icons/mob/actions/actions_cult.dmi | Bin 27611 -> 27650 bytes icons/mob/actions/actions_ecult.dmi | Bin 72325 -> 72659 bytes icons/mob/actions/actions_mime.dmi | Bin 3947 -> 3557 bytes icons/mob/actions/actions_spells.dmi | Bin 39952 -> 31659 bytes icons/mob/actions/backgrounds.dmi | Bin 10107 -> 12482 bytes tgstation.dme | 1 + 221 files changed, 1232 insertions(+), 781 deletions(-) create mode 100644 code/datums/components/action_item_overlay.dm diff --git a/code/__DEFINES/actions.dm b/code/__DEFINES/actions.dm index eb1edc8d623..971e3441577 100644 --- a/code/__DEFINES/actions.dm +++ b/code/__DEFINES/actions.dm @@ -25,3 +25,11 @@ DEFINE_BITFIELD(check_flags, list( #define PANEL_DISPLAY_STATUS "status" /// The name shown in the stat panel. #define PANEL_DISPLAY_NAME "name" + +#define ACTION_BUTTON_DEFAULT_BACKGROUND "_use_ui_default_background" + +#define UPDATE_BUTTON_NAME (1<<0) +#define UPDATE_BUTTON_ICON (1<<1) +#define UPDATE_BUTTON_BACKGROUND (1<<2) +#define UPDATE_BUTTON_OVERLAY (1<<3) +#define UPDATE_BUTTON_STATUS (1<<4) diff --git a/code/__DEFINES/dcs/signals/signals_action.dm b/code/__DEFINES/dcs/signals/signals_action.dm index ee98b5a4eb9..7e1f7a19d0f 100644 --- a/code/__DEFINES/dcs/signals/signals_action.dm +++ b/code/__DEFINES/dcs/signals/signals_action.dm @@ -6,8 +6,14 @@ #define COMPONENT_ACTION_BLOCK_TRIGGER (1<<0) /// From /datum/action/Grant(): (mob/grant_to) #define COMSIG_ACTION_GRANTED "action_grant" +/// From /datum/action/Grant(): (datum/action) +#define COMSIG_MOB_GRANTED_ACTION "mob_action_grant" /// From /datum/action/Remove(): (mob/removed_from) #define COMSIG_ACTION_REMOVED "action_removed" +/// From /datum/action/Remove(): (datum/action) +#define COMSIG_MOB_REMOVED_ACTION "mob_action_removed" +/// From /datum/action/apply_button_overlay() +#define COMSIG_ACTION_OVERLAY_APPLY "action_overlay_applied" // Cooldown action signals diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 81cf2a50678..25708399de0 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -81,7 +81,6 @@ GLOBAL_LIST_INIT(turfs_openspace, typecacheof(list( #define isflyperson(A) (is_species(A, /datum/species/fly)) #define isjellyperson(A) (is_species(A, /datum/species/jelly)) #define isslimeperson(A) (is_species(A, /datum/species/jelly/slime)) -#define isluminescent(A) (is_species(A, /datum/species/jelly/luminescent)) #define iszombie(A) (is_species(A, /datum/species/zombie)) #define isskeleton(A) (is_species(A, /datum/species/skeleton)) #define ismoth(A) (is_species(A, /datum/species/moth)) diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index 3afbada9a62..78ad25e6978 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -651,6 +651,7 @@ /datum/action/report name = "Show roundend report" button_icon_state = "round_end" + show_to_observers = FALSE /datum/action/report/Trigger(trigger_flags) if(owner && GLOB.common_report && SSticker.current_state == GAME_STATE_FINISHED) diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm index 04b5a02be29..7562721f678 100644 --- a/code/_onclick/hud/action_button.dm +++ b/code/_onclick/hud/action_button.dm @@ -1,14 +1,16 @@ -#define ACTION_BUTTON_DEFAULT_BACKGROUND "default" - /atom/movable/screen/movable/action_button var/datum/action/linked_action var/datum/hud/our_hud var/actiontooltipstyle = "" screen_loc = null - var/button_icon_state - var/appearance_cache + /// The icon state of our active overlay, used to prevent re-applying identical overlays + var/active_overlay_icon_state + /// The icon state of our active underlay, used to prevent re-applying identical underlays + var/active_underlay_icon_state + /// The overlay we have overtop our button 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 @@ -29,15 +31,17 @@ return ..() /atom/movable/screen/movable/action_button/proc/can_use(mob/user) + if(isobserver(user)) + var/mob/dead/observer/dead_mob = user + if(dead_mob.observetarget) // Observers can only click on action buttons if they're not observing something + return FALSE + if(linked_action) if(linked_action.viewers[user.hud_used]) return TRUE return FALSE - else if (isobserver(user)) - var/mob/dead/observer/O = user - return !O.observetarget - else - return TRUE + + return TRUE /atom/movable/screen/movable/action_button/Click(location,control,params) if (!can_use(usr)) @@ -145,20 +149,38 @@ return user.client.prefs.action_buttons_screen_locs -= "[name]_[id]" +/** + * This is a silly proc used in hud code code to determine what icon and icon state we should be using + * for hud elements (such as action buttons) that don't have their own icon and icon state set. + * + * It returns a list, which is pretty much just a struct of info + */ /datum/hud/proc/get_action_buttons_icons() . = list() .["bg_icon"] = ui_style .["bg_state"] = "template" + .["bg_state_active"] = "template_active" -//see human and alien hud for specific implementations. +/** + * Updates all action buttons this mob has. + * + * Arguments: + * * update_flags - Which flags of the action should we update + * * force - Force buttons update even if the given button icon state has not changed + */ +/mob/proc/update_mob_action_buttons(update_flags = ALL, force = FALSE) + for(var/datum/action/current_action as anything in actions) + current_action.build_all_button_icons(update_flags, force) -/mob/proc/update_action_buttons_icon(status_only = FALSE) - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtons(status_only) - -//This is the proc used to update all the action buttons. -/mob/proc/update_action_buttons(reload_screen) +/** + * This proc handles adding all of the mob's actions to their screen + * + * If you just need to update existing buttons, use [/mob/proc/update_mob_action_buttons]! + * + * Arguments: + * * update_flags - reload_screen - bool, if TRUE, this proc will add the button to the screen of the passed mob as well + */ +/mob/proc/update_action_buttons(reload_screen = FALSE) if(!hud_used || !client) return @@ -167,7 +189,7 @@ for(var/datum/action/action as anything in actions) var/atom/movable/screen/movable/action_button/button = action.viewers[hud_used] - action.UpdateButtons() + action.build_all_button_icons() if(reload_screen) client.screen += button @@ -176,6 +198,48 @@ // This holds the logic for the palette buttons hud_used.palette_actions.refresh_actions() +/** + * Show (most) of the another mob's action buttons to this mob + * + * Used for observers viewing another mob's screen + */ +/mob/proc/show_other_mob_action_buttons(mob/take_from) + if(!hud_used || !client) + return + + for(var/datum/action/action as anything in take_from.actions) + if(!action.show_to_observers) + continue + action.GiveAction(src) + RegisterSignal(take_from, COMSIG_MOB_GRANTED_ACTION, PROC_REF(on_observing_action_granted)) + RegisterSignal(take_from, COMSIG_MOB_REMOVED_ACTION, PROC_REF(on_observing_action_removed)) + +/** + * Hide another mob's action buttons from this mob + * + * Used for observers viewing another mob's screen + */ +/mob/proc/hide_other_mob_action_buttons(mob/take_from) + for(var/datum/action/action as anything in take_from.actions) + action.HideFrom(src) + UnregisterSignal(take_from, list(COMSIG_MOB_GRANTED_ACTION, COMSIG_MOB_REMOVED_ACTION)) + +/// Signal proc for [COMSIG_MOB_GRANTED_ACTION] - If we're viewing another mob's action buttons, +/// we need to update with any newly added buttons granted to the mob. +/mob/proc/on_observing_action_granted(mob/living/source, datum/action/action) + SIGNAL_HANDLER + + if(!action.show_to_observers) + return + action.GiveAction(src) + +/// Signal proc for [COMSIG_MOB_REMOVED_ACTION] - If we're viewing another mob's action buttons, +/// we need to update with any removed buttons from the mob. +/mob/proc/on_observing_action_removed(mob/living/source, datum/action/action) + SIGNAL_HANDLER + + action.HideFrom(src) + /atom/movable/screen/button_palette desc = "Drag buttons to move them
Shift-click any button to reset it
Alt-click this to reset all buttons" icon = 'icons/hud/64x16_actions.dmi' diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index c44a4d8096c..c8b422a1164 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -272,7 +272,13 @@ GLOBAL_LIST_INIT(available_ui_styles, list( hud_used = new_hud new_hud.build_action_groups() -//Version denotes which style should be displayed. blank or 0 means "next version" +/** + * Shows this hud's hud to some mob + * + * Arguments + * * version - denotes which style should be displayed. blank or 0 means "next version" + * * viewmob - what mob to show the hud to. Can be this hud's mob, can be another mob, can be null (will use this hud's mob if so) + */ /datum/hud/proc/show_hud(version = 0, mob/viewmob) if(!ismob(mymob)) return FALSE @@ -341,7 +347,9 @@ GLOBAL_LIST_INIT(available_ui_styles, list( hud_version = display_hud_version persistent_inventory_update(screenmob) - screenmob.update_action_buttons(1) + // Gives all of the actions the screenmob owes to their hud + screenmob.update_action_buttons(TRUE) + // Handles alerts - the things on the right side of the screen reorganize_alerts(screenmob) screenmob.reload_fullscreen() update_parallax_pref(screenmob) @@ -353,6 +361,7 @@ GLOBAL_LIST_INIT(available_ui_styles, list( show_hud(hud_version, M) else if (viewmob.hud_used) viewmob.hud_used.plane_masters_update() + viewmob.show_other_mob_action_buttons(mymob) SEND_SIGNAL(screenmob, COMSIG_MOB_HUD_REFRESHED, src) return TRUE diff --git a/code/controllers/subsystem/augury.dm b/code/controllers/subsystem/augury.dm index 135b4a25dde..22d5003a7ec 100644 --- a/code/controllers/subsystem/augury.dm +++ b/code/controllers/subsystem/augury.dm @@ -59,9 +59,8 @@ SUBSYSTEM_DEF(augury) /datum/action/innate/augury name = "Auto Follow Debris" - icon_icon = 'icons/obj/meteor.dmi' + button_icon = 'icons/obj/meteor.dmi' button_icon_state = "flaming" - background_icon_state = ACTION_BUTTON_DEFAULT_BACKGROUND /datum/action/innate/augury/Destroy() if(owner) @@ -72,17 +71,8 @@ SUBSYSTEM_DEF(augury) SSaugury.watchers += owner to_chat(owner, span_notice("You are now auto-following debris.")) active = TRUE - UpdateButtons() /datum/action/innate/augury/Deactivate() SSaugury.watchers -= owner to_chat(owner, span_notice("You are no longer auto-following debris.")) active = FALSE - UpdateButtons() - -/datum/action/innate/augury/UpdateButton(atom/movable/screen/movable/action_button/button, status_only = FALSE, force) - ..() - if(active) - button.icon_state = "template_active" - else - button.icon_state = "template" diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index edfd08cb36a..f0b9cd45a7b 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -310,6 +310,7 @@ SUBSYSTEM_DEF(vote) /datum/action/vote name = "Vote!" button_icon_state = "vote" + show_to_observers = FALSE /datum/action/vote/IsAvailable(feedback = FALSE) return TRUE // Democracy is always available to the free people diff --git a/code/datums/actions/action.dm b/code/datums/actions/action.dm index 04e8a44a086..9f427ca4f7c 100644 --- a/code/datums/actions/action.dm +++ b/code/datums/actions/action.dm @@ -6,7 +6,7 @@ /datum/action /// The name of the action var/name = "Generic Action" - /// The description of what the action does + /// The description of what the action does, shown in button tooltips var/desc /// The target the action is attached to. If the target datum is deleted, the action is as well. /// Set in New() via the proc link_to(). PLEASE set a target if you're making an action @@ -20,21 +20,32 @@ var/owner_has_control = TRUE /// Flags that will determine of the owner / user of the action can... use the action var/check_flags = NONE - /// The style the button's tooltips appear to be - var/buttontooltipstyle = "" - /// Whether the button becomes transparent when it can't be used or just reddened + /// Whether the button becomes transparent when it can't be used, or just reddened var/transparent_when_unavailable = TRUE - /// This is the file for the BACKGROUND icon of the button - var/button_icon = 'icons/mob/actions/backgrounds.dmi' - /// This is the icon state state for the BACKGROUND icon of the button - var/background_icon_state = ACTION_BUTTON_DEFAULT_BACKGROUND - /// This is the file for the icon that appears OVER the button background - var/icon_icon = 'icons/hud/actions.dmi' - /// This is the icon state for the icon that appears OVER the button background - var/button_icon_state = "default" - var/button_overlay_state ///List of all mobs that are viewing our action button -> A unique movable for them to view. var/list/viewers = list() + /// If TRUE, this action button will be shown to observers / other mobs who view from this action's owner's eyes. + /// Used in [/mob/proc/show_other_mob_action_buttons] + var/show_to_observers = TRUE + + /// The style the button's tooltips appear to be + var/buttontooltipstyle = "" + + /// This is the file for the BACKGROUND underlay icon of the button + var/background_icon = 'icons/mob/actions/backgrounds.dmi' + /// This is the icon state state for the BACKGROUND underlay icon of the button + /// (If set to ACTION_BUTTON_DEFAULT_BACKGROUND, uses the hud's default background) + var/background_icon_state = ACTION_BUTTON_DEFAULT_BACKGROUND + + /// This is the file for the icon that appears on the button + var/button_icon = 'icons/hud/actions.dmi' + /// This is the icon state for the icon that appears on the button + var/button_icon_state = "default" + + /// This is the file for any FOREGROUND overlay icons on the button (such as borders) + var/overlay_icon = 'icons/mob/actions/backgrounds.dmi' + /// This is the icon state for any FOREGROUND overlay icons on the button (such as borders) + var/overlay_icon_state /datum/action/New(Target) link_to(Target) @@ -45,7 +56,7 @@ RegisterSignal(target, COMSIG_PARENT_QDELETING, PROC_REF(clear_ref), override = TRUE) if(isatom(target)) - RegisterSignal(target, COMSIG_ATOM_UPDATED_ICON, PROC_REF(update_icon_on_signal)) + RegisterSignal(target, COMSIG_ATOM_UPDATED_ICON, PROC_REF(on_target_icon_update)) if(istype(target, /datum/mind)) RegisterSignal(target, COMSIG_MIND_TRANSFERRED, PROC_REF(on_target_mind_swapped)) @@ -76,19 +87,20 @@ return Remove(owner) SEND_SIGNAL(src, COMSIG_ACTION_GRANTED, grant_to) + SEND_SIGNAL(grant_to, COMSIG_MOB_GRANTED_ACTION, src) owner = grant_to RegisterSignal(owner, COMSIG_PARENT_QDELETING, PROC_REF(clear_ref), override = TRUE) // Register some signals based on our check_flags // so that our button icon updates when relevant if(check_flags & AB_CHECK_CONSCIOUS) - RegisterSignal(owner, COMSIG_MOB_STATCHANGE, PROC_REF(update_icon_on_signal)) + RegisterSignal(owner, COMSIG_MOB_STATCHANGE, PROC_REF(update_status_on_signal)) if(check_flags & AB_CHECK_IMMOBILE) - RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_IMMOBILIZED), PROC_REF(update_icon_on_signal)) + RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_IMMOBILIZED), PROC_REF(update_status_on_signal)) if(check_flags & AB_CHECK_HANDS_BLOCKED) - RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_HANDS_BLOCKED), PROC_REF(update_icon_on_signal)) + RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_HANDS_BLOCKED), PROC_REF(update_status_on_signal)) if(check_flags & AB_CHECK_LYING) - RegisterSignal(owner, COMSIG_LIVING_SET_BODY_POSITION, PROC_REF(update_icon_on_signal)) + RegisterSignal(owner, COMSIG_LIVING_SET_BODY_POSITION, PROC_REF(update_status_on_signal)) if(owner_has_control) GiveAction(grant_to) @@ -106,6 +118,7 @@ if(owner) SEND_SIGNAL(src, COMSIG_ACTION_REMOVED, owner) + SEND_SIGNAL(owner, COMSIG_MOB_REMOVED_ACTION, src) UnregisterSignal(owner, COMSIG_PARENT_QDELETING) // Clean up our check_flag signals @@ -156,49 +169,128 @@ return FALSE return TRUE -/datum/action/proc/UpdateButtons(status_only, force) - for(var/datum/hud/hud in viewers) - var/atom/movable/screen/movable/button = viewers[hud] - UpdateButton(button, status_only, force) +/// Builds / updates all buttons we have shared or given out +/datum/action/proc/build_all_button_icons(update_flags = ALL, force) + for(var/datum/hud/hud as anything in viewers) + build_button_icon(viewers[hud], update_flags, force) -/datum/action/proc/UpdateButton(atom/movable/screen/movable/action_button/button, status_only = FALSE, force = FALSE) +/** + * Builds the icon of the button. + * + * Concept: + * - Underlay (Background icon) + * - Icon (button icon) + * - Maptext + * - Overlay (Background border) + * + * button - which button we are modifying the icon of + * force - whether we're forcing a full update + */ +/datum/action/proc/build_button_icon(atom/movable/screen/movable/action_button/button, update_flags = ALL, force = FALSE) if(!button) return - if(!status_only) - button.name = name + + if(update_flags & UPDATE_BUTTON_NAME) + update_button_name(button, force) + + if(update_flags & UPDATE_BUTTON_BACKGROUND) + apply_button_background(button, force) + + if(update_flags & UPDATE_BUTTON_ICON) + apply_button_icon(button, force) + + if(update_flags & UPDATE_BUTTON_OVERLAY) + apply_button_overlay(button, force) + + if(update_flags & UPDATE_BUTTON_STATUS) + update_button_status(button, force) + +/** + * Updates the name and description of the button to match our action name and discription. + * + * current_button - what button are we editing? + * force - whether an update is forced regardless of existing status + */ +/datum/action/proc/update_button_name(atom/movable/screen/movable/action_button/button, force = FALSE) + button.name = name + if(desc) button.desc = desc - if(owner?.hud_used && background_icon_state == ACTION_BUTTON_DEFAULT_BACKGROUND) - var/list/settings = owner.hud_used.get_action_buttons_icons() - if(button.icon != settings["bg_icon"]) - button.icon = settings["bg_icon"] - if(button.icon_state != settings["bg_state"]) - button.icon_state = settings["bg_state"] - else - if(button.icon != button_icon) - button.icon = button_icon - if(button.icon_state != background_icon_state) - button.icon_state = background_icon_state - ApplyIcon(button, force) +/** + * Creates the background underlay for the button + * + * current_button - what button are we editing? + * force - whether an update is forced regardless of existing status + */ +/datum/action/proc/apply_button_background(atom/movable/screen/movable/action_button/current_button, force = FALSE) + if(!background_icon || !background_icon_state || (current_button.active_underlay_icon_state == background_icon_state && !force)) + return - if(button_overlay_state) - button.cut_overlay(button.button_overlay) - button.button_overlay = mutable_appearance(icon = 'icons/hud/actions.dmi', icon_state = button_overlay_state) - button.add_overlay(button.button_overlay) + // What icons we use for our background + var/list/icon_settings = list( + // The icon file + "bg_icon" = background_icon, + // The icon state, if is_action_active() returns FALSE + "bg_state" = background_icon_state, + // The icon state, if is_action_active() returns TRUE + "bg_state_active" = background_icon_state, + ) - var/available = IsAvailable() - if(available) - button.color = rgb(255,255,255,255) + // If background_icon_state is ACTION_BUTTON_DEFAULT_BACKGROUND instead use our hud's action button scheme + if(background_icon_state == ACTION_BUTTON_DEFAULT_BACKGROUND && owner?.hud_used) + icon_settings = owner.hud_used.get_action_buttons_icons() + + // Determine which icon to use + var/used_icon_key = is_action_active(current_button) ? "bg_state_active" : "bg_state" + + // Make the underlay + current_button.underlays.Cut() + current_button.underlays += image(icon = icon_settings["bg_icon"], icon_state = icon_settings[used_icon_key]) + current_button.active_underlay_icon_state = icon_settings[used_icon_key] + +/** + * Applies our button icon and icon state to the button + * + * current_button - what button are we editing? + * force - whether an update is forced regardless of existing status + */ +/datum/action/proc/apply_button_icon(atom/movable/screen/movable/action_button/current_button, force = FALSE) + if(!button_icon || !button_icon_state || (current_button.icon_state == button_icon_state && !force)) + return + + current_button.icon = button_icon + current_button.icon_state = button_icon_state + +/** + * Applies any overlays to our button + * + * current_button - what button are we editing? + * force - whether an update is forced regardless of existing status + */ +/datum/action/proc/apply_button_overlay(atom/movable/screen/movable/action_button/current_button, force = FALSE) + + SEND_SIGNAL(src, COMSIG_ACTION_OVERLAY_APPLY, current_button, force) + + if(!overlay_icon || !overlay_icon_state || (current_button.active_overlay_icon_state == overlay_icon_state && !force)) + return + + current_button.cut_overlay(current_button.button_overlay) + current_button.button_overlay = mutable_appearance(icon = overlay_icon, icon_state = overlay_icon_state) + current_button.add_overlay(current_button.button_overlay) + current_button.active_overlay_icon_state = overlay_icon_state + +/** + * Any other miscellaneous "status" updates within the action button is handled here, + * such as redding out when unavailable or modifying maptext. + * + * current_button - what button are we editing? + * force - whether an update is forced regardless of existing status + */ +/datum/action/proc/update_button_status(atom/movable/screen/movable/action_button/current_button, force = FALSE) + if(IsAvailable()) + current_button.color = rgb(255,255,255,255) else - button.color = transparent_when_unavailable ? rgb(128,0,0,128) : rgb(128,0,0) - return available - -/// Applies our button icon over top the background icon of the action -/datum/action/proc/ApplyIcon(atom/movable/screen/movable/action_button/current_button, force = FALSE) - if(icon_icon && button_icon_state && ((current_button.button_icon_state != button_icon_state) || force)) - current_button.cut_overlays(TRUE) - current_button.add_overlay(mutable_appearance(icon_icon, button_icon_state)) - current_button.button_icon_state = button_icon_state + current_button.color = transparent_when_unavailable ? rgb(128,0,0,128) : rgb(128,0,0) /// Gives our action to the passed viewer. /// Puts our action in their actions list and shows them the button. @@ -216,7 +308,7 @@ if(!our_hud || viewers[our_hud]) // There's no point in this if you have no hud in the first place return - var/atom/movable/screen/movable/action_button/button = CreateButton() + var/atom/movable/screen/movable/action_button/button = create_button() SetId(button, viewer) button.our_hud = our_hud @@ -236,13 +328,10 @@ qdel(button) /// Creates an action button movable for the passed mob, and returns it. -/datum/action/proc/CreateButton() +/datum/action/proc/create_button() var/atom/movable/screen/movable/action_button/button = new() button.linked_action = src - button.name = name - button.actiontooltipstyle = buttontooltipstyle - if(desc) - button.desc = desc + build_button_icon(button, ALL, TRUE) return button /datum/action/proc/SetId(atom/movable/screen/movable/action_button/our_button, mob/owner) @@ -262,11 +351,30 @@ our_button.id = bitflag return -/// A general use signal proc that reacts to an event and updates our button icon in accordance -/datum/action/proc/update_icon_on_signal(datum/source) +/// Updates our buttons if our target's icon was updated +/datum/action/proc/on_target_icon_update(datum/source, updates, updated) SIGNAL_HANDLER - UpdateButtons() + var/update_flag = NONE + var/forced = FALSE + if(updates & UPDATE_ICON_STATE) + update_flag |= UPDATE_BUTTON_ICON + forced = TRUE + if(updates & UPDATE_OVERLAYS) + update_flag |= UPDATE_BUTTON_OVERLAY + forced = TRUE + if(updates & (UPDATE_NAME|UPDATE_DESC)) + update_flag |= UPDATE_BUTTON_NAME + // Status is not relevant, and background is not relevant. Neither will change + + // Force the update if an icon state or overlay change was done + build_all_button_icons(update_flag, forced) + +/// A general use signal proc that reacts to an event and updates JUST our button's status +/datum/action/proc/update_status_on_signal(datum/source) + SIGNAL_HANDLER + + build_all_button_icons(UPDATE_BUTTON_STATUS) /// Signal proc for COMSIG_MIND_TRANSFERRED - for minds, transfers our action to our new mob on mind transfer /datum/action/proc/on_target_mind_swapped(datum/mind/source, mob/old_current) @@ -274,3 +382,7 @@ // Grant() calls Remove() from the existing owner so we're covered on that Grant(source.current) + +/// Checks if our action is actively selected. Used for selecting icons primarily. +/datum/action/proc/is_action_active(atom/movable/screen/movable/action_button/current_button) + return FALSE diff --git a/code/datums/actions/cooldown_action.dm b/code/datums/actions/cooldown_action.dm index 91abc2f7b07..f04000f64a7 100644 --- a/code/datums/actions/cooldown_action.dm +++ b/code/datums/actions/cooldown_action.dm @@ -17,14 +17,6 @@ var/next_melee_use_time = 0 /// Whether or not you want the cooldown for the ability to display in text form var/text_cooldown = TRUE - /// Setting for intercepting clicks before activating the ability - var/click_to_activate = FALSE - /// What icon to replace our mouse cursor with when active. Optional, Requires click_to_activate - var/ranged_mousepointer - /// The cooldown added onto the user's next click. Requires click_to_activate - var/click_cd_override = CLICK_CD_CLICK_ABILITY - /// If TRUE, we will unset after using our click intercept. Requires click_to_activate - var/unset_after_click = TRUE /// Shares cooldowns with other abiliies, bitflag var/shared_cooldown /// List of prerequisite actions that are used in this sequenced ability, you cannot put other sequenced abilities in this @@ -32,22 +24,86 @@ /// List of prerequisite actions that have been initialized var/list/initialized_actions + // These are only used for click_to_activate actions + /// Setting for intercepting clicks before activating the ability + var/click_to_activate = FALSE + /// The cooldown added onto the user's next click. + var/click_cd_override = CLICK_CD_CLICK_ABILITY + /// If TRUE, we will unset after using our click intercept. + var/unset_after_click = TRUE + /// What icon to replace our mouse cursor with when active. Optional + var/ranged_mousepointer + /// The base icon_state of this action's background + var/base_background_icon_state + /// The icon state the background uses when active + var/active_background_icon_state + /// The base icon_state of the overlay we apply + var/base_overlay_icon_state + /// The active icon_state of the overlay we apply + var/active_overlay_icon_state + /// The base icon state of the spell's button icon, used for editing the icon "off" + var/base_icon_state + /// The active icon state of the spell's button icon, used for editing the icon "on" + var/active_icon_state + /datum/action/cooldown/New(Target, original = TRUE) - ..() + . = ..() + if(active_background_icon_state) + base_background_icon_state ||= background_icon_state + if(active_overlay_icon_state) + base_overlay_icon_state ||= overlay_icon_state + if(active_icon_state) + base_icon_state ||= button_icon_state + if(isnull(melee_cooldown_time)) melee_cooldown_time = cooldown_time + if(original) create_sequence_actions() -/datum/action/cooldown/CreateButton() +/datum/action/cooldown/create_button() var/atom/movable/screen/movable/action_button/button = ..() button.maptext = "" - button.maptext_x = 8 - button.maptext_y = 0 + button.maptext_x = 6 + button.maptext_y = 2 button.maptext_width = 24 button.maptext_height = 12 return button +/datum/action/cooldown/update_button_status(atom/movable/screen/movable/action_button/button, force = FALSE) + . = ..() + var/time_left = max(next_use_time - world.time, 0) + if(!text_cooldown || !owner || time_left == 0 || time_left >= COOLDOWN_NO_DISPLAY_TIME) + button.maptext = "" + else + button.maptext = MAPTEXT("[round(time_left/10, 0.1)]") + + if(!IsAvailable() || !is_action_active(button)) + return + // If we don't change the icon state, or don't apply a special overlay, + if(active_background_icon_state || active_icon_state || active_overlay_icon_state) + return + // ...we need to show it's active somehow. So, make it greeeen + button.color = COLOR_GREEN + +/datum/action/cooldown/apply_button_background(atom/movable/screen/movable/action_button/current_button, force) + if(active_background_icon_state) + background_icon_state = is_action_active(current_button) ? active_background_icon_state : base_background_icon_state + return ..() + +/datum/action/cooldown/apply_button_icon(atom/movable/screen/movable/action_button/current_button, force) + if(active_icon_state) + button_icon_state = is_action_active(current_button) ? active_icon_state : base_icon_state + return ..() + +/datum/action/cooldown/apply_button_overlay(atom/movable/screen/movable/action_button/current_button, force) + if(active_overlay_icon_state) + overlay_icon_state = is_action_active(current_button) ? active_overlay_icon_state : base_overlay_icon_state + return ..() + +/datum/action/cooldown/is_action_active(atom/movable/screen/movable/action_button/current_button) + return click_to_activate && current_button.our_hud?.mymob?.click_intercept == src + /datum/action/cooldown/Destroy() QDEL_LIST(initialized_actions) return ..() @@ -56,7 +112,7 @@ . = ..() if(!owner) return - UpdateButtons() + build_all_button_icons() if(next_use_time > world.time) START_PROCESSING(SSfastprocess, src) RegisterSignal(granted_to, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(handle_melee_attack)) @@ -110,7 +166,7 @@ next_use_time = world.time + override_cooldown_time else next_use_time = world.time + cooldown_time - UpdateButtons() + build_all_button_icons(UPDATE_BUTTON_STATUS) START_PROCESSING(SSfastprocess, src) /// Starts a cooldown time for other abilities that share a cooldown with this. Has some niche usage with more complicated attack ai! @@ -196,18 +252,6 @@ total_delay += initialized_actions[ability] StartCooldown() -/datum/action/cooldown/UpdateButton(atom/movable/screen/movable/action_button/button, status_only = FALSE, force = FALSE) - . = ..() - if(!button) - return - var/time_left = max(next_use_time - world.time, 0) - if(text_cooldown && time_left < COOLDOWN_NO_DISPLAY_TIME) - button.maptext = MAPTEXT("[round(time_left/10, 0.1)]") - if(!owner || time_left == 0 || time_left >= COOLDOWN_NO_DISPLAY_TIME) - button.maptext = "" - if(IsAvailable() && (button.our_hud.mymob.click_intercept == src)) - button.color = COLOR_GREEN - /// Cancels melee attacks if they are on cooldown. /datum/action/cooldown/proc/handle_melee_attack(mob/source, mob/target) SIGNAL_HANDLER @@ -216,11 +260,11 @@ /datum/action/cooldown/process() if(!owner || (next_use_time - world.time) <= 0) - UpdateButtons() + build_all_button_icons(UPDATE_BUTTON_STATUS) STOP_PROCESSING(SSfastprocess, src) return - UpdateButtons() + build_all_button_icons(UPDATE_BUTTON_STATUS) /** * Set our action as the click override on the passed mob. @@ -232,7 +276,7 @@ if(ranged_mousepointer) on_who.client?.mouse_override_icon = ranged_mousepointer on_who.update_mouse_pointer() - UpdateButtons() + build_all_button_icons(UPDATE_BUTTON_STATUS) return TRUE /** @@ -248,7 +292,7 @@ if(ranged_mousepointer) on_who.client?.mouse_override_icon = initial(on_who.client?.mouse_override_icon) on_who.update_mouse_pointer() - UpdateButtons() + build_all_button_icons(UPDATE_BUTTON_STATUS) return TRUE /// Formats the action to be returned to the stat panel. diff --git a/code/datums/actions/innate_action.dm b/code/datums/actions/innate_action.dm index 08e67678857..c5271033bc6 100644 --- a/code/datums/actions/innate_action.dm +++ b/code/datums/actions/innate_action.dm @@ -21,17 +21,28 @@ unset_ranged_ability(owner, disable_text) else set_ranged_ability(owner, enable_text) + build_all_button_icons(UPDATE_BUTTON_STATUS) return TRUE // We're not a click action (we're a toggle or otherwise) else - if(active) + var/active_status = active + if(active_status) Deactivate() else Activate() + if(active != active_status) + build_all_button_icons(UPDATE_BUTTON_STATUS) + return TRUE +/datum/action/innate/is_action_active(atom/movable/screen/movable/action_button/current_button) + if(click_action) + return current_button.our_hud?.mymob?.click_intercept == src + else + return active + /datum/action/innate/proc/Activate() return diff --git a/code/datums/actions/item_action.dm b/code/datums/actions/item_action.dm index c2f69d00a19..6d7beec65e2 100644 --- a/code/datums/actions/item_action.dm +++ b/code/datums/actions/item_action.dm @@ -3,34 +3,31 @@ name = "Item Action" check_flags = AB_CHECK_HANDS_BLOCKED|AB_CHECK_CONSCIOUS button_icon_state = null - // If you want to override the normal icon being the item - // then change this to an icon state + +/datum/action/item_action/New(Target) + . = ..() + + // If our button state is null, use the target's icon instead + if(target && isnull(button_icon_state)) + AddComponent(/datum/component/action_item_overlay, target) + +/datum/action/item_action/vv_edit_var(var_name, var_value) + . = ..() + if(!. || !target) + return + + if(var_name == NAMEOF(src, button_icon_state)) + // If someone vv's our icon either add or remove the component + if(isnull(var_name)) + AddComponent(/datum/component/action_item_overlay, target) + else + qdel(GetComponent(/datum/component/action_item_overlay)) /datum/action/item_action/Trigger(trigger_flags) . = ..() if(!.) return FALSE if(target) - var/obj/item/I = target - I.ui_action_click(owner, src) + var/obj/item/item_target = target + item_target.ui_action_click(owner, src) return TRUE - -/datum/action/item_action/ApplyIcon(atom/movable/screen/movable/action_button/current_button, force) - var/obj/item/item_target = target - if(button_icon && button_icon_state) - // If set, use the custom icon that we set instead - // of the item appearance - ..() - else if((target && current_button.appearance_cache != item_target.appearance) || force) //replace with /ref comparison if this is not valid. - var/old_layer = item_target.layer - var/old_plane = item_target.plane - // reset the x & y offset so that item is aligned center - item_target.pixel_x = 0 - item_target.pixel_y = 0 - item_target.layer = FLOAT_LAYER //AAAH - item_target.plane = FLOAT_PLANE //^ what that guy said - current_button.cut_overlays() - current_button.add_overlay(item_target) - item_target.layer = old_layer - item_target.plane = old_plane - current_button.appearance_cache = item_target.appearance diff --git a/code/datums/actions/items/beam_rifle.dm b/code/datums/actions/items/beam_rifle.dm index 3af5d13690d..f0b23ed9608 100644 --- a/code/datums/actions/items/beam_rifle.dm +++ b/code/datums/actions/items/beam_rifle.dm @@ -1,12 +1,14 @@ /datum/action/item_action/zoom_speed_action name = "Toggle Zooming Speed" - icon_icon = 'icons/mob/actions/actions_spells.dmi' + button_icon = 'icons/mob/actions/actions_spells.dmi' button_icon_state = "projectile" background_icon_state = "bg_tech" + overlay_icon_state = "bg_tech_border" /datum/action/item_action/zoom_lock_action name = "Switch Zoom Mode" - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "zoom_mode" background_icon_state = "bg_tech" + overlay_icon_state = "bg_tech_border" diff --git a/code/datums/actions/items/beserk.dm b/code/datums/actions/items/beserk.dm index 9f8519906a0..a3d89d5f239 100644 --- a/code/datums/actions/items/beserk.dm +++ b/code/datums/actions/items/beserk.dm @@ -1,9 +1,10 @@ /datum/action/item_action/berserk_mode name = "Berserk" desc = "Increase your movement and melee speed while also increasing your melee armor for a short amount of time." - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "berserk_mode" background_icon_state = "bg_demon" + overlay_icon_state = "bg_demon_border" /datum/action/item_action/berserk_mode/Trigger(trigger_flags) if(istype(target, /obj/item/clothing/head/hooded/berserker)) diff --git a/code/datums/actions/items/boot_dash.dm b/code/datums/actions/items/boot_dash.dm index 5768a79db63..be206aec599 100644 --- a/code/datums/actions/items/boot_dash.dm +++ b/code/datums/actions/items/boot_dash.dm @@ -2,7 +2,7 @@ /datum/action/item_action/bhop name = "Activate Jump Boots" desc = "Activates the jump boot's internal propulsion system, allowing the user to dash over 4-wide gaps." - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "jetboot" /datum/action/item_action/bhop/brocket diff --git a/code/datums/actions/items/cult_dagger.dm b/code/datums/actions/items/cult_dagger.dm index 73deb6185f3..76e92c7b231 100644 --- a/code/datums/actions/items/cult_dagger.dm +++ b/code/datums/actions/items/cult_dagger.dm @@ -2,10 +2,12 @@ /datum/action/item_action/cult_dagger name = "Draw Blood Rune" desc = "Use the ritual dagger to create a powerful blood rune" - icon_icon = 'icons/mob/actions/actions_cult.dmi' + button_icon = 'icons/mob/actions/actions_cult.dmi' button_icon_state = "draw" buttontooltipstyle = "cult" background_icon_state = "bg_demon" + overlay_icon_state = "bg_demon_border" + default_button_position = "6:157,4:-2" /datum/action/item_action/cult_dagger/Grant(mob/grant_to) diff --git a/code/datums/actions/items/set_internals.dm b/code/datums/actions/items/set_internals.dm index b811a010079..dd1395a6e51 100644 --- a/code/datums/actions/items/set_internals.dm +++ b/code/datums/actions/items/set_internals.dm @@ -1,14 +1,8 @@ /datum/action/item_action/set_internals name = "Set Internals" default_button_position = SCRN_OBJ_INSERT_FIRST - button_overlay_state = "ab_goldborder" + overlay_icon_state = "ab_goldborder" -/datum/action/item_action/set_internals/UpdateButton(atom/movable/screen/movable/action_button/button, status_only = FALSE, force) - . = ..() - if(!. || !button) // no button available - return - if(!iscarbon(owner)) - return +/datum/action/item_action/set_internals/is_action_active(atom/movable/screen/movable/action_button/current_button) var/mob/living/carbon/carbon_owner = owner - if(target == carbon_owner.internal) - button.icon_state = "template_active" + return istype(carbon_owner) && target == carbon_owner.internal diff --git a/code/datums/actions/items/stealth_box.dm b/code/datums/actions/items/stealth_box.dm index 99a685728c1..9d1c6276511 100644 --- a/code/datums/actions/items/stealth_box.dm +++ b/code/datums/actions/items/stealth_box.dm @@ -4,7 +4,8 @@ desc = "Find inner peace, here, in the box." check_flags = AB_CHECK_HANDS_BLOCKED|AB_CHECK_IMMOBILE|AB_CHECK_CONSCIOUS background_icon_state = "bg_agent" - icon_icon = 'icons/mob/actions/actions_items.dmi' + overlay_icon_state = "bg_agent_border" + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "deploy_box" ///The type of closet this action spawns. var/boxtype = /obj/structure/closet/cardboard/agent diff --git a/code/datums/actions/items/summon_stickmen.dm b/code/datums/actions/items/summon_stickmen.dm index c825c72dc51..e3189f9675e 100644 --- a/code/datums/actions/items/summon_stickmen.dm +++ b/code/datums/actions/items/summon_stickmen.dm @@ -2,5 +2,5 @@ /datum/action/item_action/stickmen name = "Summon Stick Minions" desc = "Allows you to summon faithful stickmen allies to aide you in battle." - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "art_summon" diff --git a/code/datums/actions/items/toggles.dm b/code/datums/actions/items/toggles.dm index 92804adedf6..956238ae166 100644 --- a/code/datums/actions/items/toggles.dm +++ b/code/datums/actions/items/toggles.dm @@ -40,10 +40,10 @@ /datum/action/item_action/toggle_spacesuit name = "Toggle Suit Thermal Regulator" - icon_icon = 'icons/mob/actions/actions_spacesuit.dmi' + button_icon = 'icons/mob/actions/actions_spacesuit.dmi' button_icon_state = "thermal_off" -/datum/action/item_action/toggle_spacesuit/UpdateButton(atom/movable/screen/movable/action_button/button, status_only = FALSE, force) +/datum/action/item_action/toggle_spacesuit/apply_button_icon(atom/movable/screen/movable/action_button/button, force) var/obj/item/clothing/suit/space/suit = target if(istype(suit)) button_icon_state = "thermal_[suit.thermal_on ? "on" : "off"]" @@ -83,30 +83,18 @@ /datum/action/item_action/wheelys name = "Toggle Wheels" desc = "Pops out or in your shoes' wheels." - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "wheelys" /datum/action/item_action/kindle_kicks name = "Activate Kindle Kicks" desc = "Kick you feet together, activating the lights in your Kindle Kicks." - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "kindleKicks" /datum/action/item_action/storage_gather_mode name = "Switch gathering mode" desc = "Switches the gathering mode of a storage object." - icon_icon = 'icons/mob/actions/actions_items.dmi' - button_icon_state = "storage_gather_switch" - -/datum/action/item_action/storage_gather_mode/ApplyIcon(atom/movable/screen/movable/action_button/current_button) - . = ..() - var/obj/item/item_target = target - var/old_layer = item_target.layer - var/old_plane = item_target.plane - item_target.layer = FLOAT_LAYER //AAAH - item_target.plane = FLOAT_PLANE //^ what that guy said - current_button.cut_overlays() - current_button.add_overlay(target) - item_target.layer = old_layer - item_target.plane = old_plane - current_button.appearance_cache = item_target.appearance + background_icon = 'icons/mob/actions/actions_items.dmi' + background_icon_state = "storage_gather_switch" + overlay_icon_state = "bg_tech_border" diff --git a/code/datums/actions/items/vortex_recall.dm b/code/datums/actions/items/vortex_recall.dm index 625c04a4199..50702933f1d 100644 --- a/code/datums/actions/items/vortex_recall.dm +++ b/code/datums/actions/items/vortex_recall.dm @@ -1,7 +1,7 @@ /datum/action/item_action/vortex_recall name = "Vortex Recall" desc = "Recall yourself, and anyone nearby, to an attuned hierophant beacon at any time.
If the beacon is still attached, will detach it." - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "vortex_recall" /datum/action/item_action/vortex_recall/IsAvailable(feedback = FALSE) diff --git a/code/datums/actions/mobs/adjust_vision.dm b/code/datums/actions/mobs/adjust_vision.dm index ed9f32296c1..a54688a2eb9 100644 --- a/code/datums/actions/mobs/adjust_vision.dm +++ b/code/datums/actions/mobs/adjust_vision.dm @@ -2,9 +2,10 @@ /datum/action/adjust_vision name = "Adjust Vision" desc = "See better in the dark. Or don't. Your advanced vision allows either." - icon_icon = 'icons/mob/actions/actions_animal.dmi' + button_icon = 'icons/mob/actions/actions_animal.dmi' button_icon_state = "adjust_vision" background_icon_state = "bg_default" + overlay_icon_state = "bg_default_border" /datum/action/adjust_vision/Grant(mob/living/grant_to) . = ..() diff --git a/code/datums/actions/mobs/blood_warp.dm b/code/datums/actions/mobs/blood_warp.dm index c4b2fc25c94..823f756d7af 100644 --- a/code/datums/actions/mobs/blood_warp.dm +++ b/code/datums/actions/mobs/blood_warp.dm @@ -1,6 +1,6 @@ /datum/action/cooldown/mob_cooldown/blood_warp name = "Blood Warp" - icon_icon = 'icons/effects/blood.dmi' + button_icon = 'icons/effects/blood.dmi' button_icon_state = "floor1" desc = "Allows you to teleport to blood at a clicked position." cooldown_time = 0 diff --git a/code/datums/actions/mobs/charge.dm b/code/datums/actions/mobs/charge.dm index beb9ab63d26..2d42b50958b 100644 --- a/code/datums/actions/mobs/charge.dm +++ b/code/datums/actions/mobs/charge.dm @@ -1,6 +1,6 @@ /datum/action/cooldown/mob_cooldown/charge name = "Charge" - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "sniper_zoom" desc = "Allows you to charge at a chosen position." cooldown_time = 1.5 SECONDS @@ -214,7 +214,7 @@ /datum/action/cooldown/mob_cooldown/charge/hallucination_charge name = "Hallucination Charge" - icon_icon = 'icons/effects/bubblegum.dmi' + button_icon = 'icons/effects/bubblegum.dmi' button_icon_state = "smack ya one" desc = "Allows you to create hallucinations that charge around your target." cooldown_time = 2 SECONDS @@ -273,7 +273,7 @@ /datum/action/cooldown/mob_cooldown/charge/hallucination_charge/hallucination_surround name = "Surround Target" - icon_icon = 'icons/turf/walls/wall.dmi' + button_icon = 'icons/turf/walls/wall.dmi' button_icon_state = "wall-0" desc = "Allows you to create hallucinations that charge around your target." charge_delay = 0.6 SECONDS diff --git a/code/datums/actions/mobs/dash.dm b/code/datums/actions/mobs/dash.dm index 21ac04aa9c3..ddb814eb24f 100644 --- a/code/datums/actions/mobs/dash.dm +++ b/code/datums/actions/mobs/dash.dm @@ -1,6 +1,6 @@ /datum/action/cooldown/mob_cooldown/dash name = "Dash" - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "sniper_zoom" desc = "Allows you to dash towards a position." cooldown_time = 1.5 SECONDS diff --git a/code/datums/actions/mobs/fire_breath.dm b/code/datums/actions/mobs/fire_breath.dm index 34398473de4..57962035a24 100644 --- a/code/datums/actions/mobs/fire_breath.dm +++ b/code/datums/actions/mobs/fire_breath.dm @@ -1,6 +1,6 @@ /datum/action/cooldown/mob_cooldown/fire_breath name = "Fire Breath" - icon_icon = 'icons/obj/wizard.dmi' + button_icon = 'icons/obj/wizard.dmi' button_icon_state = "fireball" desc = "Allows you to shoot fire towards a target." cooldown_time = 3 SECONDS @@ -45,7 +45,7 @@ /datum/action/cooldown/mob_cooldown/fire_breath/mass_fire name = "Mass Fire" - icon_icon = 'icons/effects/fire.dmi' + button_icon = 'icons/effects/fire.dmi' button_icon_state = "1" desc = "Allows you to shoot fire in all directions." cooldown_time = 3 SECONDS diff --git a/code/datums/actions/mobs/lava_swoop.dm b/code/datums/actions/mobs/lava_swoop.dm index af1cafa29e9..6a769a56758 100644 --- a/code/datums/actions/mobs/lava_swoop.dm +++ b/code/datums/actions/mobs/lava_swoop.dm @@ -3,7 +3,7 @@ /datum/action/cooldown/mob_cooldown/lava_swoop name = "Lava Swoop" - icon_icon = 'icons/effects/effects.dmi' + button_icon = 'icons/effects/effects.dmi' button_icon_state = "lavastaff_warn" desc = "Allows you to chase a target while raining lava down." cooldown_time = 4 SECONDS diff --git a/code/datums/actions/mobs/meteors.dm b/code/datums/actions/mobs/meteors.dm index c730335600e..0c95b6c8e17 100644 --- a/code/datums/actions/mobs/meteors.dm +++ b/code/datums/actions/mobs/meteors.dm @@ -1,6 +1,6 @@ /datum/action/cooldown/mob_cooldown/meteors name = "Meteors" - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "sniper_zoom" desc = "Allows you to rain meteors down around yourself." cooldown_time = 3 SECONDS diff --git a/code/datums/actions/mobs/mobcooldown.dm b/code/datums/actions/mobs/mobcooldown.dm index dc59def0e2d..17561f2f45a 100644 --- a/code/datums/actions/mobs/mobcooldown.dm +++ b/code/datums/actions/mobs/mobcooldown.dm @@ -1,6 +1,6 @@ /datum/action/cooldown/mob_cooldown name = "Standard Mob Cooldown Ability" - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "sniper_zoom" desc = "Click this ability to attack." check_flags = AB_CHECK_CONSCIOUS diff --git a/code/datums/actions/mobs/projectileattack.dm b/code/datums/actions/mobs/projectileattack.dm index 45ee1dff6b0..468e498e959 100644 --- a/code/datums/actions/mobs/projectileattack.dm +++ b/code/datums/actions/mobs/projectileattack.dm @@ -1,6 +1,6 @@ /datum/action/cooldown/mob_cooldown/projectile_attack name = "Projectile Attack" - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "sniper_zoom" desc = "Fires a set of projectiles at a selected target." cooldown_time = 1.5 SECONDS @@ -54,7 +54,7 @@ /datum/action/cooldown/mob_cooldown/projectile_attack/rapid_fire name = "Rapid Fire" - icon_icon = 'icons/obj/weapons/guns/energy.dmi' + button_icon = 'icons/obj/weapons/guns/energy.dmi' button_icon_state = "kineticgun" desc = "Fires projectiles repeatedly at a given target." cooldown_time = 1.5 SECONDS @@ -76,7 +76,7 @@ /datum/action/cooldown/mob_cooldown/projectile_attack/rapid_fire/shrapnel name = "Shrapnel Fire" - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "sniper_zoom" desc = "Fires projectiles that will split into shrapnel after a period of time." cooldown_time = 6 SECONDS @@ -111,7 +111,7 @@ /datum/action/cooldown/mob_cooldown/projectile_attack/spiral_shots name = "Spiral Shots" - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "sniper_zoom" desc = "Fires projectiles in a spiral pattern." cooldown_time = 3 SECONDS @@ -152,7 +152,7 @@ /datum/action/cooldown/mob_cooldown/projectile_attack/random_aoe name = "All Directions" - icon_icon = 'icons/effects/effects.dmi' + button_icon = 'icons/effects/effects.dmi' button_icon_state = "at_shield2" desc = "Fires projectiles in all directions." cooldown_time = 3 SECONDS @@ -174,7 +174,7 @@ /datum/action/cooldown/mob_cooldown/projectile_attack/shotgun_blast name = "Shotgun Fire" - icon_icon = 'icons/obj/weapons/guns/ballistic.dmi' + button_icon = 'icons/obj/weapons/guns/ballistic.dmi' button_icon_state = "shotgun" desc = "Fires projectiles in a shotgun pattern." cooldown_time = 2 SECONDS @@ -222,7 +222,7 @@ /datum/action/cooldown/mob_cooldown/projectile_attack/dir_shots name = "Directional Shots" - icon_icon = 'icons/obj/weapons/guns/ballistic.dmi' + button_icon = 'icons/obj/weapons/guns/ballistic.dmi' button_icon_state = "pistol" desc = "Fires projectiles in specific directions." cooldown_time = 4 SECONDS @@ -267,7 +267,7 @@ /datum/action/cooldown/mob_cooldown/projectile_attack/kinetic_accelerator name = "Fire Kinetic Accelerator" - icon_icon = 'icons/obj/weapons/guns/energy.dmi' + button_icon = 'icons/obj/weapons/guns/energy.dmi' button_icon_state = "kineticgun" desc = "Fires a kinetic accelerator projectile at the target." cooldown_time = 1.5 SECONDS diff --git a/code/datums/actions/mobs/sequences/dash_attack.dm b/code/datums/actions/mobs/sequences/dash_attack.dm index 8d0a2cc3444..b5fff4cb492 100644 --- a/code/datums/actions/mobs/sequences/dash_attack.dm +++ b/code/datums/actions/mobs/sequences/dash_attack.dm @@ -1,6 +1,6 @@ /datum/action/cooldown/mob_cooldown/dash_attack name = "Dashing And Attacking" - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "sniper_zoom" desc = "Allows you to dash and fire at a target simultaneously." cooldown_time = 3 SECONDS diff --git a/code/datums/actions/mobs/sequences/projectile.dm b/code/datums/actions/mobs/sequences/projectile.dm index 670ee2417ff..221639d5ace 100644 --- a/code/datums/actions/mobs/sequences/projectile.dm +++ b/code/datums/actions/mobs/sequences/projectile.dm @@ -1,6 +1,6 @@ /datum/action/cooldown/mob_cooldown/direct_and_aoe name = "Direct And AoE Firing" - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "sniper_zoom" desc = "Allows you to shoot directly at a target while also firing around you." cooldown_time = 12 SECONDS diff --git a/code/datums/actions/mobs/sign_language.dm b/code/datums/actions/mobs/sign_language.dm index 1a8446ffea4..982a43c4d39 100644 --- a/code/datums/actions/mobs/sign_language.dm +++ b/code/datums/actions/mobs/sign_language.dm @@ -11,22 +11,19 @@ */ /datum/action/innate/sign_language name = "Sign Language" - icon_icon = 'icons/hud/actions.dmi' + button_icon = 'icons/hud/actions.dmi' button_icon_state = "sign_language" desc = "Allows you to communicate via sign language." owner_has_control = FALSE -/datum/action/innate/sign_language/UpdateButton(atom/movable/screen/movable/action_button/button, status_only = FALSE, force) - . = ..() - if(!. || !button) - return - if(HAS_TRAIT(owner, TRAIT_SIGN_LANG)) - button.icon_state = "template_active" - else - button.icon_state = "template" +/datum/action/innate/sign_language/is_action_active(atom/movable/screen/movable/action_button/current_button) + return HAS_TRAIT(owner, TRAIT_SIGN_LANG) /datum/action/innate/sign_language/Grant(mob/living/carbon/grant_to) - ..() + . = ..() + if(!owner) + return + if (HAS_TRAIT(grant_to, TRAIT_MUTE)) RegisterSignal(grant_to, SIGNAL_REMOVETRAIT(TRAIT_MUTE), PROC_REF(on_unmuted)) // Convenience. Mute Carbons can only speak with sign language. @@ -38,7 +35,7 @@ show_action() /datum/action/innate/sign_language/Remove(mob/living/carbon/grant_to) - ..() + . = ..() UnregisterSignal(grant_to, list( SIGNAL_ADDTRAIT(TRAIT_SIGN_LANG), SIGNAL_REMOVETRAIT(TRAIT_SIGN_LANG), @@ -60,8 +57,8 @@ /// Shows the linked action to the owner Carbon. /datum/action/innate/sign_language/proc/show_action() owner_has_control = TRUE - RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_SIGN_LANG), PROC_REF(update_icon_on_signal)) - RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_SIGN_LANG), PROC_REF(update_icon_on_signal)) + RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_SIGN_LANG), PROC_REF(update_status_on_signal)) + RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_SIGN_LANG), PROC_REF(update_status_on_signal)) GiveAction(owner) /// Hides the linked action from the owner Carbon. diff --git a/code/datums/actions/mobs/small_sprite.dm b/code/datums/actions/mobs/small_sprite.dm index 21a2c920ee5..b53b46fe43a 100644 --- a/code/datums/actions/mobs/small_sprite.dm +++ b/code/datums/actions/mobs/small_sprite.dm @@ -2,9 +2,10 @@ /datum/action/small_sprite name = "Toggle Giant Sprite" desc = "Others will always see you as giant." - icon_icon = 'icons/mob/actions/actions_xeno.dmi' + button_icon = 'icons/mob/actions/actions_xeno.dmi' button_icon_state = "smallqueen" background_icon_state = "bg_alien" + overlay_icon_state = "bg_alien_border" var/small = FALSE var/small_icon var/small_icon_state @@ -14,7 +15,7 @@ small_icon_state = "alienq" /datum/action/small_sprite/megafauna - icon_icon = 'icons/mob/actions/actions_xeno.dmi' + button_icon = 'icons/mob/actions/actions_xeno.dmi' small_icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' /datum/action/small_sprite/megafauna/drake @@ -33,11 +34,13 @@ small_icon = 'icons/mob/simple/jungle/arachnid.dmi' small_icon_state = "arachnid_mini" background_icon_state = "bg_demon" + overlay_icon_state = "bg_demon_border" + /datum/action/small_sprite/space_dragon small_icon = 'icons/mob/simple/carp.dmi' small_icon_state = "carp" - icon_icon = 'icons/mob/simple/carp.dmi' + button_icon = 'icons/mob/simple/carp.dmi' button_icon_state = "carp" /datum/action/small_sprite/Trigger(trigger_flags) diff --git a/code/datums/actions/mobs/transform_weapon.dm b/code/datums/actions/mobs/transform_weapon.dm index d2fd99e5610..884f4fa36dc 100644 --- a/code/datums/actions/mobs/transform_weapon.dm +++ b/code/datums/actions/mobs/transform_weapon.dm @@ -1,6 +1,6 @@ /datum/action/cooldown/mob_cooldown/transform_weapon name = "Transform Weapon" - icon_icon = 'icons/obj/lavaland/artefacts.dmi' + button_icon = 'icons/obj/lavaland/artefacts.dmi' button_icon_state = "cleaving_saw" desc = "Transform weapon into a different state." cooldown_time = 5 SECONDS diff --git a/code/datums/brain_damage/imaginary_friend.dm b/code/datums/brain_damage/imaginary_friend.dm index 4de566d7a18..4223fd471ff 100644 --- a/code/datums/brain_damage/imaginary_friend.dm +++ b/code/datums/brain_damage/imaginary_friend.dm @@ -430,8 +430,9 @@ /datum/action/innate/imaginary_join name = "Join" desc = "Join your owner, following them from inside their mind." - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' background_icon_state = "bg_revenant" + overlay_icon_state = "bg_revenant_border" button_icon_state = "join" /datum/action/innate/imaginary_join/Activate() @@ -441,8 +442,9 @@ /datum/action/innate/imaginary_hide name = "Hide" desc = "Hide yourself from your owner's sight." - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' background_icon_state = "bg_revenant" + overlay_icon_state = "bg_revenant_border" button_icon_state = "hide" /datum/action/innate/imaginary_hide/proc/update_status() @@ -455,13 +457,32 @@ name = "Hide" desc = "Hide yourself from your owner's sight." button_icon_state = "hide" - UpdateButtons() + build_all_button_icons() /datum/action/innate/imaginary_hide/Activate() - var/mob/camera/imaginary_friend/I = owner - I.hidden = !I.hidden - I.Show() - update_status() + var/mob/camera/imaginary_friend/fake_friend = owner + fake_friend.hidden = !fake_friend.hidden + fake_friend.Show() + build_all_button_icons(UPDATE_BUTTON_NAME|UPDATE_BUTTON_ICON) + +/datum/action/innate/imaginary_hide/update_button_name(atom/movable/screen/movable/action_button/button, force) + var/mob/camera/imaginary_friend/fake_friend = owner + if(fake_friend.hidden) + name = "Show" + desc = "Become visible to your owner." + else + name = "Hide" + desc = "Hide yourself from your owner's sight." + return ..() + +/datum/action/innate/imaginary_hide/apply_button_icon(atom/movable/screen/movable/action_button/current_button, force = FALSE) + var/mob/camera/imaginary_friend/fake_friend = owner + if(fake_friend.hidden) + button_icon_state = "unhide" + else + button_icon_state = "hide" + + return ..() //down here is the trapped mind //like imaginary friend but a lot less imagination and more like mind prison// diff --git a/code/datums/components/action_item_overlay.dm b/code/datums/components/action_item_overlay.dm new file mode 100644 index 00000000000..66d2ec012fb --- /dev/null +++ b/code/datums/components/action_item_overlay.dm @@ -0,0 +1,73 @@ +/** + * Apply to an action to allow it to take an item + * and apply it as an overlay of the action button + */ +/datum/component/action_item_overlay + /// Weakref to what item the component uses to apply as an overlay. + var/datum/weakref/item_ref + /// Callback that dictates what item the component uses to apply as an overlay. + var/datum/callback/item_callback + + /// The appearance of the item we've applied + var/mutable_appearance/item_appearance + +/datum/component/action_item_overlay/Initialize(atom/movable/item, datum/callback/item_callback) + if(!istype(parent, /datum/action)) + return COMPONENT_INCOMPATIBLE + + if(!item && !item_callback) + stack_trace("[type] created without a reference item or an item callback - one or the other is required.") + return COMPONENT_INCOMPATIBLE + + src.item_ref = WEAKREF(item) + src.item_callback = item_callback + +/datum/component/action_item_overlay/Destroy(force, silent) + item_ref = null + QDEL_NULL(item_callback) + item_appearance = null + return ..() + +/datum/component/action_item_overlay/RegisterWithParent() + RegisterSignal(parent, COMSIG_ACTION_OVERLAY_APPLY, PROC_REF(on_overlays_applied)) + + var/datum/action/parent_action = parent + parent_action.build_all_button_icons(UPDATE_BUTTON_OVERLAY) + +/datum/component/action_item_overlay/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_ACTION_OVERLAY_APPLY) + + // If we're being unregistered / deleted but our parent is sticking around, + // force an overlay update to get rid of our item appearance + if(!QDELING(parent)) + var/datum/action/parent_action = parent + parent_action.build_all_button_icons(UPDATE_BUTTON_OVERLAY) + +/// Signal proc for [COMSIG_ACTION_OVERLAY_APPLY], applies the item appearance if possible. +/datum/component/action_item_overlay/proc/on_overlays_applied(datum/action/source, atom/movable/screen/movable/action_button/current_button, force) + SIGNAL_HANDLER + + // We're in the middle of being removed / deleted, remove our associated overlay + if(QDELING(src) && item_appearance) + current_button.cut_overlay(item_appearance) + item_appearance = null + return + + var/atom/movable/muse = item_callback?.Invoke() || item_ref?.resolve() + if(!istype(muse)) + return + + if(item_appearance) + // For caching purposes, we will try not to update if we don't need to + if(!force && item_appearance.icon == muse.icon && item_appearance.icon_state == muse.icon_state) + return + current_button.cut_overlay(item_appearance) + + var/mutable_appearance/muse_appearance = new(muse.appearance) + muse_appearance.plane = FLOAT_PLANE + muse_appearance.layer = FLOAT_LAYER + muse_appearance.pixel_x = 0 + muse_appearance.pixel_y = 0 + + current_button.add_overlay(muse_appearance) + item_appearance = muse_appearance diff --git a/code/datums/components/anti_magic.dm b/code/datums/components/anti_magic.dm index 13ec8725aa2..47cc5fa24cc 100644 --- a/code/datums/components/anti_magic.dm +++ b/code/datums/components/anti_magic.dm @@ -67,11 +67,9 @@ if(!(inventory_flags & slot)) //Check that the slot is valid for antimagic UnregisterSignal(equipper, COMSIG_MOB_RECEIVE_MAGIC) UnregisterSignal(equipper, COMSIG_MOB_RESTRICT_MAGIC) - equipper.update_action_buttons() return RegisterSignal(equipper, COMSIG_MOB_RECEIVE_MAGIC, PROC_REF(block_receiving_magic), override = TRUE) RegisterSignal(equipper, COMSIG_MOB_RESTRICT_MAGIC, PROC_REF(restrict_casting_magic), override = TRUE) - equipper.update_action_buttons() if(!casting_restriction_alert) // Check to see if we have any spells that are blocked due to antimagic @@ -89,7 +87,6 @@ UnregisterSignal(user, COMSIG_MOB_RECEIVE_MAGIC) UnregisterSignal(user, COMSIG_MOB_RESTRICT_MAGIC) - user.update_action_buttons() casting_restriction_alert = FALSE /datum/component/anti_magic/proc/block_receiving_magic(mob/living/carbon/user, casted_magic_flags, charge_cost, list/protection_was_used) diff --git a/code/datums/components/mind_linker.dm b/code/datums/components/mind_linker.dm index c507d7478cb..2a6c20b2160 100644 --- a/code/datums/components/mind_linker.dm +++ b/code/datums/components/mind_linker.dm @@ -168,8 +168,9 @@ name = "Mind Link Speech" desc = "Send a psychic message to everyone connected to your Link." button_icon_state = "link_speech" - icon_icon = 'icons/mob/actions/actions_slime.dmi' + button_icon = 'icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_alien" + overlay_icon_state = "bg_alien_border" /datum/action/innate/linked_speech/New(Target) . = ..() @@ -181,7 +182,7 @@ var/datum/component/mind_linker/linker = Target name = "[linker.network_name] Speech" desc = "Send a psychic message to everyone connected to your [linker.network_name]." - icon_icon = linker.speech_action_icon + button_icon = linker.speech_action_icon button_icon_state = linker.speech_action_icon_state background_icon_state = linker.speech_action_background_icon_state diff --git a/code/datums/components/seclight_attachable.dm b/code/datums/components/seclight_attachable.dm index adc1b8ce934..24681be3726 100644 --- a/code/datums/components/seclight_attachable.dm +++ b/code/datums/components/seclight_attachable.dm @@ -170,7 +170,7 @@ /datum/component/seclite_attachable/proc/update_light() var/obj/item/item_parent = parent item_parent.update_appearance() - item_parent.update_action_buttons() + item_parent.update_item_action_buttons() /// Signal proc for [COMSIG_ATOM_EXITED] that handles our light being removed or deleted from our parent. /datum/component/seclite_attachable/proc/on_light_exit(obj/item/source, atom/movable/gone, direction) diff --git a/code/datums/components/sign_language.dm b/code/datums/components/sign_language.dm index be06dc460be..cc278f255c4 100644 --- a/code/datums/components/sign_language.dm +++ b/code/datums/components/sign_language.dm @@ -52,7 +52,6 @@ RegisterSignal(parent, SIGNAL_ADDTRAIT(TRAIT_SIGN_LANG), PROC_REF(enable_sign_language)) RegisterSignal(parent, SIGNAL_REMOVETRAIT(TRAIT_SIGN_LANG), PROC_REF(disable_sign_language)) linked_action.Grant(parent) - linked_action.UpdateButtons() /datum/component/sign_language/UnregisterFromParent() disable_sign_language() diff --git a/code/datums/dash_weapon.dm b/code/datums/dash_weapon.dm index 1dfa0b6bff0..00437a2cdd8 100644 --- a/code/datums/dash_weapon.dm +++ b/code/datums/dash_weapon.dm @@ -2,7 +2,7 @@ /datum/action/innate/dash name = "Dash" desc = "Teleport to the targeted location." - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "jetboot" /// How many dash charges do we have? var/current_charges = 1 @@ -65,7 +65,7 @@ playsound(target_turf, dash_sound, 25, TRUE) current_charges-- addtimer(CALLBACK(src, PROC_REF(charge)), charge_rate) - owner?.update_action_buttons_icon() + owner?.update_mob_action_buttons() return TRUE @@ -82,5 +82,5 @@ if(!owner) return - owner.update_action_buttons_icon() + owner.update_mob_action_buttons() dashing_item.balloon_alert(owner, "[current_charges]/[max_charges] dash charges") diff --git a/code/datums/holocall.dm b/code/datums/holocall.dm index dc8abc62a56..4200236fcbd 100644 --- a/code/datums/holocall.dm +++ b/code/datums/holocall.dm @@ -203,7 +203,7 @@ /datum/action/innate/end_holocall name = "End Holocall" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' + button_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "camera_off" var/datum/holocall/hcall diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 5cc58615c66..2d8a19b96cf 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -7,7 +7,7 @@ /datum/action/neck_chop name = "Neck Chop - Injures the neck, stopping the victim from speaking for a while." - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "neckchop" /datum/action/neck_chop/Trigger(trigger_flags) @@ -23,7 +23,7 @@ /datum/action/leg_sweep name = "Leg Sweep - Trips the victim, knocking them down for a brief moment." - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "legsweep" /datum/action/leg_sweep/Trigger(trigger_flags) @@ -39,7 +39,7 @@ /datum/action/lung_punch//referred to internally as 'quick choke' name = "Lung Punch - Delivers a strong punch just above the victim's abdomen, constraining the lungs. The victim will be unable to breathe for a short time." - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "lungpunch" /datum/action/lung_punch/Trigger(trigger_flags) diff --git a/code/datums/mutations/_mutations.dm b/code/datums/mutations/_mutations.dm index a73aea59f0c..2fd033c71d9 100644 --- a/code/datums/mutations/_mutations.dm +++ b/code/datums/mutations/_mutations.dm @@ -214,7 +214,11 @@ return FALSE var/datum/action/cooldown/spell/new_power = new power_path(src) - new_power.background_icon_state = "bg_tech_blue_on" + new_power.background_icon_state = "bg_tech_blue" + new_power.base_background_icon_state = new_power.background_icon_state + new_power.active_background_icon_state = "[new_power.base_background_icon_state]_active" + new_power.overlay_icon_state = "bg_tech_blue_border" + new_power.active_overlay_icon_state = null new_power.panel = "Genetic" new_power.Grant(owner) diff --git a/code/datums/mutations/cold.dm b/code/datums/mutations/cold.dm index 7c891b3f211..f999eed421d 100644 --- a/code/datums/mutations/cold.dm +++ b/code/datums/mutations/cold.dm @@ -33,12 +33,13 @@ /datum/action/cooldown/spell/pointed/projectile/cryo name = "Cryobeam" desc = "This power fires a frozen bolt at a target." - button_icon_state = "icebeam0" + button_icon_state = "icebeam" + base_icon_state = "icebeam" + active_overlay_icon_state = "bg_spell_border_active_blue" cooldown_time = 16 SECONDS spell_requirements = NONE antimagic_flags = NONE - base_icon_state = "icebeam" active_msg = "You focus your cryokinesis!" deactive_msg = "You relax." projectile_type = /obj/projectile/temp/cryo diff --git a/code/datums/mutations/sight.dm b/code/datums/mutations/sight.dm index 303ddb84dbb..cfe2b71f6d5 100644 --- a/code/datums/mutations/sight.dm +++ b/code/datums/mutations/sight.dm @@ -67,7 +67,7 @@ /datum/action/cooldown/spell/thermal_vision name = "Activate Thermal Vision" desc = "You can see thermal signatures, at the cost of your eyesight." - icon_icon = 'icons/mob/actions/actions_changeling.dmi' + button_icon = 'icons/mob/actions/actions_changeling.dmi' button_icon_state = "augmented_eyesight" cooldown_time = 25 SECONDS diff --git a/code/datums/mutations/tongue_spike.dm b/code/datums/mutations/tongue_spike.dm index ecfc037931b..ed41a9804c9 100644 --- a/code/datums/mutations/tongue_spike.dm +++ b/code/datums/mutations/tongue_spike.dm @@ -12,7 +12,7 @@ /datum/action/cooldown/spell/tongue_spike name = "Launch spike" desc = "Shoot your tongue out in the direction you're facing, embedding it and dealing damage until they remove it." - icon_icon = 'icons/mob/actions/actions_genetic.dmi' + button_icon = 'icons/mob/actions/actions_genetic.dmi' button_icon_state = "spike" cooldown_time = 10 SECONDS @@ -146,7 +146,7 @@ name = "Transfer Chemicals" desc = "Send all of your reagents into whomever the chem spike is embedded in. One use." background_icon_state = "bg_spell" - icon_icon = 'icons/mob/actions/actions_genetic.dmi' + button_icon = 'icons/mob/actions/actions_genetic.dmi' button_icon_state = "spikechemswap" check_flags = AB_CHECK_CONSCIOUS diff --git a/code/datums/mutations/webbing.dm b/code/datums/mutations/webbing.dm index fb152772db1..cf7b62aa9f2 100644 --- a/code/datums/mutations/webbing.dm +++ b/code/datums/mutations/webbing.dm @@ -34,7 +34,7 @@ /datum/action/cooldown/spell/lay_genetic_web name = "Lay Web" desc = "Drops a web. Only you will be able to traverse your web easily, making it pretty good for keeping you safe." - icon_icon = 'icons/mob/actions/actions_genetic.dmi' + button_icon = 'icons/mob/actions/actions_genetic.dmi' button_icon_state = "lay_web" cooldown_time = 4 SECONDS //the same time to lay a web diff --git a/code/game/atoms.dm b/code/game/atoms.dm index c3f2e431116..13e6a48755b 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -1634,7 +1634,7 @@ /obj/item/update_filters() . = ..() - update_action_buttons() + update_item_action_buttons() /atom/proc/get_filter(name) if(filter_data && filter_data[name]) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index e3f871eac9d..0c3f903e0c9 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -169,7 +169,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/action/special_equipment_fallback name = "Request Objective-specific Equipment" desc = "Call down a supply pod containing the equipment required for specific objectives." - icon_icon = 'icons/obj/device.dmi' + button_icon = 'icons/obj/device.dmi' button_icon_state = "beacon" /datum/action/special_equipment_fallback/Trigger(trigger_flags) diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index 4e5fda9b1db..923fe652796 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -254,7 +254,7 @@ /datum/action/innate/camera_off name = "End Camera View" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' + button_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "camera_off" /datum/action/innate/camera_off/Activate() @@ -266,7 +266,7 @@ /datum/action/innate/camera_jump name = "Jump To Camera" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' + button_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "camera_jump" /datum/action/innate/camera_jump/Activate() @@ -311,7 +311,7 @@ /datum/action/innate/camera_multiz_up name = "Move up a floor" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' + button_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "move_up" /datum/action/innate/camera_multiz_up/Activate() @@ -325,7 +325,7 @@ /datum/action/innate/camera_multiz_down name = "Move down a floor" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' + button_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "move_down" /datum/action/innate/camera_multiz_down/Activate() diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index da988395bd0..c8ed058ffbe 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -644,7 +644,7 @@ DEFINE_BITFIELD(turret_flags, list( /datum/action/turret_toggle name = "Toggle Mode" - icon_icon = 'icons/mob/actions/actions_mecha.dmi' + button_icon = 'icons/mob/actions/actions_mecha.dmi' button_icon_state = "mech_cycle_equip_off" /datum/action/turret_toggle/Trigger(trigger_flags) @@ -655,7 +655,7 @@ DEFINE_BITFIELD(turret_flags, list( /datum/action/turret_quit name = "Release Control" - icon_icon = 'icons/mob/actions/actions_mecha.dmi' + button_icon = 'icons/mob/actions/actions_mecha.dmi' button_icon_state = "mech_eject" /datum/action/turret_quit/Trigger(trigger_flags) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 1c557cc1a02..bfb2b93a3e8 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -108,7 +108,7 @@ GLOBAL_DATUM_INIT(fire_overlay, /mutable_appearance, mutable_appearance('icons/e var/min_cold_protection_temperature ///list of /datum/action's that this item has. - var/list/actions + var/list/datum/action/actions ///list of paths of action datums to give to the item on New(). var/list/actions_types @@ -1305,12 +1305,12 @@ GLOBAL_DATUM_INIT(fire_overlay, /mutable_appearance, mutable_appearance('icons/e * Updates all action buttons associated with this item * * Arguments: - * * status_only - Update only current availability status of the buttons to show if they are ready or not to use + * * update_flags - Which flags of the action should we update * * force - Force buttons update even if the given button icon state has not changed */ -/obj/item/proc/update_action_buttons(status_only = FALSE, force = FALSE) +/obj/item/proc/update_item_action_buttons(update_flags = ALL, force = FALSE) for(var/datum/action/current_action as anything in actions) - current_action.UpdateButtons(status_only, force) + current_action.build_all_button_icons(update_flags, force) // Update icons if this is being carried by a mob /obj/item/wash(clean_types) diff --git a/code/game/objects/items/RCL.dm b/code/game/objects/items/RCL.dm index 9544e24c28e..4a14966df06 100644 --- a/code/game/objects/items/RCL.dm +++ b/code/game/objects/items/RCL.dm @@ -344,10 +344,10 @@ /datum/action/item_action/rcl_col name = "Change Cable Color" - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "rcl_rainbow" /datum/action/item_action/rcl_gui name = "Toggle Fast Wiring Gui" - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "rcl_gui" diff --git a/code/game/objects/items/chainsaw.dm b/code/game/objects/items/chainsaw.dm index 9999e0030ea..95e52f27b64 100644 --- a/code/game/objects/items/chainsaw.dm +++ b/code/game/objects/items/chainsaw.dm @@ -64,7 +64,7 @@ toolspeed = on ? 0.5 : initial(toolspeed) //Turning it on halves the speed if(src == user.get_active_held_item()) //update inhands user.update_held_items() - update_action_buttons() + update_item_action_buttons() /obj/item/chainsaw/doomslayer name = "THE GREAT COMMUNICATOR" diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index fc0c8c10d27..cacefb444bb 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -217,7 +217,7 @@ remove_paddles(user) update_power() - update_action_buttons() + update_item_action_buttons() /obj/item/defibrillator/equipped(mob/user, slot) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index d6c24cdbc26..c8671740ead 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -58,7 +58,7 @@ on = !on playsound(user, on ? sound_on : sound_off, 40, TRUE) update_brightness(user) - update_action_buttons() + update_item_action_buttons() /obj/item/flashlight/attack_self(mob/user) toggle_light(user) diff --git a/code/game/objects/items/granters/_granters.dm b/code/game/objects/items/granters/_granters.dm index fed49582d4f..8cb63925f24 100644 --- a/code/game/objects/items/granters/_granters.dm +++ b/code/game/objects/items/granters/_granters.dm @@ -103,4 +103,3 @@ // Action goes on the mind as the user actually learns the thing in your brain var/datum/action/new_action = new granted_action(user.mind || user) new_action.Grant(user) - new_action.UpdateButtons() diff --git a/code/game/objects/items/granters/oragami.dm b/code/game/objects/items/granters/oragami.dm index b048c67ed72..0b7d6d92615 100644 --- a/code/game/objects/items/granters/oragami.dm +++ b/code/game/objects/items/granters/oragami.dm @@ -22,12 +22,14 @@ /datum/action/innate/origami/Activate() to_chat(owner, span_notice("You will now fold origami planes.")) - button_icon_state = "origami_on" active = TRUE - UpdateButtons() + build_all_button_icons(UPDATE_BUTTON_ICON) /datum/action/innate/origami/Deactivate() to_chat(owner, span_notice("You will no longer fold origami planes.")) - button_icon_state = "origami_off" active = FALSE - UpdateButtons() + build_all_button_icons(UPDATE_BUTTON_ICON) + +/datum/action/innate/origami/apply_button_icon(atom/movable/screen/movable/action_button/current_button, force) + button_icon_state = "origami_[active ? "on":"off"]" + return ..() diff --git a/code/game/objects/items/scrolls.dm b/code/game/objects/items/scrolls.dm index 9f615569f64..d6b4567cd83 100644 --- a/code/game/objects/items/scrolls.dm +++ b/code/game/objects/items/scrolls.dm @@ -19,7 +19,7 @@ var/datum/action/cooldown/spell/teleport/area_teleport/wizard/scroll/teleport = locate() in actions if(teleport) teleport.name = name - teleport.icon_icon = icon + teleport.button_icon = icon teleport.button_icon_state = icon_state /obj/item/teleportation_scroll/item_action_slot_check(slot, mob/user) diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm index ecb15a3f0bb..670b7d5980a 100644 --- a/code/game/objects/items/tanks/jetpack.dm +++ b/code/game/objects/items/tanks/jetpack.dm @@ -72,7 +72,7 @@ else turn_off(user) to_chat(user, span_notice("You turn the jetpack off.")) - update_action_buttons() + update_item_action_buttons() /obj/item/tank/jetpack/proc/set_stabilizers(new_stabilizers) if(new_stabilizers == stabilizers) diff --git a/code/game/objects/structures/construction_console/construction_actions.dm b/code/game/objects/structures/construction_console/construction_actions.dm index 71f4b1019a3..462a0df5e1a 100644 --- a/code/game/objects/structures/construction_console/construction_actions.dm +++ b/code/game/objects/structures/construction_console/construction_actions.dm @@ -3,7 +3,7 @@ ///Generic construction action for base [construction consoles][/obj/machinery/computer/camera_advanced/base_construction]. /datum/action/innate/construction - icon_icon = 'icons/mob/actions/actions_construction.dmi' + button_icon = 'icons/mob/actions/actions_construction.dmi' ///Console's eye mob var/mob/camera/ai_eye/remote/base_construction/remote_eye ///Console itself diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index 58a4be0269e..f41e98b611b 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -488,6 +488,7 @@ GLOBAL_LIST_EMPTY(antagonists) /datum/action/antag_info name = "Open Antag Information:" button_icon_state = "round_end" + show_to_observers = FALSE /datum/action/antag_info/New(Target) . = ..() diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm index e632dc73391..3383bd3e627 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm @@ -56,7 +56,7 @@ if(ishuman(loc)) var/mob/living/carbon/human/H = loc H.update_worn_oversuit() - update_action_buttons() + update_item_action_buttons() /obj/item/clothing/suit/armor/abductor/vest/item_action_slot_check(slot, mob/user) if(slot & ITEM_SLOT_OCLOTHING) //we only give the mob the ability to activate the vest if he's actually wearing it. diff --git a/code/modules/antagonists/abductor/machinery/camera.dm b/code/modules/antagonists/abductor/machinery/camera.dm index 604fe94b471..5dd6bed04a3 100644 --- a/code/modules/antagonists/abductor/machinery/camera.dm +++ b/code/modules/antagonists/abductor/machinery/camera.dm @@ -46,7 +46,7 @@ ///Is used to compare to world.time in order to determine if the action should early return var/use_delay name = "Send To" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "beam_down" /datum/action/innate/teleport_in/Activate() @@ -71,7 +71,7 @@ /datum/action/innate/teleport_out name = "Retrieve" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "beam_up" /datum/action/innate/teleport_out/Activate() @@ -86,7 +86,7 @@ var/teleport_self_cooldown = 9 SECONDS var/use_delay name = "Send Self" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "beam_down" /datum/action/innate/teleport_self/Activate() @@ -111,7 +111,7 @@ /datum/action/innate/vest_mode_swap name = "Switch Vest Mode" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "vest_mode" /datum/action/innate/vest_mode_swap/Activate() @@ -123,7 +123,7 @@ /datum/action/innate/vest_disguise_swap name = "Switch Vest Disguise" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "vest_disguise" /datum/action/innate/vest_disguise_swap/Activate() @@ -134,7 +134,7 @@ /datum/action/innate/set_droppoint name = "Set Experiment Release Point" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "set_drop" /datum/action/innate/set_droppoint/Activate() diff --git a/code/modules/antagonists/blob/blob.dm b/code/modules/antagonists/blob/blob.dm index 72f5318ab6b..94590ba5248 100644 --- a/code/modules/antagonists/blob/blob.dm +++ b/code/modules/antagonists/blob/blob.dm @@ -62,7 +62,7 @@ /datum/action/innate/blobpop name = "Pop" desc = "Unleash the blob" - icon_icon = 'icons/mob/nonhuman-player/blob.dmi' + button_icon = 'icons/mob/nonhuman-player/blob.dmi' button_icon_state = "blob" /// The time taken before this ability is automatically activated. diff --git a/code/modules/antagonists/changeling/cellular_emporium.dm b/code/modules/antagonists/changeling/cellular_emporium.dm index 84aae218a10..a8d6800531a 100644 --- a/code/modules/antagonists/changeling/cellular_emporium.dm +++ b/code/modules/antagonists/changeling/cellular_emporium.dm @@ -87,9 +87,10 @@ /datum/action/innate/cellular_emporium name = "Cellular Emporium" - icon_icon = 'icons/obj/drinks.dmi' + button_icon = 'icons/obj/drinks.dmi' button_icon_state = "changelingsting" background_icon_state = "bg_changeling" + overlay_icon_state = "bg_changeling_border" /// The cell emporium we open. var/datum/cellular_emporium/cellular_emporium diff --git a/code/modules/antagonists/changeling/changeling_power.dm b/code/modules/antagonists/changeling/changeling_power.dm index c9c69615657..3c16ae3ebe2 100644 --- a/code/modules/antagonists/changeling/changeling_power.dm +++ b/code/modules/antagonists/changeling/changeling_power.dm @@ -5,7 +5,8 @@ /datum/action/changeling name = "Prototype Sting - Debug button, ahelp this" background_icon_state = "bg_changeling" - icon_icon = 'icons/mob/actions/actions_changeling.dmi' + overlay_icon_state = "bg_changeling_border" + button_icon = 'icons/mob/actions/actions_changeling.dmi' var/needs_button = TRUE//for passive abilities like hivemind that dont need a button var/helptext = "" // Details var/chemical_cost = 0 // negative chemical cost is for passive abilities (chemical glands) diff --git a/code/modules/antagonists/changeling/powers/fakedeath.dm b/code/modules/antagonists/changeling/powers/fakedeath.dm index 7a4ef35d9f9..c83345ffdd9 100644 --- a/code/modules/antagonists/changeling/powers/fakedeath.dm +++ b/code/modules/antagonists/changeling/powers/fakedeath.dm @@ -15,12 +15,9 @@ if(revive_ready) INVOKE_ASYNC(src, PROC_REF(revive), user) revive_ready = FALSE - name = "Reviving Stasis" - desc = "We fall into a stasis, allowing us to regenerate and trick our enemies." - button_icon_state = "fake_death" - UpdateButtons() chemical_cost = 15 to_chat(user, span_notice("We have revived ourselves.")) + build_all_button_icons(UPDATE_BUTTON_NAME|UPDATE_BUTTON_ICON) else to_chat(user, span_notice("We begin our stasis, preparing energy to arise once more.")) user.fakedeath("changeling") //play dead @@ -60,10 +57,7 @@ return to_chat(user, span_notice("We are ready to revive.")) - name = "Revive" - desc = "We arise once more." - button_icon_state = "revive" - UpdateButtons() + build_all_button_icons(UPDATE_BUTTON_NAME|UPDATE_BUTTON_ICON) chemical_cost = 0 revive_ready = TRUE @@ -76,3 +70,16 @@ if("No") return return ..() + +/datum/action/changeling/fakedeath/update_button_name(atom/movable/screen/movable/action_button/button, force) + if(revive_ready) + name = "Revive" + desc = "We arise once more." + else + name = "Reviving Stasis" + desc = "We fall into a stasis, allowing us to regenerate and trick our enemies." + return ..() + +/datum/action/changeling/fakedeath/apply_button_icon(atom/movable/screen/movable/action_button/current_button, force) + button_icon_state = revive_ready ? "revive" : "fake_death" + return ..() diff --git a/code/modules/antagonists/changeling/powers/pheromone_receptors.dm b/code/modules/antagonists/changeling/powers/pheromone_receptors.dm index 3e1f0a7d20f..f0024618d1b 100644 --- a/code/modules/antagonists/changeling/powers/pheromone_receptors.dm +++ b/code/modules/antagonists/changeling/powers/pheromone_receptors.dm @@ -7,7 +7,7 @@ name = "Pheromone Receptors" desc = "We attune our senses to track other changelings by scent. The closer they are, the easier we can find them." helptext = "We will know the general direction of nearby changelings, with closer scents being stronger. Our chemical generation is slowed while this is active." - icon_icon = 'icons/mob/actions/actions_spells.dmi' + button_icon = 'icons/mob/actions/actions_spells.dmi' button_icon_state = "nose" chemical_cost = 0 //Reduces regain rate while active. dna_cost = 2 diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index 542b7ab0157..abdac4384c7 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -251,7 +251,7 @@ charges-- desc = base_desc desc += "
Has [charges] use\s remaining." - UpdateButtons() + build_all_button_icons() if(charges <= 0) to_chat(caller, span_cult("You have exhausted the spell's power!")) qdel(src) @@ -309,7 +309,7 @@ qdel(src) desc = base_desc desc += "
Has [charges] use\s remaining." - UpdateButtons() + build_all_button_icons() /datum/action/innate/cult/blood_spell/manipulation name = "Blood Rites" @@ -358,7 +358,7 @@ source.charges = uses source.desc = source.base_desc source.desc += "
Has [uses] use\s remaining." - source.UpdateButtons() + source.build_all_button_icons() return ..() /obj/item/melee/blood_magic/attack_self(mob/living/user) @@ -387,7 +387,7 @@ else if(source) source.desc = source.base_desc source.desc += "
Has [uses] use\s remaining." - source.UpdateButtons() + source.build_all_button_icons() //Stun /obj/item/melee/blood_magic/stun diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index 57653a2f903..bc158ec0b8d 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -229,7 +229,7 @@ reckoning.Grant(current) bloodmark.Grant(current) throwing.Grant(current) - current.update_action_buttons_icon() + current.update_mob_action_buttons() current.apply_status_effect(/datum/status_effect/cult_master) if(cult_team.cult_risen) current.AddElement(/datum/element/cult_eyes, initial_delay = 0 SECONDS) @@ -245,7 +245,7 @@ reckoning.Remove(current) bloodmark.Remove(current) throwing.Remove(current) - current.update_action_buttons_icon() + current.update_mob_action_buttons() current.remove_status_effect(/datum/status_effect/cult_master) /datum/team/cult diff --git a/code/modules/antagonists/cult/cult_comms.dm b/code/modules/antagonists/cult/cult_comms.dm index 89ec611e098..44820711141 100644 --- a/code/modules/antagonists/cult/cult_comms.dm +++ b/code/modules/antagonists/cult/cult_comms.dm @@ -1,8 +1,10 @@ // Contains cult communion, guide, and cult master abilities /datum/action/innate/cult - icon_icon = 'icons/mob/actions/actions_cult.dmi' + button_icon = 'icons/mob/actions/actions_cult.dmi' background_icon_state = "bg_demon" + overlay_icon_state = "bg_demon_border" + buttontooltipstyle = "cult" check_flags = AB_CHECK_HANDS_BLOCKED|AB_CHECK_IMMOBILE|AB_CHECK_CONSCIOUS ranged_mousepointer = 'icons/effects/mouse_pointers/cult_target.dmi' @@ -108,7 +110,7 @@ team.cult_vote_called = TRUE //somebody's trying to be a master, make sure we don't let anyone else try for(var/datum/mind/B in team.members) if(B.current) - B.current.update_action_buttons_icon() + B.current.update_mob_action_buttons() if(!B.current.incapacitated()) SEND_SOUND(B.current, 'sound/hallucinations/im_here1.ogg') to_chat(B.current, span_cultlarge("Acolyte [Nominee] has asserted that [Nominee.p_theyre()] worthy of leading the cult. A vote will be called shortly.")) @@ -123,7 +125,7 @@ team.cult_vote_called = FALSE for(var/datum/mind/B in team.members) if(B.current) - B.current.update_action_buttons_icon() + B.current.update_mob_action_buttons() if(!B.current.incapacitated()) to_chat(B.current,span_cultlarge("[Nominee] has died in the process of attempting to win the cult's support!")) return FALSE @@ -131,7 +133,7 @@ team.cult_vote_called = FALSE for(var/datum/mind/B in team.members) if(B.current) - B.current.update_action_buttons_icon() + B.current.update_mob_action_buttons() if(!B.current.incapacitated()) to_chat(B.current,span_cultlarge("[Nominee] has gone catatonic in the process of attempting to win the cult's support!")) return FALSE @@ -139,7 +141,7 @@ team.cult_vote_called = FALSE for(var/datum/mind/B in team.members) if(B.current) - B.current.update_action_buttons_icon() + B.current.update_mob_action_buttons() if(!B.current.incapacitated()) to_chat(B.current, span_cultlarge("[Nominee] could not win the cult's support and shall continue to serve as an acolyte.")) return FALSE @@ -275,8 +277,8 @@ if(cult_team.set_blood_target(clicked_on, caller, cult_mark_duration)) unset_ranged_ability(caller, span_cult("The marking rite is complete! It will last for [DisplayTimeText(cult_mark_duration)] seconds.")) COOLDOWN_START(src, cult_mark_cooldown, cult_mark_cooldown_duration) - UpdateButtons() - addtimer(CALLBACK(src, PROC_REF(UpdateButtons)), cult_mark_cooldown_duration + 1) + build_all_button_icons() + addtimer(CALLBACK(src, PROC_REF(build_all_button_icons)), cult_mark_cooldown_duration + 1) return TRUE unset_ranged_ability(caller, span_cult("The marking rite failed!")) @@ -325,27 +327,30 @@ if(cult_team.set_blood_target(mark_target, owner, 60 SECONDS)) to_chat(owner, span_cultbold("You have marked [mark_target] for the cult! It will last for [DisplayTimeText(cult_mark_duration)].")) COOLDOWN_START(src, cult_mark_cooldown, cult_mark_cooldown_duration) - update_button_status() + build_all_button_icons(UPDATE_BUTTON_NAME|UPDATE_BUTTON_ICON) addtimer(CALLBACK(src, PROC_REF(reset_button)), cult_mark_cooldown_duration + 1) return TRUE to_chat(owner, span_cult("The marking failed!")) return FALSE -/datum/action/innate/cult/ghostmark/proc/update_button_status() - if(!owner) - return - +/datum/action/innate/cult/ghostmark/update_button_name(atom/movable/screen/movable/action_button/current_button, force = FALSE) if(COOLDOWN_FINISHED(src, cult_mark_duration)) name = initial(name) desc = initial(desc) - button_icon_state = initial(button_icon_state) else name = "Clear the Blood Mark" desc = "Remove the Blood Mark you previously set." + + return ..() + +/datum/action/innate/cult/ghostmark/apply_button_icon(atom/movable/screen/movable/action_button/current_button, force = FALSE) + if(COOLDOWN_FINISHED(src, cult_mark_duration)) + button_icon_state = initial(button_icon_state) + else button_icon_state = "emp" - UpdateButtons() + return ..() /datum/action/innate/cult/ghostmark/proc/reset_button() if(QDELETED(owner) || QDELETED(src)) @@ -353,14 +358,14 @@ SEND_SOUND(owner, 'sound/magic/enter_blood.ogg') to_chat(owner, span_cultbold("Your previous mark is gone - you are now ready to create a new blood mark.")) - update_button_status() + build_all_button_icons(UPDATE_BUTTON_NAME|UPDATE_BUTTON_ICON) //////// ELDRITCH PULSE ///////// /datum/action/innate/cult/master/pulse name = "Eldritch Pulse" desc = "Seize upon a fellow cultist or cult structure and teleport it to a nearby location." - icon_icon = 'icons/mob/actions/actions_spells.dmi' + button_icon = 'icons/mob/actions/actions_spells.dmi' button_icon_state = "arcane_barrage" click_action = TRUE enable_text = span_cult("You prepare to tear through the fabric of reality... Click a target to sieze them!") @@ -430,8 +435,8 @@ to_chat(caller, span_cult("A pulse of blood magic surges through you as you shift [throwee] through time and space.")) caller.click_intercept = null throwee_ref = null - UpdateButtons() - addtimer(CALLBACK(src, PROC_REF(UpdateButtons)), pulse_cooldown_duration + 1) + build_all_button_icons() + addtimer(CALLBACK(src, PROC_REF(build_all_button_icons)), pulse_cooldown_duration + 1) return TRUE diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 70c585447f5..8e9471a98fb 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -125,7 +125,7 @@ Striking a noncultist, however, will tear their flesh."} /datum/action/innate/dash/cult name = "Rend the Veil" desc = "Use the sword to shear open the flimsy fabric of this reality and teleport to your target." - icon_icon = 'icons/mob/actions/actions_cult.dmi' + button_icon = 'icons/mob/actions/actions_cult.dmi' button_icon_state = "phaseshift" dash_sound = 'sound/magic/enter_blood.ogg' recharge_sound = 'sound/magic/exit_blood.ogg' @@ -649,6 +649,8 @@ Striking a noncultist, however, will tear their flesh."} name = "Bloody Bond" desc = "Call the bloody halberd back to your hand!" background_icon_state = "bg_demon" + overlay_icon_state = "bg_demon_border" + button_icon_state = "bloodspear" default_button_position = "6:157,4:-2" var/obj/item/melee/cultblade/halberd/halberd diff --git a/code/modules/antagonists/cult/rune_spawn_action.dm b/code/modules/antagonists/cult/rune_spawn_action.dm index 6846307db70..af4350427b5 100644 --- a/code/modules/antagonists/cult/rune_spawn_action.dm +++ b/code/modules/antagonists/cult/rune_spawn_action.dm @@ -3,6 +3,8 @@ name = "Summon Rune" desc = "Summons a rune" background_icon_state = "bg_demon" + overlay_icon_state = "bg_demon_border" + var/obj/effect/rune/rune_type var/cooldown = 0 var/base_cooldown = 1800 @@ -56,8 +58,8 @@ R4 = new rune_center_type(T, scribe_time, rune_color) cooldown = base_cooldown + world.time - owner.update_action_buttons_icon() - addtimer(CALLBACK(owner, TYPE_PROC_REF(/mob, update_action_buttons_icon)), base_cooldown) + owner.update_mob_action_buttons() + addtimer(CALLBACK(owner, TYPE_PROC_REF(/mob, update_mob_action_buttons)), base_cooldown + 1) var/list/health if(damage_interrupt && isliving(owner)) var/mob/living/L = owner @@ -77,7 +79,7 @@ if(R4) qdel(R4) cooldown = 0 - owner.update_action_buttons_icon() + owner.update_mob_action_buttons() //teleport rune /datum/action/innate/cult/create_rune/tele diff --git a/code/modules/antagonists/disease/disease_abilities.dm b/code/modules/antagonists/disease/disease_abilities.dm index ac99b593842..08d5160e141 100644 --- a/code/modules/antagonists/disease/disease_abilities.dm +++ b/code/modules/antagonists/disease/disease_abilities.dm @@ -165,7 +165,7 @@ new /datum/disease_ability/symptom/powerful/youth /datum/action/cooldown/disease_cough name = "Cough" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "cough" desc = "Force the host you are following to cough with extra force, spreading your infection to those within two meters of your host even if your transmissibility is low.
Cooldown: 10 seconds" cooldown_time = 100 @@ -204,7 +204,7 @@ new /datum/disease_ability/symptom/powerful/youth /datum/action/cooldown/disease_sneeze name = "Sneeze" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "sneeze" desc = "Force the host you are following to sneeze with extra force, spreading your infection to any victims in a 4 meter cone in front of your host even if your transmissibility is low.
Cooldown: 20 seconds" cooldown_time = 200 @@ -249,7 +249,7 @@ new /datum/disease_ability/symptom/powerful/youth /datum/action/cooldown/disease_infect name = "Secrete Infection" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "infect" desc = "Cause the host you are following to excrete an infective substance from their pores, causing all objects touching their skin to transmit your infection to anyone who touches them for the next 30 seconds.
Cooldown: 40 seconds" cooldown_time = 400 diff --git a/code/modules/antagonists/disease/disease_mob.dm b/code/modules/antagonists/disease/disease_mob.dm index 3fe1b37734e..3765adf5309 100644 --- a/code/modules/antagonists/disease/disease_mob.dm +++ b/code/modules/antagonists/disease/disease_mob.dm @@ -426,7 +426,7 @@ the new instance inside the host to be updated to the template's stats. /datum/action/innate/disease_adapt name = "Adaptation Menu" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "disease_menu" /datum/action/innate/disease_adapt/Activate() diff --git a/code/modules/antagonists/heretic/heretic_living_heart.dm b/code/modules/antagonists/heretic/heretic_living_heart.dm index e8b95eeebe2..4dda1a2f73a 100644 --- a/code/modules/antagonists/heretic/heretic_living_heart.dm +++ b/code/modules/antagonists/heretic/heretic_living_heart.dm @@ -69,8 +69,8 @@ name = "Living Heartbeat" desc = "LMB: Chose one of your sacrifice targets to track. RMB: Repeats last target you chose to track." check_flags = AB_CHECK_CONSCIOUS - background_icon_state = "bg_ecult" - icon_icon = 'icons/obj/eldritch.dmi' + background_icon_state = "bg_heretic" + button_icon = 'icons/obj/eldritch.dmi' button_icon_state = "living_heart" cooldown_time = 4 SECONDS diff --git a/code/modules/antagonists/heretic/knowledge/ash_lore.dm b/code/modules/antagonists/heretic/knowledge/ash_lore.dm index b83c7d43b58..8b1415e2b5f 100644 --- a/code/modules/antagonists/heretic/knowledge/ash_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/ash_lore.dm @@ -103,7 +103,7 @@ var/datum/action/cooldown/spell/touch/mansus_grasp/grasp = locate() in source.actions if(grasp) grasp.next_use_time = min(round(grasp.next_use_time - grasp.cooldown_time * 0.75, 0), 0) - grasp.UpdateButtons() + grasp.build_all_button_icons() /datum/heretic_knowledge/knowledge_ritual/ash next_knowledge = list(/datum/heretic_knowledge/spell/fire_blast) diff --git a/code/modules/antagonists/heretic/magic/aggressive_spread.dm b/code/modules/antagonists/heretic/magic/aggressive_spread.dm index 01eca69edbd..c15ae041a47 100644 --- a/code/modules/antagonists/heretic/magic/aggressive_spread.dm +++ b/code/modules/antagonists/heretic/magic/aggressive_spread.dm @@ -1,8 +1,9 @@ /datum/action/cooldown/spell/aoe/rust_conversion name = "Aggressive Spread" desc = "Spreads rust onto nearby surfaces." - background_icon_state = "bg_ecult" - icon_icon = 'icons/mob/actions/actions_ecult.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "corrode" sound = 'sound/items/welder.ogg' diff --git a/code/modules/antagonists/heretic/magic/ash_ascension.dm b/code/modules/antagonists/heretic/magic/ash_ascension.dm index a4017ff6d12..2615e332a72 100644 --- a/code/modules/antagonists/heretic/magic/ash_ascension.dm +++ b/code/modules/antagonists/heretic/magic/ash_ascension.dm @@ -2,8 +2,9 @@ /datum/action/cooldown/spell/fire_sworn name = "Oath of Flame" desc = "For a minute, you will passively create a ring of fire around you." - background_icon_state = "bg_ecult" - icon_icon = 'icons/mob/actions/actions_ecult.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "fire_ring" school = SCHOOL_FORBIDDEN @@ -61,8 +62,9 @@ /datum/action/cooldown/spell/fire_cascade name = "Lesser Fire Cascade" desc = "Heats the air around you." - background_icon_state = "bg_ecult" - icon_icon = 'icons/mob/actions/actions_ecult.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "fire_ring" sound = 'sound/items/welder.ogg' @@ -99,8 +101,9 @@ /datum/action/cooldown/spell/pointed/ash_beams name = "Nightwatcher's Rite" desc = "A powerful spell that releases five streams of eldritch fire towards the target." - background_icon_state = "bg_ecult" - icon_icon = 'icons/mob/actions/actions_ecult.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "flames" ranged_mousepointer = 'icons/effects/mouse_pointers/throw_target.dmi' diff --git a/code/modules/antagonists/heretic/magic/ash_jaunt.dm b/code/modules/antagonists/heretic/magic/ash_jaunt.dm index f3f3dee8a0b..41242063a90 100644 --- a/code/modules/antagonists/heretic/magic/ash_jaunt.dm +++ b/code/modules/antagonists/heretic/magic/ash_jaunt.dm @@ -1,8 +1,9 @@ /datum/action/cooldown/spell/jaunt/ethereal_jaunt/ash name = "Ashen Passage" desc = "A short range spell that allows you to pass unimpeded through walls." - background_icon_state = "bg_ecult" - icon_icon = 'icons/mob/actions/actions_ecult.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "ash_shift" sound = null diff --git a/code/modules/antagonists/heretic/magic/blood_cleave.dm b/code/modules/antagonists/heretic/magic/blood_cleave.dm index 085e207c833..eca27e55566 100644 --- a/code/modules/antagonists/heretic/magic/blood_cleave.dm +++ b/code/modules/antagonists/heretic/magic/blood_cleave.dm @@ -1,8 +1,9 @@ /datum/action/cooldown/spell/pointed/cleave name = "Cleave" desc = "Causes severe bleeding on a target and several targets around them." - background_icon_state = "bg_ecult" - icon_icon = 'icons/mob/actions/actions_ecult.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "cleave" ranged_mousepointer = 'icons/effects/mouse_pointers/throw_target.dmi' diff --git a/code/modules/antagonists/heretic/magic/blood_siphon.dm b/code/modules/antagonists/heretic/magic/blood_siphon.dm index 0482ed1f332..1e3d6258826 100644 --- a/code/modules/antagonists/heretic/magic/blood_siphon.dm +++ b/code/modules/antagonists/heretic/magic/blood_siphon.dm @@ -2,8 +2,9 @@ name = "Blood Siphon" desc = "A targeted spell that heals your wounds while damaging the enemy. \ It has a chance to transfer wounds between you and your enemy." - background_icon_state = "bg_ecult" - icon_icon = 'icons/mob/actions/actions_ecult.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "blood_siphon" ranged_mousepointer = 'icons/effects/mouse_pointers/throw_target.dmi' diff --git a/code/modules/antagonists/heretic/magic/eldritch_blind.dm b/code/modules/antagonists/heretic/magic/eldritch_blind.dm index 593e56a4d43..8df20503821 100644 --- a/code/modules/antagonists/heretic/magic/eldritch_blind.dm +++ b/code/modules/antagonists/heretic/magic/eldritch_blind.dm @@ -1,7 +1,8 @@ // Given to heretic monsters. /datum/action/cooldown/spell/pointed/blind/eldritch name = "Eldritch Blind" - background_icon_state = "bg_ecult" + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" school = SCHOOL_FORBIDDEN invocation = "E'E'S" diff --git a/code/modules/antagonists/heretic/magic/eldritch_emplosion.dm b/code/modules/antagonists/heretic/magic/eldritch_emplosion.dm index 308c305c821..c68ed07c81f 100644 --- a/code/modules/antagonists/heretic/magic/eldritch_emplosion.dm +++ b/code/modules/antagonists/heretic/magic/eldritch_emplosion.dm @@ -2,7 +2,8 @@ /datum/action/cooldown/spell/emp/eldritch name = "Energetic Pulse" desc = "A spell that causes a large EMP around you, disabling electronics." - background_icon_state = "bg_ecult" + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" school = SCHOOL_FORBIDDEN cooldown_time = 30 SECONDS diff --git a/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm b/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm index f723b8e788c..2275fa9f413 100644 --- a/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm +++ b/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm @@ -3,7 +3,8 @@ name = "Shapechange" desc = "A spell that allows you to take on the form of another creature, gaining their abilities. \ After making your choice, you will be unable to change to another." - background_icon_state = "bg_ecult" + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" school = SCHOOL_FORBIDDEN invocation = "SH'PE" diff --git a/code/modules/antagonists/heretic/magic/eldritch_telepathy.dm b/code/modules/antagonists/heretic/magic/eldritch_telepathy.dm index d4a70d81cc0..ee0d4f73421 100644 --- a/code/modules/antagonists/heretic/magic/eldritch_telepathy.dm +++ b/code/modules/antagonists/heretic/magic/eldritch_telepathy.dm @@ -2,6 +2,7 @@ /datum/action/cooldown/spell/list_target/telepathy/eldritch name = "Eldritch Telepathy" school = SCHOOL_FORBIDDEN - background_icon_state = "bg_ecult" + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" invocation_type = INVOCATION_NONE antimagic_flags = MAGIC_RESISTANCE|MAGIC_RESISTANCE_MIND diff --git a/code/modules/antagonists/heretic/magic/expand_sight.dm b/code/modules/antagonists/heretic/magic/expand_sight.dm index 6c2782be276..e9715c9a779 100644 --- a/code/modules/antagonists/heretic/magic/expand_sight.dm +++ b/code/modules/antagonists/heretic/magic/expand_sight.dm @@ -2,9 +2,10 @@ /datum/action/innate/expand_sight name = "Expand Sight" desc = "Boosts your sight range considerably, allowing you to see enemies from much further away." - icon_icon = 'icons/mob/actions/actions_ecult.dmi' + button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "eye" - background_icon_state = "bg_ecult" + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" /// How far we expand the range to. var/boost_to = 5 /// A cooldown for the last time we toggled it, to prevent spam. diff --git a/code/modules/antagonists/heretic/magic/fire_blast.dm b/code/modules/antagonists/heretic/magic/fire_blast.dm index e6c70203d87..2f0f3013991 100644 --- a/code/modules/antagonists/heretic/magic/fire_blast.dm +++ b/code/modules/antagonists/heretic/magic/fire_blast.dm @@ -3,8 +3,9 @@ desc = "Charge up a blast of fire that chains between nearby targets, setting them ablaze. \ Targets already on fire will take priority. If the target fails to catch ablaze, or \ extinguishes themselves before it bounces, the chain will stop." - background_icon_state = "bg_ecult" - icon_icon = 'icons/mob/actions/actions_ecult.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "flames" sound = 'sound/magic/fireball.ogg' diff --git a/code/modules/antagonists/heretic/magic/flesh_ascension.dm b/code/modules/antagonists/heretic/magic/flesh_ascension.dm index 33370d0b5a2..cb9ab63e031 100644 --- a/code/modules/antagonists/heretic/magic/flesh_ascension.dm +++ b/code/modules/antagonists/heretic/magic/flesh_ascension.dm @@ -2,8 +2,9 @@ name = "Shed form" desc = "Shed your fragile form, become one with the arms, become one with the emperor. \ Causes heavy amounts of brain damage and sanity loss to nearby mortals." - background_icon_state = "bg_ecult" - icon_icon = 'icons/mob/actions/actions_ecult.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "worm_ascend" school = SCHOOL_FORBIDDEN @@ -46,8 +47,9 @@ /datum/action/cooldown/spell/worm_contract name = "Force Contract" desc = "Forces your body to contract onto a single tile." - background_icon_state = "bg_ecult" - icon_icon = 'icons/mob/actions/actions_ecult.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "worm_contract" school = SCHOOL_FORBIDDEN diff --git a/code/modules/antagonists/heretic/magic/flesh_surgery.dm b/code/modules/antagonists/heretic/magic/flesh_surgery.dm index 44f97365bc1..9f09ee7636c 100644 --- a/code/modules/antagonists/heretic/magic/flesh_surgery.dm +++ b/code/modules/antagonists/heretic/magic/flesh_surgery.dm @@ -3,8 +3,9 @@ desc = "A touch spell that allows you to either harvest or restore flesh of target. \ Left-clicking will extract the organs of a victim without needing to complete surgery or disembowel. \ Right-clicking, if done on summons or minions, will restore health. Can also be used to heal damaged organs." - background_icon_state = "bg_ecult" - icon_icon = 'icons/mob/actions/actions_ecult.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "mad_touch" sound = null diff --git a/code/modules/antagonists/heretic/magic/furious_steel.dm b/code/modules/antagonists/heretic/magic/furious_steel.dm index 9d1f6413040..f4e8596fbba 100644 --- a/code/modules/antagonists/heretic/magic/furious_steel.dm +++ b/code/modules/antagonists/heretic/magic/furious_steel.dm @@ -3,9 +3,10 @@ desc = "Summon three silver blades which orbit you. \ While orbiting you, these blades will protect you from from attacks, but will be consumed on use. \ Additionally, you can click to fire the blades at a target, dealing damage and causing bleeding." - background_icon_state = "bg_ecult" - icon_icon = 'icons/mob/actions/actions_ecult.dmi' - button_icon_state = "furious_steel0" + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_ecult.dmi' + button_icon_state = "furious_steel" sound = 'sound/weapons/guillotine.ogg' school = SCHOOL_FORBIDDEN @@ -15,7 +16,6 @@ spell_requirements = NONE - base_icon_state = "furious_steel" active_msg = "You summon forth three blades of furious silver." deactive_msg = "You conceal the blades of furious silver." cast_range = 20 diff --git a/code/modules/antagonists/heretic/magic/madness_touch.dm b/code/modules/antagonists/heretic/magic/madness_touch.dm index 632643becd7..06db9f2464e 100644 --- a/code/modules/antagonists/heretic/magic/madness_touch.dm +++ b/code/modules/antagonists/heretic/magic/madness_touch.dm @@ -2,8 +2,9 @@ /datum/action/cooldown/spell/touch/mad_touch name = "Touch of Madness" desc = "A touch spell that drains your enemy's sanity." - background_icon_state = "bg_ecult" - icon_icon = 'icons/mob/actions/actions_ecult.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "mad_touch" school = SCHOOL_FORBIDDEN diff --git a/code/modules/antagonists/heretic/magic/manse_link.dm b/code/modules/antagonists/heretic/magic/manse_link.dm index b8775d334dd..565e7e683eb 100644 --- a/code/modules/antagonists/heretic/magic/manse_link.dm +++ b/code/modules/antagonists/heretic/magic/manse_link.dm @@ -2,8 +2,9 @@ name = "Manse Link" desc = "This spell allows you to pierce through reality and connect minds to one another \ via your Mansus Link. All minds connected to your Mansus Link will be able to communicate discreetly across great distances." - background_icon_state = "bg_ecult" - icon_icon = 'icons/mob/actions/actions_ecult.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "mansus_link" ranged_mousepointer = 'icons/effects/mouse_pointers/throw_target.dmi' diff --git a/code/modules/antagonists/heretic/magic/mansus_grasp.dm b/code/modules/antagonists/heretic/magic/mansus_grasp.dm index 37743b6945c..c7065bcebd2 100644 --- a/code/modules/antagonists/heretic/magic/mansus_grasp.dm +++ b/code/modules/antagonists/heretic/magic/mansus_grasp.dm @@ -1,8 +1,9 @@ /datum/action/cooldown/spell/touch/mansus_grasp name = "Mansus Grasp" desc = "A touch spell that lets you channel the power of the Old Gods through your grip." - background_icon_state = "bg_ecult" - icon_icon = 'icons/mob/actions/actions_ecult.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "mansus_grasp" sound = 'sound/items/welder.ogg' diff --git a/code/modules/antagonists/heretic/magic/mirror_walk.dm b/code/modules/antagonists/heretic/magic/mirror_walk.dm index 14713635aa0..0bc9b059020 100644 --- a/code/modules/antagonists/heretic/magic/mirror_walk.dm +++ b/code/modules/antagonists/heretic/magic/mirror_walk.dm @@ -3,8 +3,9 @@ desc = "Allows you to traverse invisibly and freely across the station within the realm of the mirror. \ You can only enter and exit the realm of mirrors when nearby reflective surfaces and items, \ such as windows, mirrors, and reflective walls or equipment." - background_icon_state = "bg_ecult" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "ninja_cloak" cooldown_time = 6 SECONDS @@ -23,7 +24,7 @@ /datum/action/cooldown/spell/jaunt/mirror_walk/Grant(mob/grant_to) . = ..() - RegisterSignal(grant_to, COMSIG_MOVABLE_MOVED, PROC_REF(update_icon_on_signal)) + RegisterSignal(grant_to, COMSIG_MOVABLE_MOVED, PROC_REF(update_status_on_signal)) /datum/action/cooldown/spell/jaunt/mirror_walk/Remove(mob/remove_from) . = ..() @@ -77,7 +78,7 @@ var/obj/effect/dummy/phased_mob/jaunt = ..(jaunter, get_turf(nearby_reflection)) if (!jaunt) return FALSE - RegisterSignal(jaunt, COMSIG_MOVABLE_MOVED, PROC_REF(update_icon_on_signal)) + RegisterSignal(jaunt, COMSIG_MOVABLE_MOVED, PROC_REF(update_status_on_signal)) return jaunt /datum/action/cooldown/spell/jaunt/mirror_walk/exit_jaunt(mob/living/unjaunter, turf/loc_override) diff --git a/code/modules/antagonists/heretic/magic/nightwatcher_rebirth.dm b/code/modules/antagonists/heretic/magic/nightwatcher_rebirth.dm index 9d0a93f6bc5..1e65ef88951 100644 --- a/code/modules/antagonists/heretic/magic/nightwatcher_rebirth.dm +++ b/code/modules/antagonists/heretic/magic/nightwatcher_rebirth.dm @@ -3,8 +3,9 @@ desc = "A spell that extinguishes you drains nearby heathens engulfed in flames of their life force, \ healing you for each victim drained. Those in critical condition \ will have the last of their vitality drained, killing them." - background_icon_state = "bg_ecult" - icon_icon = 'icons/mob/actions/actions_ecult.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "smoke" school = SCHOOL_FORBIDDEN diff --git a/code/modules/antagonists/heretic/magic/realignment.dm b/code/modules/antagonists/heretic/magic/realignment.dm index 7ba184ed4d8..56187a76dcf 100644 --- a/code/modules/antagonists/heretic/magic/realignment.dm +++ b/code/modules/antagonists/heretic/magic/realignment.dm @@ -3,8 +3,9 @@ name = "Realignment" desc = "Realign yourself, rapidly regenerating stamina and reducing any stuns or knockdowns. \ You cannot attack while realigning. Can be casted multiple times in short succession, but each cast lengthens the cooldown." - background_icon_state = "bg_ecult" - icon_icon = 'icons/obj/implants.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/obj/implants.dmi' button_icon_state = "adrenal" // sound = 'sound/magic/whistlereset.ogg' @@ -33,20 +34,18 @@ var/reduction_timer = max(cooldown_time * spell_max_level * 0.5, 1.5 MINUTES) addtimer(CALLBACK(src, PROC_REF(delevel_spell)), reduction_timer) -/datum/action/cooldown/spell/realignment/update_spell_name() - var/spell_title = "" +/datum/action/cooldown/spell/realignment/get_spell_title() switch(spell_level) if(1, 2) - spell_title = "Hasty " // Hasty Realignment + return "Hasty " // Hasty Realignment if(3, 4) - spell_title = "" // Realignment + return "" // Realignment if(5, 6, 7) - spell_title = "Slowed " // Slowed Realignment + return "Slowed " // Slowed Realignment if(8, 9, 10) - spell_title = "Laborious " // Laborious Realignment (don't reach here) + return "Laborious " // Laborious Realignment (don't reach here) - name = "[spell_title][initial(name)]" - UpdateButtons() + return "" /datum/status_effect/realignment id = "realigment" diff --git a/code/modules/antagonists/heretic/magic/rust_construction.dm b/code/modules/antagonists/heretic/magic/rust_construction.dm index dbbe084c589..3556689baa3 100644 --- a/code/modules/antagonists/heretic/magic/rust_construction.dm +++ b/code/modules/antagonists/heretic/magic/rust_construction.dm @@ -1,7 +1,8 @@ /datum/action/cooldown/spell/pointed/rust_construction name = "Rust Formation" desc = "Transforms a rusted floor into a full wall of rust. Creating a wall underneath a mob will harm it." - background_icon_state = "bg_ecult" + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" button_icon_state = "shield" ranged_mousepointer = 'icons/effects/mouse_pointers/throw_target.dmi' check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED diff --git a/code/modules/antagonists/heretic/magic/rust_wave.dm b/code/modules/antagonists/heretic/magic/rust_wave.dm index baf7fce7d89..5ca4b7da07e 100644 --- a/code/modules/antagonists/heretic/magic/rust_wave.dm +++ b/code/modules/antagonists/heretic/magic/rust_wave.dm @@ -4,8 +4,9 @@ desc = "Spews forth a disorienting plume that causes enemies to strike each other, \ briefly blinds them (increasing with range) and poisons them (decreasing with range). \ Also spreads rust in the path of the plume." - background_icon_state = "bg_ecult" - icon_icon = 'icons/mob/actions/actions_ecult.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "entropic_plume" sound = 'sound/magic/forcewall.ogg' @@ -66,8 +67,9 @@ /datum/action/cooldown/spell/basic_projectile/rust_wave name = "Patron's Reach" desc = "Channels energy into your hands to release a wave of rust." - background_icon_state = "bg_ecult" - icon_icon = 'icons/mob/actions/actions_ecult.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "rust_wave" school = SCHOOL_FORBIDDEN diff --git a/code/modules/antagonists/heretic/magic/shadow_cloak.dm b/code/modules/antagonists/heretic/magic/shadow_cloak.dm index b295d52a3aa..7be96ed5e54 100644 --- a/code/modules/antagonists/heretic/magic/shadow_cloak.dm +++ b/code/modules/antagonists/heretic/magic/shadow_cloak.dm @@ -3,8 +3,9 @@ desc = "Completely conceals your identity, but does not make you invisible. Can be activated early to disable it. \ While cloaked, you move faster, but undergo actions much slower. \ Taking damage while cloaked may cause it to lift suddenly, causing negative effects. " - background_icon_state = "bg_ecult" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "ninja_cloak" sound = 'sound/effects/curse2.ogg' diff --git a/code/modules/antagonists/heretic/magic/void_cold_cone.dm b/code/modules/antagonists/heretic/magic/void_cold_cone.dm index 426bc11c565..92c45dc10b0 100644 --- a/code/modules/antagonists/heretic/magic/void_cold_cone.dm +++ b/code/modules/antagonists/heretic/magic/void_cold_cone.dm @@ -4,7 +4,8 @@ Enemies in the cone of the blast will be damaged slightly, slowed, and chilled overtime. \ Additionally, objects hit will be frozen and can shatter, and ground hit will be iced over and slippery - \ though they may thaw shortly if used in room temperature." - background_icon_state = "bg_ecult" + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" button_icon_state = "icebeam" school = SCHOOL_FORBIDDEN diff --git a/code/modules/antagonists/heretic/magic/void_phase.dm b/code/modules/antagonists/heretic/magic/void_phase.dm index 61316d430a9..a3f16a2aeaf 100644 --- a/code/modules/antagonists/heretic/magic/void_phase.dm +++ b/code/modules/antagonists/heretic/magic/void_phase.dm @@ -3,8 +3,9 @@ desc = "Let's you blink to your pointed destination, causes 3x3 aoe damage bubble \ around your pointed destination and your current location. \ It has a minimum range of 3 tiles and a maximum range of 9 tiles." - background_icon_state = "bg_ecult" - icon_icon = 'icons/mob/actions/actions_ecult.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "voidblink" ranged_mousepointer = 'icons/effects/mouse_pointers/throw_target.dmi' diff --git a/code/modules/antagonists/heretic/magic/void_pull.dm b/code/modules/antagonists/heretic/magic/void_pull.dm index f310bd0538c..2021bf8a04e 100644 --- a/code/modules/antagonists/heretic/magic/void_pull.dm +++ b/code/modules/antagonists/heretic/magic/void_pull.dm @@ -2,8 +2,9 @@ name = "Void Pull" desc = "Calls the void, damaging, knocking down, and stunning people nearby. \ Distant foes are also pulled closer to you (but not damaged)." - background_icon_state = "bg_ecult" - icon_icon = 'icons/mob/actions/actions_ecult.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "voidpull" sound = 'sound/magic/voidblink.ogg' diff --git a/code/modules/antagonists/heretic/structures/carving_knife.dm b/code/modules/antagonists/heretic/structures/carving_knife.dm index f98d8ef8ed4..00096d4c002 100644 --- a/code/modules/antagonists/heretic/structures/carving_knife.dm +++ b/code/modules/antagonists/heretic/structures/carving_knife.dm @@ -126,9 +126,10 @@ /datum/action/item_action/rune_shatter name = "Rune Break" desc = "Destroys all runes carved by this blade." - background_icon_state = "bg_ecult" + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" button_icon_state = "rune_break" - icon_icon = 'icons/mob/actions/actions_ecult.dmi' + button_icon = 'icons/mob/actions/actions_ecult.dmi' /datum/action/item_action/rune_shatter/New(Target) . = ..() diff --git a/code/modules/antagonists/revenant/revenant.dm b/code/modules/antagonists/revenant/revenant.dm index b493cb483e3..7fc9a10642a 100644 --- a/code/modules/antagonists/revenant/revenant.dm +++ b/code/modules/antagonists/revenant/revenant.dm @@ -145,7 +145,7 @@ to_chat(src, span_revenboldnotice("You can move again!")) if(essence_regenerating && !inhibited && essence < essence_regen_cap) //While inhibited, essence will not regenerate essence = min(essence + (essence_regen_amount * delta_time), essence_regen_cap) - update_action_buttons_icon() //because we update something required by our spells in life, we need to update our buttons + update_mob_action_buttons() //because we update something required by our spells in life, we need to update our buttons update_spooky_icon() update_health_hud() ..() @@ -213,12 +213,12 @@ visible_message(span_warning("[src] violently flinches!"), \ span_revendanger("As [weapon] passes through you, you feel your essence draining away!")) inhibited = TRUE - update_action_buttons_icon() + update_mob_action_buttons() addtimer(CALLBACK(src, PROC_REF(reset_inhibit)), 3 SECONDS) /mob/living/simple_animal/revenant/proc/reset_inhibit() inhibited = FALSE - update_action_buttons_icon() + update_mob_action_buttons() /mob/living/simple_animal/revenant/adjustHealth(amount, updating_health = TRUE, forced = FALSE) if(!forced && !revealed) @@ -329,7 +329,7 @@ if(essence_excess < essence_cost) return FALSE essence_excess -= essence_cost - update_action_buttons_icon() + update_mob_action_buttons() return TRUE /mob/living/simple_animal/revenant/proc/change_essence_amount(essence_amt, silent = FALSE, source = null) @@ -342,7 +342,7 @@ if(essence_amt > 0) essence_accumulated = max(0, essence_accumulated+essence_amt) essence_excess = max(0, essence_excess+essence_amt) - update_action_buttons_icon() + update_mob_action_buttons() if(!silent) if(essence_amt > 0) to_chat(src, span_revennotice("Gained [essence_amt]E[source ? " from [source]":""].")) diff --git a/code/modules/antagonists/revenant/revenant_abilities.dm b/code/modules/antagonists/revenant/revenant_abilities.dm index 9232435515f..8d2bc888478 100644 --- a/code/modules/antagonists/revenant/revenant_abilities.dm +++ b/code/modules/antagonists/revenant/revenant_abilities.dm @@ -122,7 +122,8 @@ name = "Toggle Darkvision" panel = "Revenant Abilities" background_icon_state = "bg_revenant" - icon_icon = 'icons/mob/actions/actions_revenant.dmi' + overlay_icon_state = "bg_revenant_border" + button_icon = 'icons/mob/actions/actions_revenant.dmi' button_icon_state = "r_nightvision" toggle_span = "revennotice" @@ -131,6 +132,7 @@ name = "Revenant Transmit" panel = "Revenant Abilities" background_icon_state = "bg_revenant" + overlay_icon_state = "bg_revenant_border" telepathy_span = "revennotice" bold_telepathy_span = "revenboldnotice" @@ -140,7 +142,8 @@ /datum/action/cooldown/spell/aoe/revenant panel = "Revenant Abilities (Locked)" background_icon_state = "bg_revenant" - icon_icon = 'icons/mob/actions/actions_revenant.dmi' + overlay_icon_state = "bg_revenant_border" + button_icon = 'icons/mob/actions/actions_revenant.dmi' antimagic_flags = MAGIC_RESISTANCE_HOLY spell_requirements = NONE @@ -410,7 +413,6 @@ name = "Haunt Object" desc = "Empower nearby objects to you with ghostly energy, causing them to attack nearby mortals. \ Items closer to you are more likely to be haunted." - icon_icon = 'icons/mob/actions/actions_revenant.dmi' button_icon_state = "r_haunt" max_targets = 7 aoe_radius = 5 diff --git a/code/modules/antagonists/space_dragon/carp_rift.dm b/code/modules/antagonists/space_dragon/carp_rift.dm index 3aeadfd0db5..4838850cc49 100644 --- a/code/modules/antagonists/space_dragon/carp_rift.dm +++ b/code/modules/antagonists/space_dragon/carp_rift.dm @@ -9,7 +9,8 @@ name = "Summon Rift" desc = "Summon a rift to bring forth a horde of space carp." background_icon_state = "bg_default" - icon_icon = 'icons/mob/actions/actions_space_dragon.dmi' + overlay_icon_state = "bg_default_border" + button_icon = 'icons/mob/actions/actions_space_dragon.dmi' button_icon_state = "carp_rift" /datum/action/innate/summon_rift/Activate() diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm index 31bf889fca1..9d00fe4e34b 100644 --- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm +++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm @@ -47,7 +47,8 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module)) name = "AI Action" desc = "You aren't entirely sure what this does, but it's very beepy and boopy." background_icon_state = "bg_tech_blue" - icon_icon = 'icons/mob/actions/actions_AI.dmi' + overlay_icon_state = "bg_tech_blue_border" + button_icon = 'icons/mob/actions/actions_AI.dmi' /// The owner AI, so we don't have to typecast every time var/mob/living/silicon/ai/owner_AI /// If we have multiple uses of the same power @@ -415,7 +416,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module)) if(uses) desc = "[initial(desc)] It has [uses] use\s remaining." - UpdateButtons() + build_all_button_icons() clicked_machine.audible_message(span_userdanger("You hear a loud electrical buzzing sound coming from [clicked_machine]!")) addtimer(CALLBACK(src, PROC_REF(animate_machine), caller, clicked_machine), 5 SECONDS) //kabeep! @@ -502,7 +503,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module)) adjust_uses(-1) if(uses) desc = "[initial(desc)] It has [uses] use\s remaining." - UpdateButtons() + build_all_button_icons() clicked_machine.audible_message(span_userdanger("You hear a loud electrical buzzing sound coming from [clicked_machine]!")) addtimer(CALLBACK(src, PROC_REF(detonate_machine), caller, clicked_machine), 5 SECONDS) //kaboom! @@ -541,7 +542,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module)) if(QDELETED(src) || uses) //Not sure if not having src here would cause a runtime, so it's here to be safe return desc = "[initial(desc)] It has [uses] use\s remaining." - UpdateButtons() + build_all_button_icons() /// HIGH IMPACT HONKING /datum/ai_module/destructive/megahonk @@ -764,7 +765,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module)) if(QDELETED(src) || !uses) //Not sure if not having src here would cause a runtime, so it's here to be safe return desc = "[initial(desc)] It has [uses] use\s remaining." - UpdateButtons() + build_all_button_icons() /// Upgrade Camera Network: EMP-proofs all cameras, in addition to giving them X-ray vision. /datum/ai_module/upgrade/upgrade_cameras diff --git a/code/modules/antagonists/traitor/equipment/module_picker.dm b/code/modules/antagonists/traitor/equipment/module_picker.dm index bca07f537ec..51058f82ac0 100644 --- a/code/modules/antagonists/traitor/equipment/module_picker.dm +++ b/code/modules/antagonists/traitor/equipment/module_picker.dm @@ -120,7 +120,7 @@ else //Adding uses to an existing module action.uses += initial(action.uses) action.desc = "[initial(action.desc)] It has [action.uses] use\s remaining." - action.UpdateButtons() + action.build_all_button_icons() processing_time -= AM.cost log_malf_upgrades("[key_name(AI)] purchased [AM.name]") SSblackbox.record_feedback("nested tally", "malfunction_modules_bought", 1, list("[initial(AM.name)]", "[AM.cost]")) diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index efac3a3bb39..2588a8ab757 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -2,7 +2,7 @@ /datum/action/item_action/chameleon/drone/randomise name = "Randomise Headgear" - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "random" /datum/action/item_action/chameleon/drone/randomise/Trigger(trigger_flags) @@ -22,7 +22,7 @@ /datum/action/item_action/chameleon/drone/togglehatmask name = "Toggle Headgear Mode" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' + button_icon = 'icons/mob/actions/actions_silicon.dmi' /datum/action/item_action/chameleon/drone/togglehatmask/New() ..() @@ -165,7 +165,7 @@ /datum/action/item_action/chameleon/change/proc/initialize_disguises() name = "Change [chameleon_name] Appearance" - UpdateButtons() + build_all_button_icons() chameleon_blacklist |= typecacheof(target.type) for(var/V in typesof(chameleon_type)) @@ -213,7 +213,7 @@ update_item(picked_item) var/obj/item/thing = target thing.update_slot_icon() - UpdateButtons() + build_all_button_icons() /datum/action/item_action/chameleon/change/proc/update_item(obj/item/picked_item) var/atom/atom_target = target @@ -330,7 +330,7 @@ /datum/action/item_action/chameleon/change/id_trim/initialize_disguises() name = "Change [chameleon_name] Appearance" - UpdateButtons() + build_all_button_icons() chameleon_blacklist |= typecacheof(target.type) for(var/trim_path in typesof(chameleon_type)) @@ -535,9 +535,9 @@ ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT) chameleon_action.random_look() var/datum/action/item_action/chameleon/drone/togglehatmask/togglehatmask_action = new(src) - togglehatmask_action.UpdateButtons() + togglehatmask_action.build_all_button_icons() var/datum/action/item_action/chameleon/drone/randomise/randomise_action = new(src) - randomise_action.UpdateButtons() + randomise_action.build_all_button_icons() /obj/item/clothing/mask/chameleon name = "gas mask" @@ -590,9 +590,9 @@ ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT) chameleon_action.random_look() var/datum/action/item_action/chameleon/drone/togglehatmask/togglehatmask_action = new(src) - togglehatmask_action.UpdateButtons() + togglehatmask_action.build_all_button_icons() var/datum/action/item_action/chameleon/drone/randomise/randomise_action = new(src) - randomise_action.UpdateButtons() + randomise_action.build_all_button_icons() /obj/item/clothing/mask/chameleon/drone/attack_self(mob/user) to_chat(user, span_notice("[src] does not have a voice changer.")) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 1cac3ea9cfa..34d02700862 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -411,7 +411,7 @@ BLIND // can't see anything if(iscarbon(user)) var/mob/living/carbon/C = user C.head_update(src, forced = 1) - update_action_buttons() + update_item_action_buttons() return TRUE /obj/item/clothing/proc/visor_toggling() //handles all the actual toggling of flags diff --git a/code/modules/clothing/glasses/engine_goggles.dm b/code/modules/clothing/glasses/engine_goggles.dm index 67bd598075d..f1bc00e8be7 100644 --- a/code/modules/clothing/glasses/engine_goggles.dm +++ b/code/modules/clothing/glasses/engine_goggles.dm @@ -72,7 +72,7 @@ H.update_sight() update_appearance() - update_action_buttons() + update_item_action_buttons() /obj/item/clothing/glasses/meson/engine/attack_self(mob/user) toggle_mode(user, TRUE) diff --git a/code/modules/clothing/masks/_masks.dm b/code/modules/clothing/masks/_masks.dm index 60cc8a64f3f..dfcc3060c9f 100644 --- a/code/modules/clothing/masks/_masks.dm +++ b/code/modules/clothing/masks/_masks.dm @@ -88,7 +88,7 @@ user.wear_mask_update(src, toggle_off = mask_adjusted) if(loc == user) // Update action button icon for adjusted mask, if someone is holding it. - user.update_action_buttons_icon() + user.update_mob_action_buttons() /** * Proc called in lungs.dm to act if wearing a mask with filters, used to reduce the filters durability, return a changed gas mixture depending on the filter status diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index ff3934fa48a..ddab575da49 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -218,7 +218,7 @@ if(src && choice && !user.incapacitated() && in_range(user,src)) icon_state = options[choice] user.update_worn_mask() - update_action_buttons() + update_item_action_buttons() to_chat(user, span_notice("Your Clown Mask has now morphed into [choice], all praise the Honkmother!")) return TRUE @@ -278,7 +278,7 @@ if(src && choice && !user.incapacitated() && in_range(user,src)) icon_state = options[choice] user.update_worn_mask() - update_action_buttons() + update_item_action_buttons() to_chat(user, span_notice("Your Mime Mask has now morphed into [choice]!")) return TRUE @@ -368,7 +368,7 @@ if(src && choice && !M.stat && in_range(M,src)) icon_state = options[choice] user.update_worn_mask() - update_action_buttons() + update_item_action_buttons() to_chat(M, span_notice("The Tiki Mask has now changed into the [choice] Mask!")) return 1 diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index 282ca61861a..fa0137fbc8d 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -45,7 +45,7 @@ user.update_worn_shoes() //so our mob-overlays update user.update_gravity(user.has_gravity()) user.update_equipment_speed_mods() //we want to update our speed so we arent running at max speed in regular magboots - update_action_buttons() + update_item_action_buttons() /obj/item/clothing/shoes/magboots/examine(mob/user) . = ..() diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm index d18e830b606..34fa23f3669 100644 --- a/code/modules/clothing/spacesuits/_spacesuits.dm +++ b/code/modules/clothing/spacesuits/_spacesuits.dm @@ -218,7 +218,7 @@ if(toggler) to_chat(toggler, span_notice("You turn [thermal_on ? "on" : "off"] [src]'s thermal regulator.")) - update_action_buttons() + update_item_action_buttons() /obj/item/clothing/suit/space/ui_action_click(mob/user, actiontype) toggle_spacesuit(user) diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index 749ff1fe148..c1e9078ca18 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -162,7 +162,7 @@ else set_light_on(FALSE) - update_action_buttons() + update_item_action_buttons() /obj/item/clothing/head/helmet/space/plasmaman/attack_hand_secondary(mob/user) ..() diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index ddfd117771e..75466c69716 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -51,7 +51,7 @@ if(alternative_mode) QDEL_NULL(hood) - update_action_buttons() + update_item_action_buttons() /obj/item/clothing/suit/hooded/dropped() ..() @@ -78,7 +78,7 @@ hood_up = TRUE icon_state = "[initial(icon_state)]_t" H.update_worn_oversuit() - update_action_buttons() + H.update_mob_action_buttons() else RemoveHood() diff --git a/code/modules/mafia/controller.dm b/code/modules/mafia/controller.dm index 70020d7368f..8b8abc3a3ff 100644 --- a/code/modules/mafia/controller.dm +++ b/code/modules/mafia/controller.dm @@ -967,7 +967,7 @@ /datum/action/innate/mafia_panel name = "Mafia Panel" desc = "Use this to play." - icon_icon = 'icons/obj/mafia.dmi' + button_icon = 'icons/obj/mafia.dmi' button_icon_state = "board" var/datum/mafia_controller/parent diff --git a/code/modules/mining/equipment/monster_organs/monster_organ.dm b/code/modules/mining/equipment/monster_organs/monster_organ.dm index 8ced22edc23..0f3e97d6754 100644 --- a/code/modules/mining/equipment/monster_organs/monster_organ.dm +++ b/code/modules/mining/equipment/monster_organs/monster_organ.dm @@ -197,7 +197,7 @@ */ /datum/action/cooldown/monster_core_action check_flags = AB_CHECK_CONSCIOUS - icon_icon = 'icons/obj/medical/organs/mining_organs.dmi' + button_icon = 'icons/obj/medical/organs/mining_organs.dmi' button_icon_state = "hivelord_core_2" text_cooldown = FALSE //Looks really bad when you have minutes long cooldowns diff --git a/code/modules/mining/lavaland/megafauna_loot.dm b/code/modules/mining/lavaland/megafauna_loot.dm index b4b8dec2186..523d306acbc 100644 --- a/code/modules/mining/lavaland/megafauna_loot.dm +++ b/code/modules/mining/lavaland/megafauna_loot.dm @@ -124,7 +124,7 @@ playsound(T,'sound/magic/blind.ogg', 200, TRUE, -4) new /obj/effect/temp_visual/hierophant/telegraph/teleport(T, user) beacon = new/obj/effect/hierophant(T) - user.update_action_buttons_icon() + user.update_mob_action_buttons() user.visible_message(span_hierophant_warning("[user] places a strange machine beneath [user.p_their()] feet!"), \ "[span_hierophant("You detach the hierophant beacon, allowing you to teleport yourself and any allies to it at any time!")]\n\ [span_notice("You can remove the beacon to place it again by striking it with the club.")]") @@ -142,7 +142,7 @@ to_chat(user, span_warning("You don't have enough space to teleport from here!")) return teleporting = TRUE //start channel - user.update_action_buttons_icon() + user.update_mob_action_buttons() user.visible_message(span_hierophant_warning("[user] starts to glow faintly...")) beacon.icon_state = "hierophant_tele_on" var/obj/effect/temp_visual/hierophant/telegraph/edge/TE1 = new /obj/effect/temp_visual/hierophant/telegraph/edge(user.loc) @@ -153,7 +153,7 @@ if(T.is_blocked_turf(TRUE)) teleporting = FALSE to_chat(user, span_warning("The beacon is blocked by something, preventing teleportation!")) - user.update_action_buttons_icon() + user.update_mob_action_buttons() beacon.icon_state = "hierophant_tele_off" return new /obj/effect/temp_visual/hierophant/telegraph(T, user) @@ -163,14 +163,14 @@ if(!do_after(user, 3, target = user) || !user || !beacon || QDELETED(beacon)) //no walking away shitlord teleporting = FALSE if(user) - user.update_action_buttons_icon() + user.update_mob_action_buttons() if(beacon) beacon.icon_state = "hierophant_tele_off" return if(T.is_blocked_turf(TRUE)) teleporting = FALSE to_chat(user, span_warning("The beacon is blocked by something, preventing teleportation!")) - user.update_action_buttons_icon() + user.update_mob_action_buttons() beacon.icon_state = "hierophant_tele_off" return user.log_message("teleported self from [AREACOORD(source)] to [beacon].", LOG_GAME) @@ -192,7 +192,7 @@ beacon.icon_state = "hierophant_tele_off" teleporting = FALSE if(user) - user.update_action_buttons_icon() + user.update_mob_action_buttons() /obj/item/hierophant_club/proc/teleport_mob(turf/source, mob/teleporting, turf/target, mob/user) var/turf/turf_to_teleport_to = get_step(target, get_dir(source, teleporting)) //get position relative to caster diff --git a/code/modules/mining/lavaland/tendril_loot.dm b/code/modules/mining/lavaland/tendril_loot.dm index b7baaeb2814..a9c38110f42 100644 --- a/code/modules/mining/lavaland/tendril_loot.dm +++ b/code/modules/mining/lavaland/tendril_loot.dm @@ -814,7 +814,8 @@ name = "Scan" desc = "Scan an enemy, to get their location and stagger them, increasing their time between attacks." background_icon_state = "bg_clock" - icon_icon = 'icons/mob/actions/actions_items.dmi' + overlay_icon_state = "bg_clock_border" + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "scan" click_to_activate = TRUE diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index 6a1b836135f..9e18de9f5f8 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -228,8 +228,9 @@ /datum/action/innate/minedrone check_flags = AB_CHECK_CONSCIOUS - icon_icon = 'icons/mob/actions/actions_mecha.dmi' + button_icon = 'icons/mob/actions/actions_mecha.dmi' background_icon_state = "bg_default" + overlay_icon_state = "bg_default_border" /datum/action/innate/minedrone/toggle_light name = "Toggle Light" diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index f47b9cd4a6b..9be6f378bd3 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -883,6 +883,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set_sight(initial(sight)) if(target) UnregisterSignal(target, COMSIG_MOVABLE_Z_CHANGED) + hide_other_mob_action_buttons(target) LAZYREMOVE(target.observers, src) /mob/dead/observer/verb/observe() diff --git a/code/modules/mob/living/carbon/alien/adult/alien_powers.dm b/code/modules/mob/living/carbon/alien/adult/alien_powers.dm index 4f1e711adba..0e944bc038b 100644 --- a/code/modules/mob/living/carbon/alien/adult/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/adult/alien_powers.dm @@ -10,7 +10,8 @@ Doesn't work on other aliens/AI.*/ name = "Alien Power" panel = "Alien" background_icon_state = "bg_alien" - icon_icon = 'icons/mob/actions/actions_xeno.dmi' + overlay_icon_state = "bg_alien_border" + button_icon = 'icons/mob/actions/actions_xeno.dmi' button_icon_state = "spell_default" check_flags = AB_CHECK_IMMOBILE|AB_CHECK_CONSCIOUS melee_cooldown_time = 0 SECONDS @@ -258,7 +259,7 @@ Doesn't work on other aliens/AI.*/ to_chat(on_who, span_notice("You prepare your neurotoxin gland. Left-click to fire at a target!")) button_icon_state = "alien_neurotoxin_1" - UpdateButtons() + build_all_button_icons() on_who.update_icons() /datum/action/cooldown/alien/acid/neurotoxin/unset_click_ability(mob/on_who, refund_cooldown = TRUE) @@ -270,7 +271,7 @@ Doesn't work on other aliens/AI.*/ to_chat(on_who, span_notice("You empty your neurotoxin gland.")) button_icon_state = "alien_neurotoxin_0" - UpdateButtons() + build_all_button_icons() on_who.update_icons() /datum/action/cooldown/alien/acid/neurotoxin/InterceptClickOn(mob/living/caller, params, atom/target) @@ -413,7 +414,7 @@ Doesn't work on other aliens/AI.*/ vessel.stored_plasma = max(vessel.stored_plasma + amount,0) vessel.stored_plasma = min(vessel.stored_plasma, vessel.max_plasma) //upper limit of max_plasma, lower limit of 0 for(var/datum/action/cooldown/alien/ability in actions) - ability.UpdateButtons() + ability.build_all_button_icons() return TRUE /mob/living/carbon/alien/adjustPlasma(amount) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 0a62ef512eb..ecd2bed559d 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -850,7 +850,7 @@ else clear_alert(ALERT_HANDCUFFED) clear_mood_event("handcuffed") - update_action_buttons_icon() //some of our action buttons might be unusable when we're handcuffed. + update_mob_action_buttons() //some of our action buttons might be unusable when we're handcuffed. update_worn_handcuffs() update_hud_handcuffed() diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 0ce04a2d71d..146fe994a83 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -163,7 +163,7 @@ if(wear_suit.breakouttime) //when equipping a straightjacket ADD_TRAIT(src, TRAIT_RESTRAINED, SUIT_TRAIT) stop_pulling() //can't pull if restrained - update_action_buttons_icon() //certain action buttons will no longer be usable. + update_mob_action_buttons() //certain action buttons will no longer be usable. update_worn_oversuit() if(ITEM_SLOT_ICLOTHING) if(w_uniform) @@ -214,7 +214,7 @@ if(wear_suit.breakouttime) //when unequipping a straightjacket REMOVE_TRAIT(src, TRAIT_RESTRAINED, SUIT_TRAIT) drop_all_held_items() //suit is restraining - update_action_buttons_icon() //certain action buttons may be usable again. + update_mob_action_buttons() //certain action buttons may be usable again. wear_suit = null if(!QDELETED(src)) //no need to update we're getting deleted anyway if(I.flags_inv & HIDEJUMPSUIT) diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 1c8e819639b..684883d386a 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -482,7 +482,7 @@ special_names = list("Crystal", "Polycrystal") examine_limb_id = SPECIES_GOLEM - var/datum/action/innate/unstable_teleport/unstable_teleport + var/datum/action/cooldown/unstable_teleport/unstable_teleport var/teleport_cooldown = 100 var/last_teleport = 0 @@ -530,43 +530,27 @@ unstable_teleport.Remove(C) ..() -/datum/action/innate/unstable_teleport +/datum/action/cooldown/unstable_teleport name = "Unstable Teleport" check_flags = AB_CHECK_CONSCIOUS button_icon_state = "jaunt" - icon_icon = 'icons/mob/actions/actions_spells.dmi' - var/cooldown = 150 - var/last_teleport = 0 - ///Set to true upon action activation to prevent spamming teleport callbacks while the first is still occurring. - var/is_charging = FALSE + button_icon = 'icons/mob/actions/actions_spells.dmi' + cooldown_time = 17.5 SECONDS -/datum/action/innate/unstable_teleport/IsAvailable(feedback = FALSE) - . = ..() - if(!.) - return - if(world.time > last_teleport + cooldown && !is_charging) - return TRUE - return FALSE - -/datum/action/innate/unstable_teleport/Activate() +/datum/action/cooldown/unstable_teleport/Activate() var/mob/living/carbon/human/H = owner H.visible_message(span_warning("[H] starts vibrating!"), span_danger("You start charging your bluespace core...")) - is_charging = TRUE - UpdateButtons() //action icon looks unavailable playsound(get_turf(H), 'sound/weapons/flash.ogg', 25, TRUE) - addtimer(CALLBACK(src, PROC_REF(teleport), H), 15) + addtimer(CALLBACK(src, PROC_REF(teleport), H), 1.5 SECONDS) + return TRUE -/datum/action/innate/unstable_teleport/proc/teleport(mob/living/carbon/human/H) +/datum/action/cooldown/unstable_teleport/proc/teleport(mob/living/carbon/human/H) H.visible_message(span_warning("[H] disappears in a shower of sparks!"), span_danger("You teleport!")) var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread spark_system.set_up(10, 0, src) spark_system.attach(H) spark_system.start() do_teleport(H, get_turf(H), 12, asoundin = 'sound/weapons/emitter2.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) - last_teleport = world.time - is_charging = FALSE - addtimer(CALLBACK(src, PROC_REF(UpdateButtons)), cooldown + 5) //action icon looks available again - //honk /datum/species/golem/bananium @@ -1230,7 +1214,7 @@ name = "Bone Chill" desc = "Rattle your bones and strike fear into your enemies!" check_flags = AB_CHECK_CONSCIOUS - icon_icon = 'icons/mob/actions/actions_spells.dmi' + button_icon = 'icons/mob/actions/actions_spells.dmi' button_icon_state = "bonechill" var/cooldown = 600 var/last_use diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 1e51a199dda..28403fcc056 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -67,7 +67,7 @@ Cannibalize_Body(H) if(regenerate_limbs) - regenerate_limbs.UpdateButtons() + regenerate_limbs.build_all_button_icons() /datum/species/jelly/proc/Cannibalize_Body(mob/living/carbon/human/H) var/list/limbs_to_consume = list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) - H.get_missing_limbs() @@ -102,8 +102,9 @@ name = "Regenerate Limbs" check_flags = AB_CHECK_CONSCIOUS button_icon_state = "slimeheal" - icon_icon = 'icons/mob/actions/actions_slime.dmi' + button_icon = 'icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_alien" + overlay_icon_state = "bg_alien_border" /datum/action/innate/regenerate_limbs/IsAvailable(feedback = FALSE) . = ..() @@ -221,8 +222,9 @@ name = "Split Body" check_flags = AB_CHECK_CONSCIOUS button_icon_state = "slimesplit" - icon_icon = 'icons/mob/actions/actions_slime.dmi' + button_icon = 'icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_alien" + overlay_icon_state = "bg_alien_border" /datum/action/innate/split_body/IsAvailable(feedback = FALSE) . = ..() @@ -292,8 +294,9 @@ name = "Swap Body" check_flags = NONE button_icon_state = "slimeswap" - icon_icon = 'icons/mob/actions/actions_slime.dmi' + button_icon = 'icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_alien" + overlay_icon_state = "bg_alien_border" /datum/action/innate/swap_body/Activate() if(!isslimeperson(owner)) @@ -449,52 +452,53 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/luminescent, BODY_ZONE_CHEST = /obj/item/bodypart/chest/luminescent, ) + /// How strong is our glow var/glow_intensity = LUMINESCENT_DEFAULT_GLOW + /// Internal dummy used to glow (very cool) var/obj/effect/dummy/luminescent_glow/glow + /// The slime extract we currently have integrated var/obj/item/slime_extract/current_extract - var/datum/action/innate/integrate_extract/integrate_extract - var/datum/action/innate/use_extract/extract_minor - var/datum/action/innate/use_extract/major/extract_major - var/extract_cooldown = 0 - + /// A list of all luminescent related actions we have + var/list/luminescent_actions + /// The cooldown of us using exteracts + COOLDOWN_DECLARE(extract_cooldown) //Species datums don't normally implement destroy, but JELLIES SUCK ASS OUT OF A STEEL STRAW /datum/species/jelly/luminescent/Destroy(force, ...) current_extract = null QDEL_NULL(glow) - QDEL_NULL(integrate_extract) - QDEL_NULL(extract_major) - QDEL_NULL(extract_minor) + QDEL_LIST(luminescent_actions) return ..() /datum/species/jelly/luminescent/on_species_loss(mob/living/carbon/C) - ..() + . = ..() if(current_extract) current_extract.forceMove(C.drop_location()) current_extract = null QDEL_NULL(glow) - QDEL_NULL(integrate_extract) - QDEL_NULL(extract_major) - QDEL_NULL(extract_minor) + QDEL_LIST(luminescent_actions) -/datum/species/jelly/luminescent/on_species_gain(mob/living/carbon/C, datum/species/old_species) - ..() - glow = new(C) - update_glow(C) - integrate_extract = new(src) - integrate_extract.Grant(C) - extract_minor = new(src) - extract_minor.Grant(C) - extract_major = new(src) - extract_major.Grant(C) +/datum/species/jelly/luminescent/on_species_gain(mob/living/carbon/new_jellyperson, datum/species/old_species) + . = ..() + glow = new(new_jellyperson) + update_glow(new_jellyperson) -/datum/species/jelly/luminescent/proc/update_slime_actions() - integrate_extract.update_name() - integrate_extract.UpdateButtons() - extract_minor.UpdateButtons() - extract_major.UpdateButtons() + luminescent_actions = list() + var/datum/action/innate/integrate_extract/integrate_extract = new(src) + integrate_extract.Grant(new_jellyperson) + luminescent_actions += integrate_extract + + var/datum/action/innate/use_extract/extract_minor = new(src) + extract_minor.Grant(new_jellyperson) + luminescent_actions += extract_minor + + var/datum/action/innate/use_extract/major/extract_major = new(src) + extract_major.Grant(new_jellyperson) + luminescent_actions += integrate_extract + +/// Updates the glow of our internal glow thing. /datum/species/jelly/luminescent/proc/update_glow(mob/living/carbon/C, intensity) if(intensity) glow_intensity = intensity @@ -520,104 +524,111 @@ desc = "Eat a slime extract to use its properties." check_flags = AB_CHECK_CONSCIOUS button_icon_state = "slimeconsume" - icon_icon = 'icons/mob/actions/actions_slime.dmi' + button_icon = 'icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_alien" + overlay_icon_state = "bg_alien_border" -/datum/action/innate/integrate_extract/proc/update_name() +/datum/action/innate/integrate_extract/New(Target) + . = ..() + AddComponent(/datum/component/action_item_overlay, CALLBACK(src, PROC_REF(locate_extract))) + +/// Callback for /datum/component/action_item_overlay to find the slime extract from within the species +/datum/action/innate/integrate_extract/proc/locate_extract() var/datum/species/jelly/luminescent/species = target - if(!species || !species.current_extract) + if(!istype(species)) + return null + + return species.current_extract + +/datum/action/innate/integrate_extract/update_button_name(atom/movable/screen/movable/action_button/button, force = FALSE) + var/datum/species/jelly/luminescent/species = target + if(!istype(species) || !species.current_extract) name = "Integrate Extract" desc = "Eat a slime extract to use its properties." else name = "Eject Extract" desc = "Eject your current slime extract." -/datum/action/innate/integrate_extract/UpdateButtons(status_only, force) + return ..() + +/datum/action/innate/integrate_extract/apply_button_icon(atom/movable/screen/movable/action_button/current_button, force) var/datum/species/jelly/luminescent/species = target - if(!species || !species.current_extract) + if(!istype(species) || !species.current_extract) button_icon_state = "slimeconsume" else button_icon_state = "slimeeject" - ..() -/datum/action/innate/integrate_extract/ApplyIcon(atom/movable/screen/movable/action_button/current_button, force) - ..(current_button, TRUE) - var/datum/species/jelly/luminescent/species = target - if(species?.current_extract) - current_button.add_overlay(mutable_appearance(species.current_extract.icon, species.current_extract.icon_state)) + return ..() /datum/action/innate/integrate_extract/Activate() - var/mob/living/carbon/human/H = owner + var/mob/living/carbon/human/human_owner = owner var/datum/species/jelly/luminescent/species = target - if(!isluminescent(H) || !species) + if(!istype(species)) return - CHECK_DNA_AND_SPECIES(H) if(species.current_extract) - var/obj/item/slime_extract/S = species.current_extract - if(!H.put_in_active_hand(S)) - S.forceMove(H.drop_location()) + var/obj/item/slime_extract/to_remove = species.current_extract + if(!human_owner.put_in_active_hand(to_remove)) + to_remove.forceMove(human_owner.drop_location()) + species.current_extract = null - to_chat(H, span_notice("You eject [S].")) - species.update_slime_actions() + human_owner.balloon_alert(human_owner, "[to_remove.name] ejected") + else - var/obj/item/I = H.get_active_held_item() - if(istype(I, /obj/item/slime_extract)) - var/obj/item/slime_extract/S = I - if(!S.Uses) - to_chat(H, span_warning("[I] is spent! You cannot integrate it.")) - return - if(!H.temporarilyRemoveItemFromInventory(S)) - return - S.forceMove(H) - species.current_extract = S - to_chat(H, span_notice("You consume [I], and you feel it pulse within you...")) - species.update_slime_actions() - else - to_chat(H, span_warning("You need to hold an unused slime extract in your active hand!")) + var/obj/item/slime_extract/to_integrate = human_owner.get_active_held_item() + if(!istype(to_integrate) || to_integrate.Uses <= 0) + human_owner.balloon_alert(human_owner, "need an unused slime extract!") + return + if(!human_owner.temporarilyRemoveItemFromInventory(to_integrate)) + return + to_integrate.forceMove(human_owner) + species.current_extract = to_integrate + human_owner.balloon_alert(human_owner, "[to_integrate.name] consumed") + + for(var/datum/action/to_update as anything in species.luminescent_actions) + to_update.build_all_button_icons() /datum/action/innate/use_extract name = "Extract Minor Activation" desc = "Pulse the slime extract with energized jelly to activate it." check_flags = AB_CHECK_CONSCIOUS button_icon_state = "slimeuse1" - icon_icon = 'icons/mob/actions/actions_slime.dmi' + button_icon = 'icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_alien" + overlay_icon_state = "bg_alien_border" var/activation_type = SLIME_ACTIVATE_MINOR +/datum/action/innate/use_extract/New(Target) + . = ..() + AddComponent(/datum/component/action_item_overlay, CALLBACK(src, PROC_REF(locate_extract))) + +/// Callback for /datum/component/action_item_overlay to find the slime extract from within the species +/datum/action/innate/use_extract/proc/locate_extract() + var/datum/species/jelly/luminescent/species = target + if(!istype(species)) + return null + + return species.current_extract + /datum/action/innate/use_extract/IsAvailable(feedback = FALSE) - if(..()) - var/datum/species/jelly/luminescent/species = target - if(species && species.current_extract && (world.time > species.extract_cooldown)) - return TRUE - return FALSE - -/datum/action/innate/use_extract/ApplyIcon(atom/movable/screen/movable/action_button/current_button, force) - ..(current_button, TRUE) - - if(!ishuman(owner)) + . = ..() + if(!.) return - var/mob/living/carbon/human/gazer = owner - var/datum/species/jelly/luminescent/species = gazer?.dna?.species - - if(!istype(species, /datum/species/jelly/luminescent)) - return - - if(species.current_extract) - current_button.add_overlay(mutable_appearance(species.current_extract.icon, species.current_extract.icon_state)) + var/datum/species/jelly/luminescent/species = target + if(istype(species) && species.current_extract && (COOLDOWN_FINISHED(species, extract_cooldown))) + return TRUE + return FALSE /datum/action/innate/use_extract/Activate() - var/mob/living/carbon/human/H = owner - var/datum/species/jelly/luminescent/species = H.dna.species - if(!isluminescent(H) || !species) + var/mob/living/carbon/human/human_owner = owner + var/datum/species/jelly/luminescent/species = human_owner.dna?.species + if(!istype(species) || !species.current_extract) return - CHECK_DNA_AND_SPECIES(H) - if(species.current_extract) - species.extract_cooldown = world.time + 100 - var/cooldown = species.current_extract.activate(H, species, activation_type) - species.extract_cooldown = world.time + cooldown + COOLDOWN_START(species, extract_cooldown, 10 SECONDS) + var/after_use_cooldown = species.current_extract.activate(human_owner, species, activation_type) + COOLDOWN_START(species, extract_cooldown, after_use_cooldown) /datum/action/innate/use_extract/major name = "Extract Major Activation" @@ -661,8 +672,9 @@ name = "Send Thought" desc = "Send a private psychic message to someone you can see." button_icon_state = "send_mind" - icon_icon = 'icons/mob/actions/actions_slime.dmi' + button_icon = 'icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_alien" + overlay_icon_state = "bg_alien_border" /datum/action/innate/project_thought/Activate() var/mob/living/carbon/human/telepath = owner @@ -699,8 +711,9 @@ name = "Link Minds" desc = "Link someone's mind to your Slime Link, allowing them to communicate telepathically with other linked minds." button_icon_state = "mindlink" - icon_icon = 'icons/mob/actions/actions_slime.dmi' + button_icon = 'icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_alien" + overlay_icon_state = "bg_alien_border" /// The species required to use this ability. Typepath. var/req_species = /datum/species/jelly/stargazer /// Whether we're currently linking to someone. diff --git a/code/modules/mob/living/carbon/human/species_types/monkeys.dm b/code/modules/mob/living/carbon/human/species_types/monkeys.dm index 3ab8f011650..19fc6944b87 100644 --- a/code/modules/mob/living/carbon/human/species_types/monkeys.dm +++ b/code/modules/mob/living/carbon/human/species_types/monkeys.dm @@ -212,14 +212,18 @@ /datum/action/item_action/organ_action/toggle_trip name = "Toggle Tripping" - icon_icon = 'icons/mob/actions/actions_changeling.dmi' + button_icon = 'icons/mob/actions/actions_changeling.dmi' button_icon_state = "lesser_form" background_icon_state = "bg_default_on" + overlay_icon_state = "bg_default_border" /datum/action/item_action/organ_action/toggle_trip/Trigger(trigger_flags) . = ..() + if(!.) + return + var/obj/item/organ/internal/brain/primate/monkey_brain = target - if(monkey_brain.tripping == TRUE) + if(monkey_brain.tripping) monkey_brain.tripping = FALSE background_icon_state = "bg_default" to_chat(monkey_brain.owner, span_notice("You will now avoid stumbling while colliding with people who are in combat mode.")) @@ -227,7 +231,7 @@ monkey_brain.tripping = TRUE background_icon_state = "bg_default_on" to_chat(monkey_brain.owner, span_notice("You will now stumble while while colliding with people who are in combat mode.")) - UpdateButtons() + build_all_button_icons() /obj/item/organ/internal/brain/primate/Insert(mob/living/carbon/primate, special = FALSE, drop_if_replaced = FALSE, no_id_transfer = FALSE) diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index 372ba2584e7..38683f0fdc8 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -170,7 +170,7 @@ if(I == internal && (QDELETED(src) || QDELETED(I) || I.loc != src)) cutoff_internals() if(!QDELETED(src)) - update_action_buttons_icon(status_only = TRUE) + update_mob_action_buttons(UPDATE_BUTTON_STATUS) update_equipment_speed_mods() @@ -215,7 +215,7 @@ else internal = target_tank target_tank.after_internals_opened(src) - update_action_buttons_icon() + update_mob_action_buttons() return TRUE /** @@ -247,7 +247,7 @@ else internal = null target_tank.after_internals_closed(src) - update_action_buttons_icon() + update_mob_action_buttons() return TRUE /// Close the the currently open external (that's EX-ternal) air tank. Returns TREUE if successful. diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 91748a817d9..7a2ac852b01 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -91,7 +91,7 @@ SetSleeping(0, 0) reset_perspective(null) reload_fullscreen() - update_action_buttons_icon() + update_mob_action_buttons() update_damage_hud() update_health_hud() med_hud_set_health() diff --git a/code/modules/mob/living/init_signals.dm b/code/modules/mob/living/init_signals.dm index d3f813f76f2..50fd7b890cd 100644 --- a/code/modules/mob/living/init_signals.dm +++ b/code/modules/mob/living/init_signals.dm @@ -133,13 +133,13 @@ SIGNAL_HANDLER mobility_flags &= ~(MOBILITY_UI) unset_machine() - update_action_buttons_icon() + update_mob_action_buttons() /// Called when [TRAIT_UI_BLOCKED] is removed from the mob. /mob/living/proc/on_ui_blocked_trait_loss(datum/source) SIGNAL_HANDLER mobility_flags |= MOBILITY_UI - update_action_buttons_icon() + update_mob_action_buttons() /// Called when [TRAIT_PULL_BLOCKED] is added to the mob. diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 46251fd5f30..dea7583ddf9 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -748,7 +748,7 @@ /datum/action/innate/core_return name = "Return to Main Core" desc = "Leave the APC and resume normal core operations." - icon_icon = 'icons/mob/actions/actions_AI.dmi' + button_icon = 'icons/mob/actions/actions_AI.dmi' button_icon_state = "ai_malf_core" /datum/action/innate/core_return/Activate() @@ -900,7 +900,7 @@ /datum/action/innate/choose_modules name = "Malfunction Modules" desc = "Choose from a variety of insidious modules to aid you." - icon_icon = 'icons/mob/actions/actions_AI.dmi' + button_icon = 'icons/mob/actions/actions_AI.dmi' button_icon_state = "modules_menu" var/datum/module_picker/module_picker @@ -1028,7 +1028,7 @@ /datum/action/innate/deploy_shell name = "Deploy to AI Shell" desc = "Wirelessly control a specialized cyborg shell." - icon_icon = 'icons/mob/actions/actions_AI.dmi' + button_icon = 'icons/mob/actions/actions_AI.dmi' button_icon_state = "ai_shell" /datum/action/innate/deploy_shell/Trigger(trigger_flags) @@ -1040,7 +1040,7 @@ /datum/action/innate/deploy_last_shell name = "Reconnect to shell" desc = "Reconnect to the most recently used AI shell." - icon_icon = 'icons/mob/actions/actions_AI.dmi' + button_icon = 'icons/mob/actions/actions_AI.dmi' button_icon_state = "ai_last_shell" var/mob/living/silicon/robot/last_used_shell diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 1825a33fef0..d66d1732157 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -884,7 +884,7 @@ /datum/action/innate/undeployment name = "Disconnect from shell" desc = "Stop controlling your shell and resume normal core operations." - icon_icon = 'icons/mob/actions/actions_AI.dmi' + button_icon = 'icons/mob/actions/actions_AI.dmi' button_icon_state = "ai_core" /datum/action/innate/undeployment/Trigger(trigger_flags) diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm index f0fd1acc4a8..528d5acc993 100644 --- a/code/modules/mob/living/silicon/robot/robot_model.dm +++ b/code/modules/mob/living/silicon/robot/robot_model.dm @@ -382,7 +382,7 @@ /datum/action/toggle_buffer name = "Activate Auto-Wash" desc = "Trade speed and water for a clean floor." - icon_icon = 'icons/mob/actions/actions_silicon.dmi' + button_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "activate_wash" var/static/datum/callback/allow_buffer_activate var/block_buffer_change = FALSE @@ -487,7 +487,7 @@ if(!wash_audio.is_active()) wash_audio.start() clean() - UpdateButtons() + build_all_button_icons() /// Start the process of disabling the buffer. Plays some effects, waits a bit, then finishes /datum/action/toggle_buffer/proc/deactivate_wash() @@ -517,7 +517,7 @@ var/mob/living/silicon/robot/robot_owner = owner buffer_on = FALSE robot_owner.remove_movespeed_modifier(/datum/movespeed_modifier/auto_wash) - UpdateButtons() + build_all_button_icons() /// Should we keep trying to activate our buffer, or did you fuck it up somehow /datum/action/toggle_buffer/proc/allow_buffer_activate() @@ -554,14 +554,18 @@ // We use more water doing this then mopping reagents.remove_any(2) //reaction() doesn't use up the reagents -/datum/action/toggle_buffer/UpdateButtons(status_only = FALSE, force = FALSE) +/datum/action/toggle_buffer/update_button_name(atom/movable/screen/movable/action_button/current_button, force) if(buffer_on) name = "De-Activate Auto-Wash" - button_icon_state = "deactivate_wash" else name = "Activate Auto-Wash" - button_icon_state = "activate_wash" + return ..() +/datum/action/toggle_buffer/apply_button_icon(atom/movable/screen/movable/action_button/current_button, force) + if(buffer_on) + button_icon_state = "deactivate_wash" + else + button_icon_state = "activate_wash" return ..() /obj/item/reagent_containers/spray/cyborg_drying diff --git a/code/modules/mob/living/simple_animal/bot/vibebot.dm b/code/modules/mob/living/simple_animal/bot/vibebot.dm index 59b01b1399a..4a83803157b 100644 --- a/code/modules/mob/living/simple_animal/bot/vibebot.dm +++ b/code/modules/mob/living/simple_animal/bot/vibebot.dm @@ -61,7 +61,7 @@ /datum/action/innate/vibe name = "Vibe" desc = "LMB: Change vibe color. RMB: Reset vibe color." - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "funk" /datum/action/innate/vibe/IsAvailable(feedback = FALSE) diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 4c90edae049..0128e6ec73b 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -56,7 +56,7 @@ var/spellnum = 1 for(var/datum/action/spell as anything in actions) - if(!(type in construct_spells)) + if(!(spell.type in construct_spells)) continue var/pos = 2 + spellnum * 31 @@ -254,7 +254,7 @@ total_refund += attack_refund jaunt.next_use_time -= total_refund - jaunt.UpdateButtons() + jaunt.build_all_button_icons() /mob/living/simple_animal/hostile/construct/wraith/hostile //actually hostile, will move around, hit things AIStatus = AI_ON @@ -470,6 +470,8 @@ name = "Seek your Master" desc = "You and your master share a soul-link that informs you of their location" background_icon_state = "bg_demon" + overlay_icon_state = "bg_demon_border" + buttontooltipstyle = "cult" button_icon_state = "cult_mark" var/tracking = FALSE @@ -507,8 +509,10 @@ /datum/action/innate/seek_prey name = "Seek the Harvest" desc = "None can hide from Nar'Sie, activate to track a survivor attempting to flee the red harvest!" - icon_icon = 'icons/mob/actions/actions_cult.dmi' + button_icon = 'icons/mob/actions/actions_cult.dmi' background_icon_state = "bg_demon" + overlay_icon_state = "bg_demon_border" + buttontooltipstyle = "cult" button_icon_state = "cult_mark" diff --git a/code/modules/mob/living/simple_animal/heretic_monsters.dm b/code/modules/mob/living/simple_animal/heretic_monsters.dm index bad34d93798..5c36fcc7506 100644 --- a/code/modules/mob/living/simple_animal/heretic_monsters.dm +++ b/code/modules/mob/living/simple_animal/heretic_monsters.dm @@ -78,7 +78,7 @@ link_message = on_link_message, \ unlink_message = on_unlink_message, \ post_unlink_callback = CALLBACK(src, PROC_REF(after_unlink)), \ - speech_action_background_icon_state = "bg_ecult", \ + speech_action_background_icon_state = "bg_heretic", \ ) /mob/living/simple_animal/hostile/heretic_summon/raw_prophet/attack_animal(mob/living/simple_animal/user, list/modifiers) diff --git a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm index 50045ec90cb..713120b84a7 100644 --- a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm +++ b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm @@ -33,7 +33,7 @@ //Lets the wizard summon his art to fight for him /datum/action/boss/wizard_summon_minions name = "Summon Minions" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "art_summon" usage_probability = 40 boss_cost = 30 @@ -84,7 +84,7 @@ //Hitting the wizard himself destroys all decoys /datum/action/boss/wizard_mimic name = "Craft Mimicry" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "mimic_summon" usage_probability = 30 boss_cost = 40 diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 4e6d9a72b35..4b2b92bda6f 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -301,8 +301,9 @@ not_hivemind_talk.Grant(src) /datum/action/innate/spider - icon_icon = 'icons/mob/actions/actions_animal.dmi' + button_icon = 'icons/mob/actions/actions_animal.dmi' background_icon_state = "bg_alien" + overlay_icon_state = "bg_alien_border" /datum/action/innate/spider/lay_web // Todo: Unify this with the genetics power name = "Spin Web" @@ -314,7 +315,7 @@ . = ..() if (!owner) return - RegisterSignals(owner, list(COMSIG_MOVABLE_MOVED, COMSIG_DO_AFTER_BEGAN, COMSIG_DO_AFTER_ENDED), PROC_REF(update_icon_on_signal)) + RegisterSignals(owner, list(COMSIG_MOVABLE_MOVED, COMSIG_DO_AFTER_BEGAN, COMSIG_DO_AFTER_ENDED), PROC_REF(update_status_on_signal)) /datum/action/innate/spider/lay_web/Remove(mob/removed_from) . = ..() @@ -361,7 +362,7 @@ qdel(web) new /obj/structure/spider/stickyweb/sealed(spider_turf) new /obj/structure/spider/stickyweb(spider_turf) - UpdateButtons() + build_all_button_icons() spider.stop_automated_movement = FALSE @@ -371,7 +372,8 @@ you'll also consume them, allowing you to lay enriched eggs. \ Activate this ability and then click on an adjacent target to begin wrapping them." background_icon_state = "bg_alien" - icon_icon = 'icons/mob/actions/actions_animal.dmi' + overlay_icon_state = "bg_alien_border" + button_icon = 'icons/mob/actions/actions_animal.dmi' button_icon_state = "wrap_0" check_flags = AB_CHECK_CONSCIOUS click_to_activate = TRUE @@ -383,7 +385,7 @@ . = ..() if (!owner) return - RegisterSignals(owner, list(COMSIG_DO_AFTER_BEGAN, COMSIG_DO_AFTER_ENDED), PROC_REF(update_icon_on_signal)) + RegisterSignals(owner, list(COMSIG_DO_AFTER_BEGAN, COMSIG_DO_AFTER_ENDED), PROC_REF(update_status_on_signal)) /datum/action/cooldown/wrap/Remove(mob/removed_from) . = ..() @@ -406,7 +408,7 @@ on_who.balloon_alert(on_who, "prepared to wrap") button_icon_state = "wrap_1" - UpdateButtons() + build_all_button_icons() /datum/action/cooldown/wrap/unset_click_ability(mob/on_who, refund_cooldown = TRUE) . = ..() @@ -416,7 +418,7 @@ if (refund_cooldown) on_who.balloon_alert(on_who, "wrap cancelled") button_icon_state = "wrap_0" - UpdateButtons() + build_all_button_icons() /datum/action/cooldown/wrap/Activate(atom/to_wrap) if(!owner.Adjacent(to_wrap)) @@ -466,7 +468,7 @@ var/datum/action/innate/spider/lay_eggs/enriched/egg_power = locate() in owner.actions if(egg_power) egg_power.charges++ - egg_power.UpdateButtons() + egg_power.build_all_button_icons() owner.visible_message( span_danger("[owner] sticks a proboscis into [living_wrapped] and sucks a viscous substance out."), span_notice("You suck the nutriment out of [living_wrapped], feeding you enough to lay a cluster of enriched eggs."), @@ -496,7 +498,7 @@ . = ..() if (!owner) return - RegisterSignals(owner, list(COMSIG_MOVABLE_MOVED, COMSIG_DO_AFTER_BEGAN, COMSIG_DO_AFTER_ENDED), PROC_REF(update_icon_on_signal)) + RegisterSignals(owner, list(COMSIG_MOVABLE_MOVED, COMSIG_DO_AFTER_BEGAN, COMSIG_DO_AFTER_ENDED), PROC_REF(update_status_on_signal)) /datum/action/innate/spider/lay_eggs/Remove(mob/removed_from) . = ..() @@ -532,7 +534,7 @@ owner.balloon_alert(owner, "already eggs here!") else lay_egg() - UpdateButtons(TRUE) + build_all_button_icons(UPDATE_BUTTON_STATUS) spider.stop_automated_movement = FALSE /datum/action/innate/spider/lay_eggs/proc/lay_egg() diff --git a/code/modules/mob/living/simple_animal/hostile/goose.dm b/code/modules/mob/living/simple_animal/hostile/goose.dm index b19cc323f42..2715e10cefb 100644 --- a/code/modules/mob/living/simple_animal/hostile/goose.dm +++ b/code/modules/mob/living/simple_animal/hostile/goose.dm @@ -248,7 +248,7 @@ name = "Vomit" check_flags = AB_CHECK_CONSCIOUS button_icon_state = "vomit" - icon_icon = 'icons/mob/simple/animal.dmi' + button_icon = 'icons/mob/simple/animal.dmi' cooldown_time = 250 /datum/action/cooldown/vomit/Activate(atom/target) diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index a32669f34fc..2aef469a55d 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -140,6 +140,7 @@ /datum/action/innate/hivebot background_icon_state = "bg_default" + overlay_icon_state = "bg_default_border" /datum/action/innate/hivebot/foamwall name = "Foam Wall" diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm index 610a394a5ea..136b749d75b 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm @@ -192,7 +192,7 @@ /datum/action/innate/megafauna_attack name = "Megafauna Attack" - icon_icon = 'icons/mob/actions/actions_animal.dmi' + button_icon = 'icons/mob/actions/actions_animal.dmi' button_icon_state = "" var/chosen_message var/chosen_attack_num = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 7660a491ee3..2b294a62835 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -555,7 +555,7 @@ /datum/action/exit_possession name = "Exit Possession" desc = "Exits the body you are possessing. They will explode violently when this occurs." - icon_icon = 'icons/mob/actions/actions_spells.dmi' + button_icon = 'icons/mob/actions/actions_spells.dmi' button_icon_state = "exit_possession" /datum/action/exit_possession/IsAvailable(feedback = FALSE) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index 5e61fc7ad26..ec8736ec33f 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -97,28 +97,28 @@ Difficulty: Hard /datum/action/innate/megafauna_attack/blink name = "Blink To Target" - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "sniper_zoom" chosen_message = "You are now blinking to your target." chosen_attack_num = 1 /datum/action/innate/megafauna_attack/chaser_swarm name = "Chaser Swarm" - icon_icon = 'icons/effects/effects.dmi' + button_icon = 'icons/effects/effects.dmi' button_icon_state = "hierophant_squares_indefinite" chosen_message = "You are firing a chaser swarm at your target." chosen_attack_num = 2 /datum/action/innate/megafauna_attack/cross_blasts name = "Cross Blasts" - icon_icon = 'icons/effects/effects.dmi' + button_icon = 'icons/effects/effects.dmi' button_icon_state = "hierophant_blast_indefinite" chosen_message = "You are now firing cross blasts at your target." chosen_attack_num = 3 /datum/action/innate/megafauna_attack/blink_spam name = "Blink Chase" - icon_icon = 'icons/obj/lavaland/artefacts.dmi' + button_icon = 'icons/obj/lavaland/artefacts.dmi' button_icon_state = "hierophant_club_ready_beacon" chosen_message = "You are now repeatedly blinking at your target." chosen_attack_num = 4 @@ -761,7 +761,7 @@ Difficulty: Hard to_chat(user, span_hierophant_warning("You collect [src], reattaching it to the club!")) H.beacon = null H.update_appearance() - user.update_action_buttons_icon() + user.update_mob_action_buttons() qdel(src) else to_chat(user, span_hierophant_warning("You touch the beacon with the club, but nothing happens.")) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm index 43dfa0d3e79..ebd8e255d3d 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm @@ -99,21 +99,21 @@ /datum/action/innate/megafauna_attack/create_skull name = "Create Legion Skull" - icon_icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' + button_icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' button_icon_state = "legion_head" chosen_message = "You are now creating legion skulls." chosen_attack_num = 1 /datum/action/innate/megafauna_attack/charge_target name = "Charge Target" - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "sniper_zoom" chosen_message = "You are now charging at your target." chosen_attack_num = 2 /datum/action/innate/megafauna_attack/create_turrets name = "Create Sentinels" - icon_icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' + button_icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' button_icon_state = "legion_turret" chosen_message = "You are now creating legion sentinels." chosen_attack_num = 3 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm index a2c3f4a9445..7545f7d0cc0 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm @@ -75,21 +75,21 @@ Difficulty: Hard /datum/action/innate/megafauna_attack/heavy_stomp name = "Heavy Stomp" - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "sniper_zoom" chosen_message = "You are now stomping the ground around you." chosen_attack_num = 1 /datum/action/innate/megafauna_attack/teleport name = "Teleport" - icon_icon = 'icons/effects/bubblegum.dmi' + button_icon = 'icons/effects/bubblegum.dmi' button_icon_state = "smack ya one" chosen_message = "You are now teleporting at the target you click on." chosen_attack_num = 2 /datum/action/innate/megafauna_attack/shockwave_scream name = "Shockwave Scream" - icon_icon = 'icons/turf/walls/wall.dmi' + button_icon = 'icons/turf/walls/wall.dmi' button_icon_state = "wall-0" chosen_message = "You are now screeching, disorienting targets around you." chosen_attack_num = 3 diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index dca1f2a98b9..633f6d7c23d 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -398,6 +398,7 @@ GLOBAL_LIST_INIT(mimic_blacklist, list(/obj/structure/table, /obj/structure/cabl /datum/action/innate/mimic background_icon_state = "bg_default" + overlay_icon_state = "bg_default_border" /datum/action/innate/mimic/lock name = "Lock/Unlock" diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm index c7bcfaef68e..32edc82a4d1 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm @@ -69,42 +69,43 @@ While using this makes the system rely on OnFire, it still gives options for tim /datum/action/innate/elite_attack name = "Elite Attack" - icon_icon = 'icons/mob/actions/actions_elites.dmi' + button_icon = 'icons/mob/actions/actions_elites.dmi' button_icon_state = "" background_icon_state = "bg_default" + overlay_icon_state = "bg_default_border" ///The displayed message into chat when this attack is selected var/chosen_message ///The internal attack ID for the elite's OpenFire() proc to use var/chosen_attack_num = 0 -/datum/action/innate/elite_attack/CreateButton() +/datum/action/innate/elite_attack/create_button() var/atom/movable/screen/movable/action_button/button = ..() button.maptext = "" - button.maptext_x = 8 - button.maptext_y = 0 + button.maptext_x = 6 + button.maptext_y = 2 button.maptext_width = 24 button.maptext_height = 12 return button /datum/action/innate/elite_attack/process() - if(owner == null) + if(isnull(owner)) STOP_PROCESSING(SSfastprocess, src) qdel(src) return - UpdateButtons() -/datum/action/innate/elite_attack/UpdateButton(atom/movable/screen/movable/action_button/button, status_only = FALSE, force = FALSE) - . = ..() - if(!.) - return - if(status_only) - return + build_all_button_icons(UPDATE_BUTTON_STATUS) + +/datum/action/innate/elite_attack/update_button_status(atom/movable/screen/movable/action_button/button, force = FALSE) var/mob/living/simple_animal/hostile/asteroid/elite/elite_owner = owner + if(!istype(owner)) + button.maptext = "" + return + var/timeleft = max(elite_owner.ranged_cooldown - world.time, 0) if(timeleft == 0) button.maptext = "" else - button.maptext = "[round(timeleft/10, 0.1)]" + button.maptext = MAPTEXT("[round(timeleft/10, 0.1)]") /datum/action/innate/elite_attack/Grant(mob/living/L) if(istype(L, /mob/living/simple_animal/hostile/asteroid/elite)) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm index dc6e70f2fee..c2608930161 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm @@ -51,6 +51,7 @@ /datum/action/innate/goldgrub background_icon_state = "bg_default" + overlay_icon_state = "bg_default_border" /datum/action/innate/goldgrub/spitore name = "Spit Ore" diff --git a/code/modules/mob/living/simple_animal/hostile/netherworld.dm b/code/modules/mob/living/simple_animal/hostile/netherworld.dm index c62230ebbaf..1addafe2e14 100644 --- a/code/modules/mob/living/simple_animal/hostile/netherworld.dm +++ b/code/modules/mob/living/simple_animal/hostile/netherworld.dm @@ -34,6 +34,7 @@ /datum/action/innate/creature background_icon_state = "bg_default" + overlay_icon_state = "bg_default_border" /datum/action/innate/creature/teleport name = "Teleport" diff --git a/code/modules/mob/living/simple_animal/hostile/ooze.dm b/code/modules/mob/living/simple_animal/hostile/ooze.dm index 2445428195e..a33fe4e2560 100644 --- a/code/modules/mob/living/simple_animal/hostile/ooze.dm +++ b/code/modules/mob/living/simple_animal/hostile/ooze.dm @@ -136,7 +136,8 @@ name = "Metabolic boost" desc = "Gain a temporary speed boost. Costs 10 nutrition and slowly raises your temperature" background_icon_state = "bg_hive" - icon_icon = 'icons/mob/actions/actions_slime.dmi' + overlay_icon_state = "bg_hive_border" + button_icon = 'icons/mob/actions/actions_slime.dmi' button_icon_state = "metabolic_boost" check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_IMMOBILE cooldown_time = 24 SECONDS @@ -191,7 +192,8 @@ name = "Consume" desc = "Consume a mob that you are dragging to gain nutrition from them" background_icon_state = "bg_hive" - icon_icon = 'icons/mob/actions/actions_slime.dmi' + overlay_icon_state = "bg_hive_border" + button_icon = 'icons/mob/actions/actions_slime.dmi' button_icon_state = "consume" check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_IMMOBILE ///The mob thats being consumed by this creature @@ -298,7 +300,8 @@ name = "Fire Mending globule" desc = "Fires a mending globule at someone, healing a specific limb of theirs." background_icon_state = "bg_hive" - icon_icon = 'icons/mob/actions/actions_slime.dmi' + overlay_icon_state = "bg_hive_border" + button_icon = 'icons/mob/actions/actions_slime.dmi' button_icon_state = "globules" check_flags = AB_CHECK_CONSCIOUS cooldown_time = 5 SECONDS @@ -411,7 +414,8 @@ name = "Gel Cocoon" desc = "Puts a mob inside of a cocoon, allowing it to slowly heal." background_icon_state = "bg_hive" - icon_icon = 'icons/mob/actions/actions_slime.dmi' + overlay_icon_state = "bg_hive_border" + button_icon = 'icons/mob/actions/actions_slime.dmi' button_icon_state = "gel_cocoon" check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_IMMOBILE cooldown_time = 10 SECONDS diff --git a/code/modules/mob/living/simple_animal/hostile/regalrat.dm b/code/modules/mob/living/simple_animal/hostile/regalrat.dm index 6c80e782eb4..ba3f5282702 100644 --- a/code/modules/mob/living/simple_animal/hostile/regalrat.dm +++ b/code/modules/mob/living/simple_animal/hostile/regalrat.dm @@ -212,8 +212,9 @@ check_flags = AB_CHECK_CONSCIOUS cooldown_time = 6 SECONDS melee_cooldown_time = 0 SECONDS - icon_icon = 'icons/mob/actions/actions_animal.dmi' + button_icon = 'icons/mob/actions/actions_animal.dmi' background_icon_state = "bg_clock" + overlay_icon_state = "bg_clock_border" button_icon_state = "coffer" /datum/action/cooldown/domain/proc/domain() @@ -243,9 +244,10 @@ name = "Raise Army" desc = "Raise an army out of the hordes of mice and pests crawling around the maintenance shafts." check_flags = AB_CHECK_CONSCIOUS - icon_icon = 'icons/mob/actions/actions_animal.dmi' + button_icon = 'icons/mob/actions/actions_animal.dmi' button_icon_state = "riot" background_icon_state = "bg_clock" + overlay_icon_state = "bg_clock_border" cooldown_time = 8 SECONDS melee_cooldown_time = 0 SECONDS diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm index 55cf97c4a7a..9597dff77b6 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm @@ -111,8 +111,9 @@ desc = "Shake loose a few banana peels." cooldown_time = 8 SECONDS button_icon_state = "rustle" - icon_icon = 'icons/mob/actions/actions_clown.dmi' + button_icon = 'icons/mob/actions/actions_clown.dmi' background_icon_state = "bg_nature" + overlay_icon_state = "bg_nature_border" ///which type of peel to spawn var/banana_type = /obj/item/grown/bananapeel ///How many peels to spawn @@ -139,10 +140,11 @@ /datum/action/cooldown/exquisite_bunch name = "Exquisite Bunch" desc = "Pluck your finest bunch of bananas from your head. This bunch is especially nutrious to monkeykind. A gentle tap will trigger an explosive ripening process." - icon_icon = 'icons/obj/hydroponics/harvest.dmi' + button_icon = 'icons/obj/hydroponics/harvest.dmi' cooldown_time = 60 SECONDS button_icon_state = "banana_bunch" background_icon_state = "bg_nature" + overlay_icon_state = "bg_nature_border" ///If we are currently activating our ability. var/activating = FALSE @@ -475,7 +477,8 @@ name = "Regurgitate" desc = "Regurgitates a single item from the depths of your pouch." background_icon_state = "bg_changeling" - icon_icon = 'icons/mob/actions/actions_animal.dmi' + overlay_icon_state = "bg_changeling_border" + button_icon = 'icons/mob/actions/actions_animal.dmi' button_icon_state = "regurgitate" check_flags = AB_CHECK_CONSCIOUS melee_cooldown_time = 0 SECONDS diff --git a/code/modules/mob/living/simple_animal/hostile/vatbeast.dm b/code/modules/mob/living/simple_animal/hostile/vatbeast.dm index c8eb1e505c6..a663b63217e 100644 --- a/code/modules/mob/living/simple_animal/hostile/vatbeast.dm +++ b/code/modules/mob/living/simple_animal/hostile/vatbeast.dm @@ -45,7 +45,8 @@ name = "Tentacle slap" desc = "Slap a creature with your tentacles." background_icon_state = "bg_revenant" - icon_icon = 'icons/mob/actions/actions_animal.dmi' + overlay_icon_state = "bg_revenant_border" + button_icon = 'icons/mob/actions/actions_animal.dmi' button_icon_state = "tentacle_slap" check_flags = AB_CHECK_CONSCIOUS cooldown_time = 12 SECONDS @@ -53,13 +54,14 @@ click_to_activate = TRUE ranged_mousepointer = 'icons/effects/mouse_pointers/supplypod_target.dmi' -/datum/action/cooldown/tentacle_slap/UpdateButton(atom/movable/screen/movable/action_button/button, status_only, force) - . = ..() - if(!button) - return - if(!status_only && button.our_hud.mymob != owner) +/datum/action/cooldown/tentacle_slap/update_button_name(atom/movable/screen/movable/action_button/button, force) + if(button.our_hud.mymob != owner) + // For buttons given to mobs which are not our owner, give it this alt name button.name = "Command Tentacle Slap" button.desc = "Command your steed to slap a creature with its tentacles." + return + + return ..() /datum/action/cooldown/tentacle_slap/set_click_ability(mob/on_who) . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm index 8e74d8b97d0..754346e8cfa 100644 --- a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm +++ b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm @@ -75,8 +75,9 @@ E.Activate() /datum/action/innate/fugu - icon_icon = 'icons/mob/actions/actions_animal.dmi' + button_icon = 'icons/mob/actions/actions_animal.dmi' background_icon_state = "bg_fugu" + overlay_icon_state = "bg_fugu_border" /datum/action/innate/fugu/expand name = "Inflate" diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm index 67ef8c592ce..894d376c48c 100644 --- a/code/modules/mob/living/simple_animal/slime/life.dm +++ b/code/modules/mob/living/simple_animal/slime/life.dm @@ -246,7 +246,7 @@ else if (nutrition >= get_grow_nutrition() && amount_grown < SLIME_EVOLUTION_THRESHOLD) adjust_nutrition(-10 * delta_time) amount_grown++ - update_action_buttons_icon() + update_mob_action_buttons() if(amount_grown >= SLIME_EVOLUTION_THRESHOLD && !buckled && !Target && !ckey) if(is_adult && loc.AllowDrop()) diff --git a/code/modules/mob/living/simple_animal/slime/powers.dm b/code/modules/mob/living/simple_animal/slime/powers.dm index cbf17702b43..572201d336b 100644 --- a/code/modules/mob/living/simple_animal/slime/powers.dm +++ b/code/modules/mob/living/simple_animal/slime/powers.dm @@ -7,8 +7,9 @@ /datum/action/innate/slime check_flags = AB_CHECK_CONSCIOUS - icon_icon = 'icons/mob/actions/actions_slime.dmi' + button_icon = 'icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_alien" + overlay_icon_state = "bg_alien_border" var/needs_growth = NO_GROWTH_NEEDED /datum/action/innate/slime/IsAvailable(feedback = FALSE) diff --git a/code/modules/mod/mod_actions.dm b/code/modules/mod/mod_actions.dm index b966b45c380..48cbf96e021 100644 --- a/code/modules/mod/mod_actions.dm +++ b/code/modules/mod/mod_actions.dm @@ -1,6 +1,7 @@ /datum/action/item_action/mod background_icon_state = "bg_mod" - icon_icon = 'icons/mob/actions/actions_mod.dmi' + overlay_icon_state = "bg_mod_border" + button_icon = 'icons/mob/actions/actions_mod.dmi' check_flags = AB_CHECK_CONSCIOUS /// Whether this action is intended for the AI. Stuff breaks a lot if this is done differently. var/ai_action = FALSE @@ -70,7 +71,7 @@ if(!(trigger_flags & TRIGGER_SECONDARY_ACTION) && !ready) ready = TRUE button_icon_state = "activate-ready" - UpdateButtons() + build_all_button_icons() addtimer(CALLBACK(src, PROC_REF(reset_ready)), 3 SECONDS) return var/obj/item/mod/control/mod = target @@ -81,7 +82,7 @@ /datum/action/item_action/mod/activate/proc/reset_ready() ready = FALSE button_icon_state = initial(button_icon_state) - UpdateButtons() + build_all_button_icons() /datum/action/item_action/mod/activate/ai ai_action = TRUE @@ -132,7 +133,7 @@ module = linked_module name = "Activate [capitalize(linked_module.name)]" desc = "Quickly activate [linked_module]." - icon_icon = linked_module.icon + button_icon = linked_module.icon button_icon_state = linked_module.icon_state RegisterSignal(linked_module, COMSIG_MODULE_ACTIVATED, PROC_REF(on_module_activate)) RegisterSignal(linked_module, COMSIG_MODULE_DEACTIVATED, PROC_REF(on_module_deactivate)) @@ -158,8 +159,8 @@ return module.on_select() -/datum/action/item_action/mod/pinned_module/ApplyIcon(atom/movable/screen/movable/action_button/current_button, force) - . = ..(current_button, force = TRUE) +/datum/action/item_action/mod/pinned_module/apply_button_overlay(atom/movable/screen/movable/action_button/current_button, force) + . = ..() if(override) return var/obj/item/mod/control/mod = target @@ -175,14 +176,14 @@ /datum/action/item_action/mod/pinned_module/proc/on_module_activate(datum/source) SIGNAL_HANDLER - UpdateButtons() + build_all_button_icons() /datum/action/item_action/mod/pinned_module/proc/on_module_deactivate(datum/source) SIGNAL_HANDLER - UpdateButtons() + build_all_button_icons() /datum/action/item_action/mod/pinned_module/proc/on_module_use(datum/source) SIGNAL_HANDLER - UpdateButtons() + build_all_button_icons() diff --git a/code/modules/mod/modules/module_pathfinder.dm b/code/modules/mod/modules/module_pathfinder.dm index 3863fb2f176..e194dac7664 100644 --- a/code/modules/mod/modules/module_pathfinder.dm +++ b/code/modules/mod/modules/module_pathfinder.dm @@ -146,7 +146,8 @@ desc = "Recall a MODsuit anyplace, anytime." check_flags = AB_CHECK_CONSCIOUS background_icon_state = "bg_mod" - icon_icon = 'icons/mob/actions/actions_mod.dmi' + overlay_icon_state = "bg_mod_border" + button_icon = 'icons/mob/actions/actions_mod.dmi' button_icon_state = "recall" /// The cooldown for the recall. COOLDOWN_DECLARE(recall_cooldown) diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index e758aaee903..ad646454cae 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -683,7 +683,7 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar return FALSE set_light_on(!light_on) update_appearance() - update_action_buttons(force = TRUE) //force it because we added an overlay, not changed its icon + update_item_action_buttons(force = TRUE) //force it because we added an overlay, not changed its icon return TRUE /** diff --git a/code/modules/pai/actions.dm b/code/modules/pai/actions.dm index cd1015d2506..0d22d828382 100644 --- a/code/modules/pai/actions.dm +++ b/code/modules/pai/actions.dm @@ -1,6 +1,6 @@ /datum/action/innate/pai name = "PAI Action" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' + button_icon = 'icons/mob/actions/actions_silicon.dmi' var/mob/living/silicon/pai/pai_owner /datum/action/innate/pai/Trigger(trigger_flags) @@ -12,6 +12,7 @@ name = "Software Interface" button_icon_state = "pai" background_icon_state = "bg_tech" + overlay_icon_state = "bg_tech_border" /datum/action/innate/pai/software/Trigger(trigger_flags) ..() @@ -21,6 +22,7 @@ name = "Toggle Holoform" button_icon_state = "pai_holoform" background_icon_state = "bg_tech" + overlay_icon_state = "bg_tech_border" /datum/action/innate/pai/shell/Trigger(trigger_flags) ..() @@ -33,6 +35,7 @@ name = "Holochassis Appearance Composite" button_icon_state = "pai_chassis" background_icon_state = "bg_tech" + overlay_icon_state = "bg_tech_border" /datum/action/innate/pai/chassis/Trigger(trigger_flags) ..() @@ -42,6 +45,7 @@ name = "Rest" button_icon_state = "pai_rest" background_icon_state = "bg_tech" + overlay_icon_state = "bg_tech_border" /datum/action/innate/pai/rest/Trigger(trigger_flags) ..() @@ -49,9 +53,10 @@ /datum/action/innate/pai/light name = "Toggle Integrated Lights" - icon_icon = 'icons/mob/actions/actions_spells.dmi' + button_icon = 'icons/mob/actions/actions_spells.dmi' button_icon_state = "emp" background_icon_state = "bg_tech" + overlay_icon_state = "bg_tech_border" /datum/action/innate/pai/light/Trigger(trigger_flags) ..() diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 436af7d97f0..4a7f9274ba0 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -457,7 +457,7 @@ for(var/obj/item/item in buckled_mob.held_items) if(istype(item, /obj/item/turret_control)) qdel(item) - UpdateButtons() + build_all_button_icons() return playsound(proto_emitter,'sound/mecha/mechmove01.ogg', 50, TRUE) name = "Switch to Automatic Firing" @@ -474,7 +474,7 @@ else //Entries in the list should only ever be items or null, so if it's not an item, we can assume it's an empty hand var/obj/item/turret_control/turret_control = new /obj/item/turret_control() buckled_mob.put_in_hands(turret_control) - UpdateButtons() + build_all_button_icons() /obj/item/turret_control diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index 3d8331ce561..dd5d08cdac6 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -43,7 +43,7 @@ playsound(user, 'sound/weapons/empty.ogg', 100, TRUE) update_appearance() - update_action_buttons() + update_item_action_buttons() /obj/item/gun/ballistic/automatic/proto name = "\improper Nanotrasen Saber SMG" diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm index 309c1a27562..8358b883906 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm @@ -340,10 +340,10 @@ shock_timer = 0 //immune to shocks M.AdjustAllImmobility(-40 *REM * delta_time) M.adjustStaminaLoss(-2 * REM * delta_time, 0) - if(isluminescent(M)) + if(is_species(M, /datum/species/jelly/luminescent)) var/mob/living/carbon/human/H = M var/datum/species/jelly/luminescent/L = H.dna.species - L.extract_cooldown = max(L.extract_cooldown - (20 * REM * delta_time), 0) + L.extract_cooldown = max(L.extract_cooldown - (2 SECONDS * REM * delta_time), 0) ..() /datum/reagent/firefighting_foam diff --git a/code/modules/research/xenobiology/crossbreeding/_clothing.dm b/code/modules/research/xenobiology/crossbreeding/_clothing.dm index 76fca921f12..501a60d402a 100644 --- a/code/modules/research/xenobiology/crossbreeding/_clothing.dm +++ b/code/modules/research/xenobiology/crossbreeding/_clothing.dm @@ -61,7 +61,7 @@ Slimecrossing Armor /datum/action/item_action/change_prism_colour name = "Adjust Prismatic Lens" - icon_icon = 'icons/obj/xenobiology/slimecrossing.dmi' + button_icon = 'icons/obj/xenobiology/slimecrossing.dmi' button_icon_state = "prismcolor" /datum/action/item_action/change_prism_colour/Trigger(trigger_flags) @@ -75,7 +75,7 @@ Slimecrossing Armor /datum/action/item_action/place_light_prism name = "Fabricate Light Prism" - icon_icon = 'icons/obj/xenobiology/slimecrossing.dmi' + button_icon = 'icons/obj/xenobiology/slimecrossing.dmi' button_icon_state = "lightprism" /datum/action/item_action/place_light_prism/Trigger(trigger_flags) diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index 8e5e419a10e..c741743118f 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -147,7 +147,7 @@ /datum/action/innate/slime_place name = "Place Slimes" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' + button_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "slime_down" /datum/action/innate/slime_place/Activate() @@ -167,7 +167,7 @@ /datum/action/innate/slime_pick_up name = "Pick up Slime" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' + button_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "slime_up" /datum/action/innate/slime_pick_up/Activate() @@ -193,7 +193,7 @@ /datum/action/innate/feed_slime name = "Feed Slimes" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' + button_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "monkey_down" /datum/action/innate/feed_slime/Activate() @@ -219,7 +219,7 @@ /datum/action/innate/monkey_recycle name = "Recycle Monkeys" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' + button_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "monkey_up" /datum/action/innate/monkey_recycle/Activate() @@ -249,7 +249,7 @@ /datum/action/innate/slime_scan name = "Scan Slime" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' + button_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "slime_scan" /datum/action/innate/slime_scan/Activate() @@ -266,7 +266,7 @@ /datum/action/innate/feed_potion name = "Apply Potion" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' + button_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "slime_potion" /datum/action/innate/feed_potion/Activate() @@ -290,7 +290,7 @@ /datum/action/innate/hotkey_help name = "Hotkey Help" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' + button_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "hotkey_help" /datum/action/innate/hotkey_help/Activate() diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm index 20cfadabfa0..b05a40e88da 100644 --- a/code/modules/shuttle/navigation_computer.dm +++ b/code/modules/shuttle/navigation_computer.dm @@ -327,7 +327,7 @@ /datum/action/innate/shuttledocker_rotate name = "Rotate" - icon_icon = 'icons/mob/actions/actions_mecha.dmi' + button_icon = 'icons/mob/actions/actions_mecha.dmi' button_icon_state = "mech_cycle_equip_off" /datum/action/innate/shuttledocker_rotate/Activate() @@ -339,7 +339,7 @@ /datum/action/innate/shuttledocker_place name = "Place" - icon_icon = 'icons/mob/actions/actions_mecha.dmi' + button_icon = 'icons/mob/actions/actions_mecha.dmi' button_icon_state = "mech_zoom_off" /datum/action/innate/shuttledocker_place/Activate() diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index 221596c5ae5..a6af8d0e5ba 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -37,14 +37,17 @@ * this can be extended if you wish to add unique effects on level up for wizards. * - [delevel_spell][/datum/action/cooldown/spell/delevel_spell] is where the process of removing a spell level is handled. * this can be extended if you wish to undo unique effects on level up for wizards. - * - [update_spell_name][/datum/action/cooldown/spell/update_spell_name] updates the prefix of the spell name based on its level. + * - [get_spell_title][/datum/action/cooldown/spell/get_spell_title] returns the prefix of the spell name based on its level, + * for use in updating the button name / spell name. */ /datum/action/cooldown/spell name = "Spell" desc = "A wizard spell." background_icon_state = "bg_spell" - icon_icon = 'icons/mob/actions/actions_spells.dmi' + button_icon = 'icons/mob/actions/actions_spells.dmi' button_icon_state = "spell_default" + overlay_icon_state = "bg_spell_border" + active_overlay_icon_state = "bg_spell_border_active_red" check_flags = AB_CHECK_CONSCIOUS panel = "Spells" melee_cooldown_time = 0 SECONDS @@ -96,15 +99,15 @@ // Register some signals so our button's icon stays up to date if(spell_requirements & SPELL_REQUIRES_OFF_CENTCOM) - RegisterSignal(owner, COMSIG_MOVABLE_Z_CHANGED, PROC_REF(update_icon_on_signal)) + RegisterSignal(owner, COMSIG_MOVABLE_Z_CHANGED, PROC_REF(update_status_on_signal)) if(spell_requirements & (SPELL_REQUIRES_NO_ANTIMAGIC|SPELL_REQUIRES_WIZARD_GARB)) - RegisterSignal(owner, COMSIG_MOB_EQUIPPED_ITEM, PROC_REF(update_icon_on_signal)) + RegisterSignal(owner, COMSIG_MOB_EQUIPPED_ITEM, PROC_REF(update_status_on_signal)) if(invocation_type == INVOCATION_EMOTE) - RegisterSignals(owner, list(SIGNAL_ADDTRAIT(TRAIT_EMOTEMUTE), SIGNAL_REMOVETRAIT(TRAIT_EMOTEMUTE)), PROC_REF(update_icon_on_signal)) + RegisterSignals(owner, list(SIGNAL_ADDTRAIT(TRAIT_EMOTEMUTE), SIGNAL_REMOVETRAIT(TRAIT_EMOTEMUTE)), PROC_REF(update_status_on_signal)) if(invocation_type == INVOCATION_SHOUT || invocation_type == INVOCATION_WHISPER) - RegisterSignals(owner, list(SIGNAL_ADDTRAIT(TRAIT_MUTE), SIGNAL_REMOVETRAIT(TRAIT_MUTE)), PROC_REF(update_icon_on_signal)) + RegisterSignals(owner, list(SIGNAL_ADDTRAIT(TRAIT_MUTE), SIGNAL_REMOVETRAIT(TRAIT_MUTE)), PROC_REF(update_status_on_signal)) - RegisterSignals(owner, list(COMSIG_MOB_ENTER_JAUNT, COMSIG_MOB_AFTER_EXIT_JAUNT), PROC_REF(update_icon_on_signal)) + RegisterSignals(owner, list(COMSIG_MOB_ENTER_JAUNT, COMSIG_MOB_AFTER_EXIT_JAUNT), PROC_REF(update_status_on_signal)) owner.client?.stat_panel.send_message("check_spells") /datum/action/cooldown/spell/Remove(mob/living/remove_from) @@ -246,7 +249,7 @@ // And then proceed with the aftermath of the cast // Final effects that happen after all the casting is done can go here after_cast(cast_on) - UpdateButtons() + build_all_button_icons() return TRUE @@ -371,7 +374,7 @@ /datum/action/cooldown/spell/proc/reset_spell_cooldown() SEND_SIGNAL(src, COMSIG_SPELL_CAST_RESET) next_use_time -= cooldown_time // Basically, ensures that the ability can be used now - UpdateButtons() + build_all_button_icons() /** * Levels the spell up a single level, reducing the cooldown. @@ -388,7 +391,7 @@ spell_level++ cooldown_time = max(cooldown_time - cooldown_reduction_per_rank, 0.25 SECONDS) // 0 second CD starts to break things. - update_spell_name() + build_all_button_icons(UPDATE_BUTTON_NAME) return TRUE /** @@ -408,25 +411,25 @@ else cooldown_time = max(cooldown_time + cooldown_reduction_per_rank, initial(cooldown_time)) - update_spell_name() + build_all_button_icons(UPDATE_BUTTON_NAME) return TRUE -/** - * Updates the spell's name based on its level. - */ -/datum/action/cooldown/spell/proc/update_spell_name() - var/spell_title = "" +/datum/action/cooldown/spell/update_button_name(atom/movable/screen/movable/action_button/button, force) + name = "[get_spell_title()][initial(name)]" + return ..() + +/// Gets the title of the spell based on its level. +/datum/action/cooldown/spell/proc/get_spell_title() switch(spell_level) if(2) - spell_title = "Efficient " + return "Efficient " if(3) - spell_title = "Quickened " + return "Quickened " if(4) - spell_title = "Free " + return "Free " if(5) - spell_title = "Instant " + return "Instant " if(6) - spell_title = "Ludicrous " + return "Ludicrous " - name = "[spell_title][initial(name)]" - UpdateButtons() + return "" diff --git a/code/modules/spells/spell_types/aoe_spell/area_conversion.dm b/code/modules/spells/spell_types/aoe_spell/area_conversion.dm index bde25b77933..f75c3958685 100644 --- a/code/modules/spells/spell_types/aoe_spell/area_conversion.dm +++ b/code/modules/spells/spell_types/aoe_spell/area_conversion.dm @@ -2,7 +2,9 @@ name = "Area Conversion" desc = "This spell instantly converts a small area around you." background_icon_state = "bg_cult" - icon_icon = 'icons/mob/actions/actions_cult.dmi' + overlay_icon_state = "bg_cult_border" + + button_icon = 'icons/mob/actions/actions_cult.dmi' button_icon_state = "areaconvert" school = SCHOOL_TRANSMUTATION diff --git a/code/modules/spells/spell_types/aoe_spell/magic_missile.dm b/code/modules/spells/spell_types/aoe_spell/magic_missile.dm index be8878403e0..18278fb593a 100644 --- a/code/modules/spells/spell_types/aoe_spell/magic_missile.dm +++ b/code/modules/spells/spell_types/aoe_spell/magic_missile.dm @@ -39,6 +39,8 @@ name = "Lesser Magic Missile" desc = "This spell fires several, slow moving, magic projectiles at nearby targets." background_icon_state = "bg_demon" + overlay_icon_state = "bg_demon_border" + cooldown_time = 40 SECONDS invocation_type = INVOCATION_NONE diff --git a/code/modules/spells/spell_types/aoe_spell/repulse.dm b/code/modules/spells/spell_types/aoe_spell/repulse.dm index 9e24ccde61a..2e20e724988 100644 --- a/code/modules/spells/spell_types/aoe_spell/repulse.dm +++ b/code/modules/spells/spell_types/aoe_spell/repulse.dm @@ -64,7 +64,8 @@ name = "Tail Sweep" desc = "Throw back attackers with a sweep of your tail." background_icon_state = "bg_alien" - icon_icon = 'icons/mob/actions/actions_xeno.dmi' + overlay_icon_state = "bg_alien_border" + button_icon = 'icons/mob/actions/actions_xeno.dmi' button_icon_state = "tailsweep" panel = "Alien" sound = 'sound/magic/tail_swing.ogg' diff --git a/code/modules/spells/spell_types/charged/_charged.dm b/code/modules/spells/spell_types/charged/_charged.dm index 9cd81c0a834..47e5666116e 100644 --- a/code/modules/spells/spell_types/charged/_charged.dm +++ b/code/modules/spells/spell_types/charged/_charged.dm @@ -5,6 +5,8 @@ * To use this template, all that's needed is for cast() to be implemented. */ /datum/action/cooldown/spell/charged + active_overlay_icon_state = "bg_spell_border_active_yellow" + /// What message do we display when we start chanelling? var/channel_message /// Whether we're currently channelling / charging the spell @@ -51,6 +53,9 @@ stop_channel_effect(remove_from) return ..() +/datum/action/cooldown/spell/charged/is_action_active(atom/movable/screen/movable/action_button/current_button) + return currently_channeling + /datum/action/cooldown/spell/charged/can_cast_spell(feedback = TRUE) . = ..() if(!.) @@ -76,7 +81,7 @@ cast_on.add_overlay(charge_overlay_instance) currently_channeling = TRUE - UpdateButtons(status_only = TRUE) + build_all_button_icons(UPDATE_BUTTON_STATUS) if(!do_after(cast_on, channel_time, timed_action_flags = channel_flags)) stop_channel_effect(cast_on) return . | SPELL_CANCEL_CAST @@ -104,7 +109,7 @@ playsound(for_who, sound(null, repeat = 0, channel = CHANNEL_CHARGED_SPELL), 50, FALSE) currently_channeling = FALSE - UpdateButtons(status_only = TRUE) + build_all_button_icons(UPDATE_BUTTON_STATUS) /** * ### Channelled "Beam" spells diff --git a/code/modules/spells/spell_types/conjure/constructs.dm b/code/modules/spells/spell_types/conjure/constructs.dm index 50124ce1319..2af3034f078 100644 --- a/code/modules/spells/spell_types/conjure/constructs.dm +++ b/code/modules/spells/spell_types/conjure/constructs.dm @@ -1,7 +1,7 @@ /datum/action/cooldown/spell/conjure/construct name = "Summon Construct Shell" desc = "This spell conjures a construct which may be controlled by Shades." - icon_icon = 'icons/mob/actions/actions_cult.dmi' + button_icon = 'icons/mob/actions/actions_cult.dmi' button_icon_state = "artificer" sound = 'sound/magic/summonitems_generic.ogg' @@ -17,4 +17,6 @@ /datum/action/cooldown/spell/conjure/construct/lesser // Used by artificers. name = "Create Construct Shell" background_icon_state = "bg_demon" + overlay_icon_state = "bg_demon_border" + cooldown_time = 3 MINUTES diff --git a/code/modules/spells/spell_types/conjure/cult_turfs.dm b/code/modules/spells/spell_types/conjure/cult_turfs.dm index 7fec43aa8d4..faaac472840 100644 --- a/code/modules/spells/spell_types/conjure/cult_turfs.dm +++ b/code/modules/spells/spell_types/conjure/cult_turfs.dm @@ -2,7 +2,9 @@ name = "Summon Cult Floor" desc = "This spell constructs a cult floor." background_icon_state = "bg_cult" - icon_icon = 'icons/mob/actions/actions_cult.dmi' + overlay_icon_state = "bg_cult_border" + + button_icon = 'icons/mob/actions/actions_cult.dmi' button_icon_state = "floorconstruct" school = SCHOOL_CONJURATION @@ -17,7 +19,9 @@ name = "Summon Cult Wall" desc = "This spell constructs a cult wall." background_icon_state = "bg_cult" - icon_icon = 'icons/mob/actions/actions_cult.dmi' + overlay_icon_state = "bg_cult_border" + + button_icon = 'icons/mob/actions/actions_cult.dmi' button_icon_state = "lesserconstruct" school = SCHOOL_CONJURATION diff --git a/code/modules/spells/spell_types/conjure/invisible_chair.dm b/code/modules/spells/spell_types/conjure/invisible_chair.dm index 1fa727a68a5..6a987be0fea 100644 --- a/code/modules/spells/spell_types/conjure/invisible_chair.dm +++ b/code/modules/spells/spell_types/conjure/invisible_chair.dm @@ -2,7 +2,8 @@ name = "Invisible Chair" desc = "The mime's performance transmutates a chair into physical reality." background_icon_state = "bg_mime" - icon_icon = 'icons/mob/actions/actions_mime.dmi' + overlay_icon_state = "bg_mime_border" + button_icon = 'icons/mob/actions/actions_mime.dmi' button_icon_state = "invisible_chair" check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED panel = "Mime" diff --git a/code/modules/spells/spell_types/conjure/invisible_wall.dm b/code/modules/spells/spell_types/conjure/invisible_wall.dm index 3124277453f..f081ef1021b 100644 --- a/code/modules/spells/spell_types/conjure/invisible_wall.dm +++ b/code/modules/spells/spell_types/conjure/invisible_wall.dm @@ -2,7 +2,8 @@ name = "Invisible Wall" desc = "The mime's performance transmutates a wall into physical reality." background_icon_state = "bg_mime" - icon_icon = 'icons/mob/actions/actions_mime.dmi' + overlay_icon_state = "bg_mime_border" + button_icon = 'icons/mob/actions/actions_mime.dmi' button_icon_state = "invisible_wall" check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED panel = "Mime" diff --git a/code/modules/spells/spell_types/conjure/soulstone.dm b/code/modules/spells/spell_types/conjure/soulstone.dm index cce5d1ab797..f8fad042cbb 100644 --- a/code/modules/spells/spell_types/conjure/soulstone.dm +++ b/code/modules/spells/spell_types/conjure/soulstone.dm @@ -2,7 +2,9 @@ name = "Summon Soulstone" desc = "This spell reaches into Nar'Sie's realm, summoning one of the legendary fragments across time and space." background_icon_state = "bg_demon" - icon_icon = 'icons/mob/actions/actions_cult.dmi' + overlay_icon_state = "bg_demon_border" + + button_icon = 'icons/mob/actions/actions_cult.dmi' button_icon_state = "summonsoulstone" school = SCHOOL_CONJURATION diff --git a/code/modules/spells/spell_types/conjure_item/invisible_box.dm b/code/modules/spells/spell_types/conjure_item/invisible_box.dm index adc66994bd8..3ff8abdded9 100644 --- a/code/modules/spells/spell_types/conjure_item/invisible_box.dm +++ b/code/modules/spells/spell_types/conjure_item/invisible_box.dm @@ -4,7 +4,8 @@ name = "Invisible Box" desc = "The mime's performance transmutates a box into physical reality." background_icon_state = "bg_mime" - icon_icon = 'icons/mob/actions/actions_mime.dmi' + overlay_icon_state = "bg_mime_border" + button_icon = 'icons/mob/actions/actions_mime.dmi' button_icon_state = "invisible_box" check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED panel = "Mime" diff --git a/code/modules/spells/spell_types/conjure_item/snowball.dm b/code/modules/spells/spell_types/conjure_item/snowball.dm index 79439b55017..ffd6d8d5e54 100644 --- a/code/modules/spells/spell_types/conjure_item/snowball.dm +++ b/code/modules/spells/spell_types/conjure_item/snowball.dm @@ -1,7 +1,7 @@ /datum/action/cooldown/spell/conjure_item/snowball name = "Snowball" desc = "Concentrates cryokinetic forces to create snowballs, useful for throwing at people." - icon_icon = 'icons/obj/toys/toy.dmi' + button_icon = 'icons/obj/toys/toy.dmi' button_icon_state = "snowball" spell_requirements = NONE diff --git a/code/modules/spells/spell_types/jaunt/bloodcrawl.dm b/code/modules/spells/spell_types/jaunt/bloodcrawl.dm index bf9b0f2876f..ce514b004a5 100644 --- a/code/modules/spells/spell_types/jaunt/bloodcrawl.dm +++ b/code/modules/spells/spell_types/jaunt/bloodcrawl.dm @@ -7,7 +7,9 @@ name = "Blood Crawl" desc = "Allows you to phase in and out of existance via pools of blood." background_icon_state = "bg_demon" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + overlay_icon_state = "bg_demon_border" + + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "bloodcrawl" spell_requirements = NONE @@ -23,7 +25,7 @@ /datum/action/cooldown/spell/jaunt/bloodcrawl/Grant(mob/grant_to) . = ..() - RegisterSignal(grant_to, COMSIG_MOVABLE_MOVED, PROC_REF(update_icon_on_signal)) + RegisterSignal(grant_to, COMSIG_MOVABLE_MOVED, PROC_REF(update_status_on_signal)) /datum/action/cooldown/spell/jaunt/bloodcrawl/Remove(mob/remove_from) . = ..() @@ -87,7 +89,7 @@ jaunter.notransform = FALSE return FALSE - RegisterSignal(holder, COMSIG_MOVABLE_MOVED, PROC_REF(update_icon_on_signal)) + RegisterSignal(holder, COMSIG_MOVABLE_MOVED, PROC_REF(update_status_on_signal)) if(equip_blood_hands && iscarbon(jaunter)) jaunter.drop_all_held_items() // Give them some bloody hands to prevent them from doing things diff --git a/code/modules/spells/spell_types/jaunt/ethereal_jaunt.dm b/code/modules/spells/spell_types/jaunt/ethereal_jaunt.dm index bbcc6300717..b4414c99796 100644 --- a/code/modules/spells/spell_types/jaunt/ethereal_jaunt.dm +++ b/code/modules/spells/spell_types/jaunt/ethereal_jaunt.dm @@ -207,7 +207,9 @@ name = "Phase Shift" desc = "This spell allows you to pass through walls." background_icon_state = "bg_demon" - icon_icon = 'icons/mob/actions/actions_cult.dmi' + overlay_icon_state = "bg_demon_border" + + button_icon = 'icons/mob/actions/actions_cult.dmi' button_icon_state = "phaseshift" cooldown_time = 25 SECONDS diff --git a/code/modules/spells/spell_types/jaunt/shadow_walk.dm b/code/modules/spells/spell_types/jaunt/shadow_walk.dm index 9f72f953e19..c68b69005ab 100644 --- a/code/modules/spells/spell_types/jaunt/shadow_walk.dm +++ b/code/modules/spells/spell_types/jaunt/shadow_walk.dm @@ -2,7 +2,8 @@ name = "Shadow Walk" desc = "Grants unlimited movement in darkness." background_icon_state = "bg_alien" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + overlay_icon_state = "bg_alien_border" + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "ninja_cloak" spell_requirements = NONE @@ -10,7 +11,7 @@ /datum/action/cooldown/spell/jaunt/shadow_walk/Grant(mob/grant_to) . = ..() - RegisterSignal(grant_to, COMSIG_MOVABLE_MOVED, PROC_REF(update_icon_on_signal)) + RegisterSignal(grant_to, COMSIG_MOVABLE_MOVED, PROC_REF(update_status_on_signal)) /datum/action/cooldown/spell/jaunt/shadow_walk/Remove(mob/remove_from) . = ..() diff --git a/code/modules/spells/spell_types/list_target/telepathy.dm b/code/modules/spells/spell_types/list_target/telepathy.dm index e67fd723342..1b00ed0f4be 100644 --- a/code/modules/spells/spell_types/list_target/telepathy.dm +++ b/code/modules/spells/spell_types/list_target/telepathy.dm @@ -2,7 +2,7 @@ /datum/action/cooldown/spell/list_target/telepathy name = "Telepathy" desc = "Telepathically transmits a message to the target." - icon_icon = 'icons/mob/actions/actions_revenant.dmi' + button_icon = 'icons/mob/actions/actions_revenant.dmi' button_icon_state = "r_transmit" spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC diff --git a/code/modules/spells/spell_types/pointed/_pointed.dm b/code/modules/spells/spell_types/pointed/_pointed.dm index 8ddbd8f4fc9..b18669d6f9e 100644 --- a/code/modules/spells/spell_types/pointed/_pointed.dm +++ b/code/modules/spells/spell_types/pointed/_pointed.dm @@ -10,8 +10,6 @@ /datum/action/cooldown/spell/pointed click_to_activate = TRUE - /// The base icon state of the spell's button icon, used for editing the icon "on" and "off" - var/base_icon_state /// Message showing to the spell owner upon activating pointed spell. var/active_msg /// Message showing to the spell owner upon deactivating pointed spell. @@ -53,9 +51,7 @@ SHOULD_CALL_PARENT(TRUE) to_chat(on_who, span_notice("[active_msg] Left-click to cast the spell on a target!")) - if(base_icon_state) - button_icon_state = "[base_icon_state]1" - UpdateButtons() + build_all_button_icons() return TRUE /// Called when the spell is deactivated / the click ability is unset from our spell @@ -65,9 +61,7 @@ if(refund_cooldown) // Only send the "deactivation" message if they're willingly disabling the ability to_chat(on_who, span_notice("[deactive_msg]")) - if(base_icon_state) - button_icon_state = "[base_icon_state]0" - UpdateButtons() + build_all_button_icons() return TRUE /datum/action/cooldown/spell/pointed/InterceptClickOn(mob/living/caller, params, atom/click_target) diff --git a/code/modules/spells/spell_types/pointed/abyssal_gaze.dm b/code/modules/spells/spell_types/pointed/abyssal_gaze.dm index 1a7243fce52..cfa6ea5dbcb 100644 --- a/code/modules/spells/spell_types/pointed/abyssal_gaze.dm +++ b/code/modules/spells/spell_types/pointed/abyssal_gaze.dm @@ -4,7 +4,9 @@ desc = "This spell instills a deep terror in your target, temporarily chilling and blinding it." ranged_mousepointer = 'icons/effects/mouse_pointers/cult_target.dmi' background_icon_state = "bg_demon" - icon_icon = 'icons/mob/actions/actions_cult.dmi' + overlay_icon_state = "bg_demon_border" + + button_icon = 'icons/mob/actions/actions_cult.dmi' button_icon_state = "abyssal_gaze" school = SCHOOL_EVOCATION diff --git a/code/modules/spells/spell_types/pointed/dominate.dm b/code/modules/spells/spell_types/pointed/dominate.dm index f5b8aaa9c8c..7d2c587a222 100644 --- a/code/modules/spells/spell_types/pointed/dominate.dm +++ b/code/modules/spells/spell_types/pointed/dominate.dm @@ -3,7 +3,9 @@ desc = "This spell dominates the mind of a lesser creature to the will of Nar'Sie, \ allying it only to her direct followers." background_icon_state = "bg_demon" - icon_icon = 'icons/mob/actions/actions_cult.dmi' + overlay_icon_state = "bg_demon_border" + + button_icon = 'icons/mob/actions/actions_cult.dmi' button_icon_state = "dominate" ranged_mousepointer = 'icons/effects/mouse_pointers/cult_target.dmi' diff --git a/code/modules/spells/spell_types/pointed/finger_guns.dm b/code/modules/spells/spell_types/pointed/finger_guns.dm index 3f53e7d6242..5f1271b7b81 100644 --- a/code/modules/spells/spell_types/pointed/finger_guns.dm +++ b/code/modules/spells/spell_types/pointed/finger_guns.dm @@ -3,7 +3,8 @@ desc = "Shoot up to three mimed bullets from your fingers that damage and mute their targets. \ Can't be used if you have something in your hands." background_icon_state = "bg_mime" - icon_icon = 'icons/mob/actions/actions_mime.dmi' + overlay_icon_state = "bg_mime_border" + button_icon = 'icons/mob/actions/actions_mime.dmi' button_icon_state = "finger_guns0" check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED panel = "Mime" @@ -20,7 +21,6 @@ antimagic_flags = NONE spell_max_level = 1 - base_icon_state = "finger_guns" active_msg = "You draw your fingers!" deactive_msg = "You put your fingers at ease. Another time." cast_range = 20 diff --git a/code/modules/spells/spell_types/pointed/fireball.dm b/code/modules/spells/spell_types/pointed/fireball.dm index 47fd05c0f46..e818de97501 100644 --- a/code/modules/spells/spell_types/pointed/fireball.dm +++ b/code/modules/spells/spell_types/pointed/fireball.dm @@ -12,7 +12,6 @@ invocation_type = INVOCATION_SHOUT spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC - base_icon_state = "fireball" active_msg = "You prepare to cast your fireball spell!" deactive_msg = "You extinguish your fireball... for now." cast_range = 8 diff --git a/code/modules/spells/spell_types/pointed/lightning_bolt.dm b/code/modules/spells/spell_types/pointed/lightning_bolt.dm index e88e3523571..76d9665e711 100644 --- a/code/modules/spells/spell_types/pointed/lightning_bolt.dm +++ b/code/modules/spells/spell_types/pointed/lightning_bolt.dm @@ -1,7 +1,8 @@ /datum/action/cooldown/spell/pointed/projectile/lightningbolt name = "Lightning Bolt" desc = "Fire a lightning bolt at your foes! It will jump between targets, but can't knock them down." - button_icon_state = "lightning0" + button_icon_state = "lightning" + active_overlay_icon_state = "bg_spell_border_active_yellow" sound = 'sound/magic/lightningbolt.ogg' school = SCHOOL_EVOCATION @@ -12,7 +13,6 @@ invocation_type = INVOCATION_SHOUT spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC - base_icon_state = "lightning" active_msg = "You energize your hands with arcane lightning!" deactive_msg = "You let the energy flow out of your hands back into yourself..." projectile_type = /obj/projectile/magic/aoe/lightning diff --git a/code/modules/spells/spell_types/pointed/spell_cards.dm b/code/modules/spells/spell_types/pointed/spell_cards.dm index 6f44f72afdf..eb471e6eec4 100644 --- a/code/modules/spells/spell_types/pointed/spell_cards.dm +++ b/code/modules/spells/spell_types/pointed/spell_cards.dm @@ -13,7 +13,6 @@ invocation_type = INVOCATION_SHOUT spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC - base_icon_state = "spellcard" cast_range = 40 projectile_type = /obj/projectile/magic/spellcard projectile_amount = 5 diff --git a/code/modules/spells/spell_types/pointed/swap.dm b/code/modules/spells/spell_types/pointed/swap.dm index 65344df99a6..965bf51af91 100644 --- a/code/modules/spells/spell_types/pointed/swap.dm +++ b/code/modules/spells/spell_types/pointed/swap.dm @@ -5,6 +5,7 @@ or else you can click yourself with the RMB to discard your secondary target." button_icon_state = "swap" ranged_mousepointer = 'icons/effects/mouse_pointers/swap_target.dmi' + active_overlay_icon_state = "bg_spell_border_active_blue" school = SCHOOL_TRANSLOCATION cooldown_time = 30 SECONDS @@ -17,9 +18,14 @@ smoke_type = /datum/effect_system/fluid_spread/smoke smoke_amt = 0 + /// A variable for holding the second selected target with right click. var/mob/living/second_target +/datum/action/cooldown/spell/pointed/swap/Destroy() + second_target = null + return ..() + /datum/action/cooldown/spell/pointed/swap/is_valid_target(atom/cast_on) . = ..() if(!.) diff --git a/code/modules/spells/spell_types/projectile/juggernaut.dm b/code/modules/spells/spell_types/projectile/juggernaut.dm index 443c9cf62e5..11a2cbb9a15 100644 --- a/code/modules/spells/spell_types/projectile/juggernaut.dm +++ b/code/modules/spells/spell_types/projectile/juggernaut.dm @@ -1,9 +1,11 @@ /datum/action/cooldown/spell/basic_projectile/juggernaut name = "Gauntlet Echo" desc = "Channels energy into your gauntlet - firing its essence forward in a slow moving, yet devastating, attack." - icon_icon = 'icons/mob/actions/actions_cult.dmi' + button_icon = 'icons/mob/actions/actions_cult.dmi' button_icon_state = "cultfist" background_icon_state = "bg_demon" + overlay_icon_state = "bg_demon_border" + sound = 'sound/weapons/resonator_blast.ogg' cooldown_time = 35 SECONDS diff --git a/code/modules/spells/spell_types/self/forcewall.dm b/code/modules/spells/spell_types/self/forcewall.dm index 7a718949845..feab8f305c0 100644 --- a/code/modules/spells/spell_types/self/forcewall.dm +++ b/code/modules/spells/spell_types/self/forcewall.dm @@ -32,7 +32,9 @@ name = "Shield" desc = "This spell creates a temporary forcefield to shield yourself and allies from incoming fire." background_icon_state = "bg_demon" - icon_icon = 'icons/mob/actions/actions_cult.dmi' + overlay_icon_state = "bg_demon_border" + + button_icon = 'icons/mob/actions/actions_cult.dmi' button_icon_state = "cultforcewall" cooldown_time = 40 SECONDS @@ -44,7 +46,8 @@ name = "Invisible Blockade" desc = "Form an invisible three tile wide blockade." background_icon_state = "bg_mime" - icon_icon = 'icons/mob/actions/actions_mime.dmi' + overlay_icon_state = "bg_mime_border" + button_icon = 'icons/mob/actions/actions_mime.dmi' button_icon_state = "invisible_blockade" check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED panel = "Mime" diff --git a/code/modules/spells/spell_types/self/lichdom.dm b/code/modules/spells/spell_types/self/lichdom.dm index 69325f9df97..cf5e3d0893a 100644 --- a/code/modules/spells/spell_types/self/lichdom.dm +++ b/code/modules/spells/spell_types/self/lichdom.dm @@ -4,7 +4,7 @@ Binding your soul to an item will turn you into an immortal Lich. \ So long as the item remains intact, you will revive from death, \ no matter the circumstances." - icon_icon = 'icons/mob/actions/actions_spells.dmi' + button_icon = 'icons/mob/actions/actions_spells.dmi' button_icon_state = "skeleton" school = SCHOOL_NECROMANCY diff --git a/code/modules/spells/spell_types/self/mime_vow.dm b/code/modules/spells/spell_types/self/mime_vow.dm index 9db6b92dd35..f901ab37ac7 100644 --- a/code/modules/spells/spell_types/self/mime_vow.dm +++ b/code/modules/spells/spell_types/self/mime_vow.dm @@ -2,7 +2,8 @@ name = "Speech" desc = "Make (or break) a vow of silence." background_icon_state = "bg_mime" - icon_icon = 'icons/mob/actions/actions_mime.dmi' + overlay_icon_state = "bg_mime_border" + button_icon = 'icons/mob/actions/actions_mime.dmi' button_icon_state = "mime_speech" panel = "Mime" @@ -21,4 +22,4 @@ else to_chat(cast_on, span_notice("You break your vow of silence.")) cast_on.add_mood_event("vow", /datum/mood_event/broken_vow) - cast_on.update_action_buttons_icon() + cast_on.update_mob_action_buttons() diff --git a/code/modules/spells/spell_types/self/smoke.dm b/code/modules/spells/spell_types/self/smoke.dm index b2c7e924f19..516b697e4d6 100644 --- a/code/modules/spells/spell_types/self/smoke.dm +++ b/code/modules/spells/spell_types/self/smoke.dm @@ -31,6 +31,8 @@ name = "Paralysing Smoke" desc = "This spell spawns a cloud of paralysing smoke." background_icon_state = "bg_cult" + overlay_icon_state = "bg_cult_border" + cooldown_time = 20 SECONDS diff --git a/code/modules/spells/spell_types/self/voice_of_god.dm b/code/modules/spells/spell_types/self/voice_of_god.dm index ae4c46a3bb7..7320022fc30 100644 --- a/code/modules/spells/spell_types/self/voice_of_god.dm +++ b/code/modules/spells/spell_types/self/voice_of_god.dm @@ -1,7 +1,7 @@ /datum/action/cooldown/spell/voice_of_god name = "Voice of God" desc = "Speak with an incredibly compelling voice, forcing listeners to obey your commands." - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "voice_of_god" sound = 'sound/magic/clockwork/invoke_general.ogg' diff --git a/code/modules/spells/spell_types/touch/_touch.dm b/code/modules/spells/spell_types/touch/_touch.dm index 384d722bf2c..ce7fced2ce4 100644 --- a/code/modules/spells/spell_types/touch/_touch.dm +++ b/code/modules/spells/spell_types/touch/_touch.dm @@ -49,12 +49,8 @@ /datum/action/cooldown/spell/touch/PreActivate(atom/target) return Activate(target) -/datum/action/cooldown/spell/touch/UpdateButton(atom/movable/screen/movable/action_button/button, status_only = FALSE, force = FALSE) - . = ..() - if(!button) - return - if(attached_hand) - button.color = COLOR_GREEN +/datum/action/cooldown/spell/touch/is_action_active(atom/movable/screen/movable/action_button/current_button) + return !!attached_hand /datum/action/cooldown/spell/touch/set_statpanel_format() . = ..() @@ -125,6 +121,7 @@ reset_spell_cooldown() else StartCooldown() + build_all_button_icons() /// Registers all signal procs for the hand. /datum/action/cooldown/spell/touch/proc/register_hand_signals() diff --git a/code/modules/surgery/dental_implant.dm b/code/modules/surgery/dental_implant.dm index 29904c00264..230b2b038b8 100644 --- a/code/modules/surgery/dental_implant.dm +++ b/code/modules/surgery/dental_implant.dm @@ -29,7 +29,7 @@ var/datum/action/item_action/hands_free/activate_pill/pill_action = new(tool) pill_action.name = "Activate [tool.name]" - pill_action.UpdateButtons() + pill_action.build_all_button_icons() pill_action.target = tool pill_action.Grant(target) //The pill never actually goes in an inventory slot, so the owner doesn't inherit actions from it diff --git a/code/modules/surgery/organs/external/wings/functional_wings.dm b/code/modules/surgery/organs/external/wings/functional_wings.dm index 21151197a57..a4ca3a8a6e0 100644 --- a/code/modules/surgery/organs/external/wings/functional_wings.dm +++ b/code/modules/surgery/organs/external/wings/functional_wings.dm @@ -2,7 +2,7 @@ /datum/action/innate/flight name = "Toggle Flight" check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_IMMOBILE - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "flight" /datum/action/innate/flight/Activate() diff --git a/code/modules/vehicles/mecha/combat/durand.dm b/code/modules/vehicles/mecha/combat/durand.dm index 267f40e5355..69054550632 100644 --- a/code/modules/vehicles/mecha/combat/durand.dm +++ b/code/modules/vehicles/mecha/combat/durand.dm @@ -217,7 +217,7 @@ own integrity back to max. Shield is automatically dropped if we run out of powe for(var/occupant in chassis.occupants) var/datum/action/button = chassis.occupant_actions[occupant][/datum/action/vehicle/sealed/mecha/mech_defense_mode] button.button_icon_state = "mech_defense_mode_[chassis.defense_mode ? "on" : "off"]" - button.UpdateButtons() + button.build_all_button_icons() set_light_on(chassis.defense_mode) diff --git a/code/modules/vehicles/mecha/combat/gygax.dm b/code/modules/vehicles/mecha/combat/gygax.dm index cc8cc517ab9..89c9a1bb131 100644 --- a/code/modules/vehicles/mecha/combat/gygax.dm +++ b/code/modules/vehicles/mecha/combat/gygax.dm @@ -45,7 +45,7 @@ chassis.movedelay += chassis.speed_mod chassis.step_energy_drain = chassis.normal_step_energy_drain chassis.balloon_alert(owner, "you disable the overload") - UpdateButtons() + build_all_button_icons() /obj/vehicle/sealed/mecha/combat/gygax/dark desc = "A lightweight exosuit, painted in a dark scheme. This model appears to have some modifications." diff --git a/code/modules/vehicles/mecha/combat/marauder.dm b/code/modules/vehicles/mecha/combat/marauder.dm index 3870aebe9ff..771ef6646f1 100644 --- a/code/modules/vehicles/mecha/combat/marauder.dm +++ b/code/modules/vehicles/mecha/combat/marauder.dm @@ -70,7 +70,7 @@ SEND_SOUND(owner, sound('sound/mecha/imag_enh.ogg', volume=50)) else owner.client.view_size.resetToDefault() - UpdateButtons() + build_all_button_icons() /obj/vehicle/sealed/mecha/combat/marauder/seraph desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel." @@ -126,4 +126,3 @@ MECHA_POWER = list(), MECHA_ARMOR = list(/obj/item/mecha_parts/mecha_equipment/armor/antiproj_armor_booster), ) - diff --git a/code/modules/vehicles/mecha/combat/phazon.dm b/code/modules/vehicles/mecha/combat/phazon.dm index 804142bfd3a..b8c6091face 100644 --- a/code/modules/vehicles/mecha/combat/phazon.dm +++ b/code/modules/vehicles/mecha/combat/phazon.dm @@ -44,7 +44,7 @@ chassis.damtype = new_damtype button_icon_state = "mech_damtype_[new_damtype]" playsound(chassis, 'sound/mecha/mechmove01.ogg', 50, TRUE) - UpdateButtons() + build_all_button_icons() /datum/action/vehicle/sealed/mecha/mech_toggle_phasing name = "Toggle Phasing" @@ -56,4 +56,4 @@ chassis.phasing = chassis.phasing ? "" : "phasing" button_icon_state = "mech_phasing_[chassis.phasing ? "on" : "off"]" chassis.balloon_alert(owner, "[chassis.phasing ? "enabled" : "disabled"] phasing") - UpdateButtons() + build_all_button_icons() diff --git a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm index 0a81b429e12..4670186c34f 100644 --- a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm +++ b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm @@ -118,7 +118,7 @@ return S_TIMER_COOLDOWN_START(chassis, COOLDOWN_MECHA_SKYFALL, skyfall_cooldown_time) button_icon_state = "mech_savannah_cooldown" - UpdateButtons() + build_all_button_icons() addtimer(CALLBACK(src, PROC_REF(reset_button_icon)), skyfall_cooldown_time) for(var/mob/living/shaken in range(7, chassis)) shake_camera(shaken, 3, 3) @@ -221,7 +221,7 @@ */ /datum/action/vehicle/sealed/mecha/skyfall/proc/reset_button_icon() button_icon_state = "mech_savannah" - UpdateButtons() + build_all_button_icons() /datum/action/vehicle/sealed/mecha/ivanov_strike name = "Ivanov Strike" @@ -256,7 +256,7 @@ */ /datum/action/vehicle/sealed/mecha/ivanov_strike/proc/reset_button_icon() button_icon_state = "mech_ivanov" - UpdateButtons() + build_all_button_icons() /** * ## start_missile_targeting @@ -324,7 +324,7 @@ "explosionSize" = list(0,0,1,2) )) button_icon_state = "mech_ivanov_cooldown" - UpdateButtons() + build_all_button_icons() addtimer(CALLBACK(src, TYPE_PROC_REF(/datum/action/vehicle/sealed/mecha/ivanov_strike, reset_button_icon)), strike_cooldown_time) //misc effects diff --git a/code/modules/vehicles/mecha/mecha_actions.dm b/code/modules/vehicles/mecha/mecha_actions.dm index c7458d6e648..06e66e3be46 100644 --- a/code/modules/vehicles/mecha/mecha_actions.dm +++ b/code/modules/vehicles/mecha/mecha_actions.dm @@ -7,7 +7,7 @@ mecha.chassis = src /datum/action/vehicle/sealed/mecha - icon_icon = 'icons/mob/actions/actions_mecha.dmi' + button_icon = 'icons/mob/actions/actions_mecha.dmi' var/obj/vehicle/sealed/mecha/chassis /datum/action/vehicle/sealed/mecha/Destroy() @@ -43,7 +43,7 @@ button_icon_state = "mech_internals_[chassis.use_internal_tank ? "on" : "off"]" chassis.balloon_alert(owner, "taking air from [chassis.use_internal_tank ? "internal airtank" : "environment"]") chassis.log_message("Now taking air from [chassis.use_internal_tank?"internal airtank":"environment"].", LOG_MECHA) - UpdateButtons() + build_all_button_icons() /datum/action/vehicle/sealed/mecha/mech_toggle_lights name = "Toggle Lights" @@ -65,7 +65,7 @@ chassis.balloon_alert(owner, "toggled lights [chassis.mecha_flags & LIGHTS_ON ? "on":"off"]") playsound(chassis,'sound/machines/clockcult/brass_skewer.ogg', 40, TRUE) chassis.log_message("Toggled lights [(chassis.mecha_flags & LIGHTS_ON)?"on":"off"].", LOG_MECHA) - UpdateButtons() + build_all_button_icons() /datum/action/vehicle/sealed/mecha/mech_view_stats name = "View Stats" @@ -109,7 +109,7 @@ for(var/occupant in occupants) var/datum/action/action = LAZYACCESSASSOC(occupant_actions, occupant, /datum/action/vehicle/sealed/mecha/strafe) - action?.UpdateButtons() + action?.build_all_button_icons() ///swap seats, for two person mecha /datum/action/vehicle/sealed/mecha/swap_seat diff --git a/code/modules/vehicles/mecha/working/clarke.dm b/code/modules/vehicles/mecha/working/clarke.dm index abf5db7b286..886e7abe43a 100644 --- a/code/modules/vehicles/mecha/working/clarke.dm +++ b/code/modules/vehicles/mecha/working/clarke.dm @@ -86,10 +86,10 @@ return var/mob/living/living_owner = owner button_icon_state = "mech_search_ruins_cooldown" - UpdateButtons() + build_all_button_icons() COOLDOWN_START(src, search_cooldown, SEARCH_COOLDOWN) addtimer(VARSET_CALLBACK(src, button_icon_state, "mech_search_ruins"), SEARCH_COOLDOWN) - addtimer(CALLBACK(src, PROC_REF(UpdateButtons)), SEARCH_COOLDOWN) + addtimer(CALLBACK(src, PROC_REF(build_all_button_icons)), SEARCH_COOLDOWN) var/obj/pinpointed_ruin for(var/obj/effect/landmark/ruin/ruin_landmark as anything in GLOB.ruin_landmarks) if(ruin_landmark.z != chassis.z) diff --git a/code/modules/vehicles/vehicle_actions.dm b/code/modules/vehicles/vehicle_actions.dm index 3b4224b3eed..59eb28c3867 100644 --- a/code/modules/vehicles/vehicle_actions.dm +++ b/code/modules/vehicles/vehicle_actions.dm @@ -188,7 +188,7 @@ /datum/action/vehicle check_flags = AB_CHECK_HANDS_BLOCKED | AB_CHECK_IMMOBILE | AB_CHECK_CONSCIOUS - icon_icon = 'icons/mob/actions/actions_vehicle.dmi' + button_icon = 'icons/mob/actions/actions_vehicle.dmi' button_icon_state = "vehicle_eject" var/obj/vehicle/vehicle_target @@ -310,7 +310,7 @@ /datum/action/vehicle/ridden/wheelchair/bell name = "Bell Ring" desc = "Ring the bell." - icon_icon = 'icons/obj/bureaucracy.dmi' + button_icon = 'icons/obj/bureaucracy.dmi' button_icon_state = "desk_bell" check_flags = AB_CHECK_CONSCIOUS var/bell_cooldown @@ -410,7 +410,7 @@ /datum/action/vehicle/sealed/climb_out/vim name = "Eject From Mech" - icon_icon = 'icons/mob/actions/actions_mecha.dmi' + button_icon = 'icons/mob/actions/actions_mecha.dmi' button_icon_state = "mech_eject" /datum/action/vehicle/sealed/noise diff --git a/code/modules/wiremod/shell/brain_computer_interface.dm b/code/modules/wiremod/shell/brain_computer_interface.dm index c221dc00ffe..62dd75c293b 100644 --- a/code/modules/wiremod/shell/brain_computer_interface.dm +++ b/code/modules/wiremod/shell/brain_computer_interface.dm @@ -72,7 +72,7 @@ /datum/action/innate/bci_action name = "Action" - icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon = 'icons/mob/actions/actions_items.dmi' check_flags = AB_CHECK_CONSCIOUS button_icon_state = "bci_power" @@ -238,7 +238,7 @@ /datum/action/innate/bci_charge_action name = "Check BCI Charge" check_flags = NONE - icon_icon = 'icons/obj/power.dmi' + button_icon = 'icons/obj/power.dmi' button_icon_state = "cell" var/obj/item/circuit_component/bci_core/circuit_component @@ -248,11 +248,11 @@ src.circuit_component = circuit_component - UpdateButtons() + build_all_button_icons() START_PROCESSING(SSobj, src) -/datum/action/innate/bci_charge_action/CreateButton() +/datum/action/innate/bci_charge_action/create_button() var/atom/movable/screen/movable/action_button/button = ..() button.maptext_x = 2 button.maptext_y = 0 @@ -276,14 +276,10 @@ to_chat(owner, span_info("You can recharge it by using a cyborg recharging station.")) /datum/action/innate/bci_charge_action/process(delta_time) - UpdateButtons() + build_all_button_icons(UPDATE_BUTTON_STATUS) -/datum/action/innate/bci_charge_action/UpdateButton(atom/movable/screen/movable/action_button/button, status_only = FALSE, force = FALSE) +/datum/action/innate/bci_charge_action/update_button_status(atom/movable/screen/movable/action_button/button, force = FALSE) . = ..() - if(!.) - return - if(status_only) - return var/obj/item/stock_parts/cell/cell = circuit_component.parent.cell button.maptext = cell ? MAPTEXT("[cell.percent()]%") : "" diff --git a/icons/hud/actions.dmi b/icons/hud/actions.dmi index d6c46d880f24c2e4b6b8512460ff20f24e74f8be..19f8a470ddec042cd6b5dee78292594a29231c2c 100644 GIT binary patch literal 8689 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 Cu{GiV literal 8581 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 DMcT~; literal 72325 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
Q5_)DkBu?bH@A1ss@LZ&<@zWVZw%iT9#J3`Z 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ⅅX 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 diff --git a/icons/mob/actions/actions_mime.dmi b/icons/mob/actions/actions_mime.dmi index 7d731a29ccec18974cc09e41ba5d44eb685ab029..33383dc560068e9c0fdb71133cfce244e8b6ad45 100644 GIT binary patch literal 3557 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 literal 3947 zcmZ8kc{tSV*Z+=nA`I1|EZGuS6UH{iV1%+~3t39mBHLJpA-ji^A_kL?tYdlXSyRX| zG-XX=DNBrf8)Ny6-}_web-nK&_xD`)x$kqI@A;h1xzBYcm>B7@vGA|}0KlfNhcu%} z%;^9#(Y_zyPJJ}d8Dehjk9_F&z}NkWzq_{=00d>f8meM>dL6rKD zpCPMMHzPj<4}G)8q}HcNF;M~gGvWKOa~v~Sq(qkL>S=i!T_Tw7t6$f+))!C66Mbc( zUdyhhk9`OOr~^UIlzpw5ouMl`z>>Y;r^EZz0fl@jp^5o^X`pnnyo$%!k%4X1H@4Ef zm)DaN=6mE_Jl4#}YhQ=Q^2@0U4Q+j&Z|XkzkQDLsrF_iIR!u~hkr8$svMKSjOlqH5 z?sDNR!Avd<0AP34M{1e}Ws`Fp-1xfryW9M}>ZcFt1wi)m*g)gK;CJ5!MNPM-`*gy^ zEgU9Zj>xean%_Zg`sZ10zSULNkuklTD0kjK|8|L%&4WtAGvkj4Op}S0zS_t+y~cS% z89r#WFLxQW2A%4n*sRp7Rukc6Jbr{(pZc+K=(4((L+T$K+>b9Q(TkTYelM8{kxl^a z8wq1x6Zr!eRbPd{Bl@!5mHgQ<{U&Pg0^BZyBaprZ@Q-NZitnoGGgKmS2->3o5G^kq z&NJtAbN}TPN5vJ$Sj~?|Oz#*JLTnH%kyL{$ZiB~KDrgcO?`ufA0Y(mb+ z(VfYWh{)YKoT>(Ppss-aI3M)<9{6qY0%svOisiYHHUPl(e)x&hdz0qF|MI7jvk5oU z)L7d?v4z5zw5>>TZt8%`P9@TD;g_IxK}iYWoK}PI6JIzaoEmIkXb1vaTwT>`@7@B8 z1~Yo+7}dn$IE9PBi=h&+=3kE9T`SvdmQz&xttRM-7&1(0O0BAdAgy>`fLHWiEiuuY?7VW*4LWxvgc4WwPk(qiUAJdTRQ$I1s1a1 z1JP`rkd1oh4xn__cm7BK(@JS+6#+y<+5_iOk=%U zJ8B5<+nbaR>_AD$3uBEVb5dJ`##J#fpTm70<1|5(S$#u8yfK{8rNHr~W<||;L$k6ykAD5Sg7%Ca zwv#C$Zd95}I0Y3&-KgB#&U%-bZ5#t?_p#`=`D?&fr@cZXNT`2Tt%C*S?xe|F_YnqU z!_gBxN-)^pX2s57SEJS;CQ^ST)H)5goEvZFM87@*#E%Qq_5Y@P#jYU64$&T!NYS3?L4-9Bqoo<- z>7QpZbdGa{EjpL6axh}Kyq<5Xn!?5D53iuBR3%BXR0f|;I<+zJv?~EDm^GS=Rq|%? zZF2GVH@A+~96$S3hDDt5}E4EwI;@fcCsD%Zaw1?gl(;$Hm zXTc$aY(t7MQ>v~lclkE1G|SLbWZI=C2DkI)MIO`>H*-WOd5b=N#6I$){)cc zq%&5aAB}#@L?ThyXO>|wS6$M)*Kc8vcBQ(wL~r(8S5}VC&AmKHh`Ly>)*DU(Bsfn) zoR85&{Jj4N<=i=%?_BlJ5lAFyf$l@*b}O3N5L{nZXH&t}`L32vi3)2D_tKA?$~6Yd zT@BFu!QXHbs9SLO5MSP)xl;b`9*QQQ0-}39>@IbsRuiEek-AJ* zNB252vtx7f#?`A=*H@d@Se~7{q(w9{phW7TX;b*sVjCM(94;6Z5j*RHmi#9&q)QDG zSEOBPZFVfUEi4jtB6wLtG<$r&H2!pdFSU}BlM}jd47xa~TwZz#h&U{TsS13>Q@*UJ za;^m*_2|j@_Dp$K1L4$2)sy~A`N#qKD7)ELRlT;8fm+Zu@N+3fLVv$wNC?l|+?=(8 zLxzO1-a<{w5P_(ShmI>;qH2B@HQ-}J;K=m8)I*k-sMgljl+4UacP`n-&vJT*!Ry#q zM<)@o?AchX$c<1iIsX0@vgq*`80%~s^xp#GQ;PZO2iRx$9@*m{@ZJc{bAB&`1m~~N z#jBildEG;#VF(i!K4Bd9+kIoBZ#FOlG014-*;Ah z;Tk>qYy3Uaf*8EYuKR&V653uxfnSed`ql~Nhc~E(QhtA33txbSwppBoy%568uvv(1 zbBqPdduHIDh$VY1S#Eroxk2eKmdJ}}uaMV$w9-&$`zdX1%$Q+_$vIzdNLh!|3KU&? z$@JxW^421GS;yPKyU$ZB>bzzXo_mQOyW%Off}EBB+H}*7xN6af@%cKRrWrYPlM*9! z+_)~zQ?`w&2+Mil+3talPY}yFbnR<-)r037>jK-uiUhAFd?@RoCA+mEhRO;}2yqu{GsP~ z5NgQA;-qfpZnMyafu1@l;~-Qtf8r%ke=kL#F)Ze9yH+jQksKd4&KIj7E-n!FUZ7d1X&WQB zXA45|$8k<1uR~@#;r2m_Kk;>GiG=%T21$l0%<=e-ZGcoxNCI!l;uHd1nsQ({Ra^G< zH|0Z*Huke6KQDB5X$tY6G$j^;Mnzye8Nk%AkfOaUrMf?E2bHog z2IM8*NhcgPV_6=x;vs7Fr5E=ujbi(J^G5)n!D6kwX9e92UP3vY41Z)<6&~jhOzu&> zylqXGRY>XkRrLal$!m~@?y@@@NJd&(>uzNaR*0J+=P&s`GUE7OT{!Lm$t(By3iGt! zjcaL|C|46{N2(E7Ul^co4wQ|1+#MX8Vr+Hj%uiUIQj34w-RpIR9%XfijLrtPGyXxE z$}v=Nq{gV4nxCy6E)_|MYfB|8li_8YF#|>g59R?ftl||P+hk#WET&72TqF`p>yV4@ z!4O7D82pa}@>X|0i0iG;zpb$eB)F3%P~YE*9X;0XG%CX9!vq8ZUw|QgO(4g@pH1b9 z*Nj342&OooY|*ocx4;&v-S|5e{gf(d_F+{eB6Q0`>9%W`b(?7u9s|W_;eE?L!S;W-nT+%d=-DF z(N0qp@s5#?meMqoEc-pSPOiK3Q|-}r7gUhZ4$Ma}V%>E6ju)7)pz)P6K$D$w)m z`ce*3OSc}M6qnOmFP5xye*55D?*x`LraE*uB{fXv;m zp(J@_%;hW7pn)0Y?c7YGPNW>v+uHY!as8qJm`2xic|yTMaV2!;;i{X#8WT?~4^M4Y zvuWQkMx4;y&2P+!3GmIge7d@TY2v1WPDA)?)tyAQ<6UnsL#;4uSSYl`KP0d3GLPjv zbNxu8=WuR@S4(>B$4LQ*RkR4^f9T0ILUZc6OLw9rNNh#&1Mj<`0rzG aDrc(c`_fyBON=;%v+;)KZNgFuqDY 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%0Db!pR*sfw$wa2bAYllEDTCv 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 N+9NHcGDWMP{|7}s1!DjJ literal 10107 zcmaKSbzIZY*Z)QhMkC#b(nxoVl8}}LrBgbT9E|Sna+H8dr%FnPfQU2#f`D|77=vf{ z{XWm@_t)=_?SAe(?|aUz^FC*vyI3796+$pA7ytkes;MeHN0+PUPd6?O`kNuteHLAu z2Iw36DA{@2csY6aIJvt40Dc9DX%lf60tC?$`+8U%ah1D_fhNkfMAu+N7a`aBebowv z`PP;2I*v>B3TlteWUMU zdM0_v+cHq>msjJbHe$R!6c|r^jK{%~zqU?dFNsh%+VB>b;Y3&UMDV)`0Kg1TQ=gr;K3#LPPZD!3BxJ&KE4bmF*V%Uh6l$2((Ph;k*aEbA4A~vF3hJUCw2r~`` zOrT0%2WY`%D=ONiq2oN>vIb8s&Lp70Q>CZ7hZ0?~$*O^YQg04!l!?G|ja&0rfW4)w zL}>ssZKm_xm4ynxaE|pnF_}$;din0@GLJ_RMTW-#TB1B3I9ek!n1N zqnXLc=`+XdQoDZau|_#@jIwjSS@!$-l@J_E2kmwDJ4E)gy_LYjeaEZPLdVVn<;Msi z`=nCkEVTU5Xd=Q_uElO*`n(DvR7TVs9;-Tro1wVl~S7p7eTnpZ>sG zzS6KrCOCC8Ul@=HIqYavujli+{B{d{z86n_d%BCR-)*L1E}icFu*k5!a~#}VI<+wG zP>w?xB|)tj^NDhX&-&AcALZqlej1k-5_51BRgw{A0D(Yjxf&J)uX{8sh*)ujrKO@E{5VJ9IOD1S41keS?E)0Lp`!8f(cLQ!#H^BAw?SKN_pKDM*VJrv8yT_8 z8Huv8vSPi31-$3WYa@(R?w35%5tGD_o~57q9Eef_gP3=D5!;FJW(xJAf7e+IB{>*2Qn?Vt1!^On}V!WTFW5dVp`hu&w{iyEZs&n%r zw$ZjyG=GJa7Z;NfLvHxRc$ zG+d%;d?RO{J|vaCTn%3m<{SB2=Jjw36K11*gQa=55#W|bW#{w!^VhozoQD(?J!f?W zbvfzL)nWYw(k>LXg-Z=$5qs~pg>q#9mGAaO`Q5AHWQ4-e-iV3WvB@>vkX`O@5tY&* zEYtQ6H{Zcx%cnVUK*$p46tK8VQX)fV%d*fYPx(RAiKTL(ERy-Ya^EU{IL{m(v;0=W zUAw$Tw0NnN{bSH&%i;+g)#sHZR#nE%{g#_>Z3siGZQ$VbR&%Qe(OGm^ug`q7zKv9& zR$$bjadaG~6 zv}jb*7mZ>c?DQRces->5i5*HQ%2td*vCx7NFg5Hs;FMc@M zr2@+rh0=dd!yRBWn>n8q)+(UO8IXe8>NX3$ROjldejbJ8tlbQ4JZaP-rL2;PL^y$5 zAjmB8(@)kP9h7&#U}_X-Uy&7LVu4?+W7Hh${ajTCu!n z*zX`$XJ-H)-Yo1e`-xlZ@4(qTqi4s*r_@~}FA_X# z0+#V4g!LbL2AxrtZ}!mO>QW>Y7mrAi|5$@H*$kD0VA#WJU0n&s2_vK^)9OAwwii`D z3?loRbI6oBA|@aZ8XFrc$IV3Onl8&W?z?O8ix?0p2_FiUEW{y|HM!7UEK80()zsFu z3J4I?*?KU~{vyrPRj;+^eT@F<3Jy3blbhL!8Fc287|vm7%;Wk|!I?fOiSf+_xANS$ z5yA8YQ_E>At{w{4K-YOx>oW#f3~gjJ487%Xotru)SGXSvh;>5lxC)3lys;leOkQw< zryt{enOGlSgVOuJClXOUl8H%I7ZeQ#@D?>D(623T8@SF4ST&^>rj^ln0^B*Yh&&-} z!ca)XcqRNDj4PLl5ry1|*N$E_4n@_ipghOol`A>ww9z6F@a0e6s+WTEq6Uj%T%}9y za*O(|@FEJ5SL8?IXTC0n5j{~Y?-zn;eHSputQ7w%{6bu*8*M08nH=_NgsK{bCcOJ9 znjFtz2codF}|uaH>PFr8A^*-v^3w8<^aF+93S zpGOo3JX2tCC2^&-Cfip_7Yc+wX1bynA9X@?kE}d5vk#L_DN!}-(nm#J?|sIPc^on6 zfao9dlphYe>~(uQThP49@mvnC8m`Y3d3}AYfSn;tjf_$`>=uGt3*=2YHgekV3kTjc zfNW-Yo)wjskNe2I9cwV`4lSq;$R)sb$!x$>4n_C%d(og9N5|NqnCmKsLZPwDlpmku z)w)pB)jEKA@ocuc>nM(Tlj^@4E^o?n!9Rdi3l4LcP{y&)=?m=wK1%N8a}ITEmqe;- zJNX)HE^Eavl;RovYgyDd%OY8i37jQKoZgUXJ?Bmt%}G+qD~#C8RjxtRm19c$>PpyF zEt^-Prsvx0>~Hi}dnE$+$Nw|L6kNC-9-NBT=~17c29mdp+&zR9-Db z@s65006)a~mdESekj-*`U1h@!$KcsJ_pHbuP0)>^1G{XSXDK;FnNdFu0e1Us-au?u zpg+fLw>AL?&num>rE0O|5j$mTpImLiuh0+`TBB$4mHjPTB6cgo@;yz-KA`WZSzdQ7 z2KAgsEh4gVl&gA;JaWF3XNMezA{9JpPX4%FVwBh7RUg{%dE8=6Zi#7IZj4sOcE(J; zJqYlooX^Q`Zih>Pbf)V{^rnj)kr^8!YX;>Mir{3ttFOCRu=9SR0R2xyg!sIda zdvCvB673HTVP2ACZU~u>S(%7NEn=>%z~?HuoT*=@bcW~wx0x)?deifd)0MM_KRRA4 zouZ^sm_H!YfYD@irbhpHVe?#Rlivfp#1)GyNN&txRNL$~0Ng@rf9I31c0(-hPo8h8tcR(E`0rKNI{< z>iK#b6a#bPl;r3i;)r7~8rBaq;F6QLy>#m`qb3GcvcElXK?lyQ zXjnGLmxLHd+OTW&_^>P?Nj#oIrfQs@F2XVd^Cb5Lm9ktE=uqrkm+yBV4MJ+P3RHrm zVp(Sae8Mln(j^9JJ+w3rBu5XF%v5Dob(4sJgBLI@i}BIdZsbMu zAwgMQ!MK-+Wk@J)Ov+1QZhsm(p8=DOSi7vG}kH{JQyS7+7!e5`cS?JYl-ZQOp`>>2e3|D2mnQrVgzazcR|md zl27x3d58Jy4=e+guReK;_If0m0+g*|TvPXUGsR9RkSJwj%vtiV=*-5xfhG&%O;L;l1CCqIFg3+%dUaNT;4& z(+j5m%I|j%_r530>*n}rr62C6eJN}MV!w=a#qKH99Da)bU9(S6570RY2}>Izcs2sB zO=w)uk-lPtA=|2pHdumeWQWTNj0j^n?Yl;4|Cv`lw`k8P^RelDKiMI}{4P4zTcc_&) zN@Y7Lb;48P?#3>MiAGYB5WsRzQ%V1;UO!xM6xu&ve=jN^(N`oSzq+cT0nl1ffIo%v zI%XsxR}<8=>&5uHPsA z>!1`qt4n5%81&BTR7@5;PTOpPyxl=+vn2+O*{jr{PCSM7y8}gvriRcCIzG7h_^K0G zx`MlJWMF^^C@*K5oRM}dKex61e*lcg;rPd0khP7EY)9t41%XgaO^o$*i3z7Nje}d5 zZHQ#|T?|g^p>hGj!3NLf`guJHh-&|dI7#|894smo<}%~4iFr7^ineOcD48g0f7;;W zlB^_=n8~jX^u*Q2~ZqPq0VaeqlL?#29@M` zCS{&BHlatTp!4icBtIjDc~N0XOZ65zb*DOQp|FYs}mRg-e z(Msq$bI`{V9K}=mxX$s3FLYXV4MRb=M;tRgkFX}`H*~AERdGusOh0@FBg}o5)`Wd% zcVn8YPYU$)%k5-~a81A@Kj#!$6*K*?M7rl(y$d1@cw2HgpV`#fX(IExSDMkd_MY&j%RYG{N)Or+!Y7d}R_(!VD^H8N z5nuMRlk>HPxb?6;>KGVIm-l|>8Y-`!Z5GkKZ*3&E$^>(W6MPJo`&w^&UOH7Ug2e$M zu&K$_%YCTNRlgGr*wv6eXVn_ggLpA$qx|d|>c;!@AZrom#@XYa$wr$YSUm&-0D5e! zKb3&wIwNa*YudDg%}?p+L%2iY62lcD%o2l zyefOw_y$Mk2FLEd#WPX}t0}sQD+cw5&mmHY5I5wk>I43wZjkEr0_zJOhvRHl>hrUYj zaM(BB{Y~gUGgrxSbMiF#m>-_QB9pk!KlEu;x+U$x5`w~Vtp7Y_R;&{*dWC%?mDgWO z)_8wlabFEcedT2CWv!$+#HxU4aFYEbXKe-2$lY%S#wEjj1kl?H9Kju`!xHEpQkRQ* z9K)$>jv@F?Nk=bX3C9)?y{+0{(0%Ag+4YR4=dewqYs@n%QbXY6L5h{h5IHLZJy(`W zPGvVtL9By#KN?MWu^~h2Y2r}ka%z9P|J7Pfj%OX0n!OuWgU70l-D4W6pmAQJ;nh{Gy|z`F5?{&N{n*c_sk@CB)#Mce&~0AguV65^!GlTBtBtlXbA` zdRh<7ocC!NHZs5+H&L18KUE_~2!>oN!PH5Y?WJSqW0UC6J%1sTORwbOg^6I$&lAPt zlcO4|QTy7vnHI$>xAqu=OIkn?9iQn*>Z$M}NMZIEIyahlw8FR0%HeeF_zbiG?M}Yk zRs(dee#aGk@dF2NdE`e7D0)AM`{+-@3{~#OEIyHBP{Wq%c5E4`(<`-^+%47IvKMO^ zAwg3TfbQ1AHp!GguhF~UJzqf6gDj~fs^bP4dRlpD!`Oo!~k6Kma>p*;T^V`ta8$zrpn-;cNO(%{KJYB?4-cuT{xu;ey0WTjz5h{++3a5W4`> z`FTDVFQhvwP#!7k?dBbpBp^!68L#&${0&g~vaB+;pb3DTiNISk(w#eo(3uk^fIXQ} zl-}iSUUR<7HmtayNdbeuFj;1^(55gU8?K4mR*CkUH8-X=)?3aY8aha3^O6N9fVi`i zN0vUH()lmo#jZ_P{fbx`;wL*NH11lb>+wQA^fYDeKEa+jE@TlCbg8u7iz)IHT&PcLuo8rBqcufvm8GV!&N zser#07uN&8rl}E2sz%NZ6`LZe0|3^vko5X&&vWB=R`XV?5u)nC^tN$paYVu*y{g|3 z@GI8T?e;*4cc9Vc=_tzZSNh-?&^ZkOX<59f61py4D1}Nw%xF+L8Es4bopgpKu&#!O0 z%xfAUh?CBt+D@-h&A0J|4uuy72*l7j5no}eAVSS<;RY>Sq?hU+Z_M;{4h;NL6plKt z?Q*NvE^sa#esIzyJ( z^T;to3?~h53QudV!|WLo2?=+R*#{~E@8rUxg^bq^mFE*aHyt)}ZYgb)a2?b?Fwbw$ z!t%dsVXItRRU-k?^h6H^k|Y~guN!c`<6Q0Eb{@0musj=nqszCZPAHbNIYWb5Eid_8 zoe=D??&wxHNo@5Cav_3+lK2KAuuPby$0~a&@6FmvO;20j5do>caN7%JNfs$K70bE0 ze$e7A9cdb)7+XUjqT;XpH&Q&~uc@wgLWK^#C&y%S$!6sTq!`2Z{{(Dx^g6^pItK!C z!W-2{HY=DIvPy!_>V&)W4Gp}K?R4emt8}a&lmlekkfp6l8CwQTrwJ(Q%v7|1P`7Jt_O8uj`3(PVu!*T_e^Yv5 zk`jv4u13U*vvR@>%rY7DX<)MukMa}w`;_OQ zL1wqcZ+s=L7!>Y9ihicN%=i!d-c}mhpSlI?T?aFA*@uJ7q{Qu z4h7O9vt>|0e=vy=PgzxP9}XJdj)o)@bfQA$YRnLg4i6n}(bqv}nZw`1K`Ew96cyp` z2!;$6#Yuoas}-8cfB@04Gt*!K8mOEkc*pnAx1}Ze3*(6FTMKGL$JyOd3cPTgG5+Ys zows7jg?mk0i=Suu6*2$ML=O7=fziQDUPHD-iEyYnu=ggLjz;-mZXJ&nW z3w_v*!+)9aw)`S^ke{3PRjPHV54w=%`1jjS0{e2MYtvO`A;{PmfBpP>ngsA(y5s5| zTJUntVQcU+4V$QxOyVawS5;x3HvzPbQ~kaxc3Yqi?IDAy{8k`a$APwGu`SFfJQ>Oi z^U7^>IP_F_PJUK1@#0Gn&2dxun8ui;;mKN>&*S{Uysrf=$c*$cEp1l5D}1z@C$U=f z5Dk%_Bd-qTXQ&)wgM;FCdFr>|2F<}z4WIGt_R4vQw+y{j##@*eK@^txT7y^!|E;HE zHN$(WN_kW=6&6w8Tvs`-D*k;eyNeX?qa+*KDchR5JdTT9x&3CMq9`WVR~gg)kXg0*t@} zjSB2WQuME=B!kHo~F{{f+R*=MUSb8N6>WRh8aP!h{zhp z_Ge<>>JQ7|Pp|DMhG|DtsVNsG{j^k)D_K5mJAC*Q@;i@Tz6!Y}{49z;MaI1fZ|cjl zJdCvI8Asc(7!VA8upFoIhJm~jL=bRLF#8!c1zfxcfHck@ujNXwzJ5~l4e6^dM0Rz{)Re=L-ooN#%x<9D{eyK5z$1oscJ z?Ta@W)bqSca_$+z9cg;B3p;D39(pTQ$j3vW@l$Noc6Jbu(5Fc3zzln}w9 z^=F1A{Oy$%SL)&jbyL6tcCXz8`H3K6E z5NY#{=6q81YY9x=JlB69VzPw1yMwaSV_gHW#dL{6n~BpO+tRl2f*mrsQ6x?-;RWB} zu|FhbVtXeIMY;($64r+k-jXXPBV>c$`=5(mVb+K&jX9ip9 zfass-fH((&@Bz`HwH?Z!?E(A82#dw+uQl9EU$e&OJXcUFgAEkiRqLVI0055I{eJ-z ze0zGCeAd3b*Yn#O3<+0s_g%Y1cD*yGOQ^@PGBq3)ko-Odxm)NYc;%1~+G3L_aOzjA zKk?1Fp`qs{Xg`Eo$)wd~Ip&-$fezxmqtA>eU>1$h)bzKJEMnSH7Y0Z$)$W-Z&KDjv zLur=0%^qZlJno?S8!8lTai=;VTVL+PZ#iRS0x$Hjl=PIBpRGz-+R*W2TOK*p`_mVZNcjGlQ=nX?UJUqj%nIEjN{=)7-)Hpsgj|UKA=r6*Hv@d(o=3h z;GyoSw9tsgAMw=6RORc4*P2nM5-)pgdUwd5bFy+!XIzuUfE&P{P}jS4cBjhim(Pnf z;~MN5NnKG}Ay>^Wdh^m0=0H`ZwkQqy1W;kNp|)2N$D@~eBEpY9DkowQ!(Jdgm> zRQMEBPE(CVU#{qT0{OeCExN7N1)J0Oyhdr!DlHaWi_2%}lRY?e)82^KY#+&wIU2rw}!+J@Z6t7=tF3#_`uKBl8O(Fpd3>7 z5aOUKDp~la*y=Rhn{axvdztT*Fn+%-5D&dJrtaD2^qP;r8sGQ?vs{`!!1IGGpUS## zW0JjQ9Z^;hH1R|A$KCK4i68^}1AjUTH;{5Md)5sLFnfb@-U`!?a*{pEgQq{35uQXo zr7R`RX?)LQ8B%Lh1y?<3rFg@)o737 zm+FdP9WNt&*zec2bFQ3w%1^GfkFUcvJ^MN>rb; zGPL`y+dZ~^;+huk|JTZ%3D-rQ6|c zPe?YPJH&Bf8%!ulP(6>+G$VT|Z=wWMDDgQv|5M;78lha8RsvQvmjNJr12jkRh1eXo zKIB{6EbP00<)q1?Ky+8+9j8JuW+z9Rn6HFCkZ>_q8<(W=l&ye_k-xP8>HV`ND72z{d73^<>R0E-L%sZ-5bcOH&s`;YNE(SgNao1ENQ1O+69dB(DDp0H-B?H0Ti2(i zX4pd<;@q2ZoNMG#=k~XUZo7x8#NcYpp7C0`8n$PwL&5s|jDwnRRRK6Z^lqx4`@_=% z@~N>reje$k1ywN;2&7{Hxd-xmws<$4$Y=wrAF*3IrB!)c1ADmT88CTZNGevPRb0;* zm+N%<>gvW5-d|xxa{e)4?1FEF;0?$yae%MIVA8MDYN@9NySI0kCgd!8&~uDxFTCEw z@6}&ny)do7T?_V5@~$N`0rnrR$Z|Bb*`EjSxOtf?-z{0jo(53|cTRu~ t85;gB85)37Xil>;0cd(L-RTxG+==Vouc%jv{x=;!?WvYhje=#^{{W&TNzniR diff --git a/tgstation.dme b/tgstation.dme index 09c61bb8d2d..289afab4fbd 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -779,6 +779,7 @@ #include "code\datums\cinematics\nuke_cinematics.dm" #include "code\datums\components\_component.dm" #include "code\datums\components\acid.dm" +#include "code\datums\components\action_item_overlay.dm" #include "code\datums\components\admin_popup.dm" #include "code\datums\components\anti_magic.dm" #include "code\datums\components\aquarium.dm"