diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm
index 67e2956798d..d2414f877b8 100644
--- a/code/modules/mob/living/carbon/alien/larva/larva.dm
+++ b/code/modules/mob/living/carbon/alien/larva/larva.dm
@@ -25,6 +25,14 @@
add_language("Xenomorph")
add_language("Hivemind")
AddSpell(new /obj/effect/proc_holder/spell/alien_spell/evolve_larva)
+ var/datum/action/innate/hide/alien_larva_hide/hide = new()
+ hide.Grant(src)
+
+/mob/living/carbon/alien/larva/Destroy()
+ for(var/datum/action/innate/hide/alien_larva_hide/hide in actions)
+ hide.Remove(src)
+ return ..()
+
/mob/living/carbon/alien/larva/get_caste_organs()
. = ..()
@@ -81,4 +89,3 @@
/mob/living/carbon/alien/larva/start_pulling(atom/movable/AM, state, force = pull_force, show_message = FALSE)
return FALSE
-
diff --git a/code/modules/mob/living/carbon/alien/larva/larva_powers.dm b/code/modules/mob/living/carbon/alien/larva/larva_powers.dm
deleted file mode 100644
index ebd50ef671f..00000000000
--- a/code/modules/mob/living/carbon/alien/larva/larva_powers.dm
+++ /dev/null
@@ -1,15 +0,0 @@
-/mob/living/carbon/alien/larva/verb/hide()
- set name = "Hide"
- set desc = "Allows to hide beneath tables or certain items. Toggled on or off."
- set category = "Alien"
-
- if(stat != CONSCIOUS)
- return
-
- if(layer != ABOVE_NORMAL_TURF_LAYER)
- layer = ABOVE_NORMAL_TURF_LAYER
- visible_message("[src] scurries to the ground!", "You are now hiding.")
- else
- layer = MOB_LAYER
- visible_message("[src] slowly peeks up from the ground...", "You have stopped hiding.")
-
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm
index 8fa597cb520..2584e3ab396 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm
@@ -1,17 +1,4 @@
// DRONE ABILITIES
-/mob/living/silicon/robot/drone/verb/hide()
- set name = "Hide"
- set desc = "Allows you to hide beneath tables or certain items. Toggled on or off."
- set category = "Robot Commands"
-
- if(layer != TURF_LAYER+0.2)
- layer = TURF_LAYER+0.2
- to_chat(src, text("You are now hiding."))
- pass_flags |= PASSDOOR
- else
- layer = MOB_LAYER
- to_chat(src, text("You have stopped hiding."))
- pass_flags &= ~PASSDOOR
//Actual picking-up event.
/mob/living/silicon/robot/drone/attack_hand(mob/living/carbon/human/M)
diff --git a/code/modules/mob/living/silicon/robot/drone/maint_drone.dm b/code/modules/mob/living/silicon/robot/drone/maint_drone.dm
index 7221c5f272c..92875b1343d 100644
--- a/code/modules/mob/living/silicon/robot/drone/maint_drone.dm
+++ b/code/modules/mob/living/silicon/robot/drone/maint_drone.dm
@@ -77,6 +77,9 @@
verbs -= /mob/living/silicon/robot/verb/Namepick
module = new /obj/item/robot_module/drone(src)
+ // Give us our action button
+ var/datum/action/innate/hide/drone_hide/hide = new()
+ hide.Grant(src)
//Allows Drones to hear the Engineering channel.
module.channels = list("Engineering" = 1)
@@ -191,6 +194,8 @@
QDEL_NULL(stack_wood)
QDEL_NULL(stack_plastic)
QDEL_NULL(decompiler)
+ for(var/datum/action/innate/hide/drone_hide/hide in actions)
+ hide.Remove(src)
/mob/living/silicon/robot/drone/emag_act(mob/user)
if(!client || stat == DEAD)
diff --git a/code/modules/mob/living/simple_animal/hide_action.dm b/code/modules/mob/living/simple_animal/hide_action.dm
new file mode 100644
index 00000000000..90a18959041
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/hide_action.dm
@@ -0,0 +1,32 @@
+/datum/action/innate/hide
+ name = "Hide"
+ desc = "Allows to hide beneath tables or certain items. Toggled on or off. While hiding you can fit under unbolted airlocks."
+ var/layer_to_change_from = MOB_LAYER
+ var/layer_to_change_to = TURF_LAYER + 0.2
+ check_flags = AB_CHECK_CONSCIOUS
+ button_icon_state = "mouse_gray_sleep"
+
+/datum/action/innate/hide/Activate()
+ var/mob/living/simple_animal/simplemob = owner
+
+ if(owner.layer != layer_to_change_to)
+ owner.layer = layer_to_change_to
+ owner.visible_message("[owner] scurries to the ground!", "You are now hiding.")
+ if(istype(simplemob) && simplemob.pass_door_while_hidden || isdrone(simplemob))
+ simplemob.pass_flags |= PASSDOOR
+ return
+
+ simplemob.layer = layer_to_change_from
+ owner.visible_message("[owner] slowly peeks up from the ground...", "You have stopped hiding.")
+ if(istype(simplemob) && simplemob.pass_door_while_hidden || isdrone(simplemob))
+ simplemob.pass_flags &= ~PASSDOOR
+
+/datum/action/innate/hide/alien_larva_hide
+ desc = "Allows to hide beneath tables or certain items. Toggled on or off."
+ background_icon_state = "bg_alien"
+ button_icon_state = "alien_hide"
+ layer_to_change_to = ABOVE_NORMAL_TURF_LAYER
+ layer_to_change_from = MOB_LAYER
+
+/datum/action/innate/hide/drone_hide
+ button_icon_state = "repairbot"
diff --git a/code/modules/mob/living/simple_animal/hide_verb.dm b/code/modules/mob/living/simple_animal/hide_verb.dm
deleted file mode 100644
index 0bede11148a..00000000000
--- a/code/modules/mob/living/simple_animal/hide_verb.dm
+++ /dev/null
@@ -1,18 +0,0 @@
-/mob/living/simple_animal/verb/hide()
- set name = "Hide"
- set desc = "Allows to hide beneath tables or certain items. Toggled on or off."
- set category = "Animal"
-
- if(stat != CONSCIOUS)
- return
-
- if(layer != TURF_LAYER+0.2)
- layer = TURF_LAYER+0.2
- visible_message("[src] scurries to the ground!", "You are now hiding.")
- if(pass_door_while_hidden)
- pass_flags |= PASSDOOR
- else
- layer = MOB_LAYER
- visible_message("[src] slowly peeks up from the ground...", "You have stopped hiding.")
- if(pass_door_while_hidden)
- pass_flags &= ~PASSDOOR
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 19ab6066428..89ff2298aad 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -149,8 +149,9 @@
if(!loc)
stack_trace("Simple animal being instantiated in nullspace")
verbs -= /mob/verb/observe
- if(!can_hide)
- verbs -= /mob/living/simple_animal/verb/hide
+ if(can_hide)
+ var/datum/action/innate/hide/hide = new()
+ hide.Grant(src)
if(pcollar)
pcollar = new(src)
regenerate_icons()
@@ -161,6 +162,8 @@
/// We need to clear the reference to where we're walking to properly GC
walk_to(src, 0)
QDEL_NULL(pcollar)
+ for(var/datum/action/innate/hide/hide in actions)
+ hide.Remove(src)
master_commander = null
GLOB.simple_animals[AIStatus] -= src
if(SSnpcpool.state == SS_PAUSED && LAZYLEN(SSnpcpool.currentrun))
diff --git a/icons/mob/actions/actions.dmi b/icons/mob/actions/actions.dmi
index 87bfc8db2d3..958d7cb141f 100644
Binary files a/icons/mob/actions/actions.dmi and b/icons/mob/actions/actions.dmi differ
diff --git a/paradise.dme b/paradise.dme
index 527066e3a3a..c2c2290d691 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -1975,7 +1975,6 @@
#include "code\modules\mob\living\carbon\alien\larva\larva_defense.dm"
#include "code\modules\mob\living\carbon\alien\larva\larva_inventory.dm"
#include "code\modules\mob\living\carbon\alien\larva\larva_life.dm"
-#include "code\modules\mob\living\carbon\alien\larva\larva_powers.dm"
#include "code\modules\mob\living\carbon\alien\larva\larva_update_icons.dm"
#include "code\modules\mob\living\carbon\alien\special\alien_embryo.dm"
#include "code\modules\mob\living\carbon\alien\special\facehugger.dm"
@@ -2094,7 +2093,7 @@
#include "code\modules\mob\living\simple_animal\animal_defense.dm"
#include "code\modules\mob\living\simple_animal\constructs.dm"
#include "code\modules\mob\living\simple_animal\corpse.dm"
-#include "code\modules\mob\living\simple_animal\hide_verb.dm"
+#include "code\modules\mob\living\simple_animal\hide_action.dm"
#include "code\modules\mob\living\simple_animal\parrot.dm"
#include "code\modules\mob\living\simple_animal\posessed_object.dm"
#include "code\modules\mob\living\simple_animal\shade.dm"