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"