diff --git a/code/datums/action.dm b/code/datums/action.dm index 593e81ff01..aaa337bd46 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -487,6 +487,27 @@ else to_chat(owner, "Your hands are full!") +/datum/action/item_action/agent_box + name = "Deploy Box" + desc = "Find inner peace, here, in the box." + check_flags = AB_CHECK_RESTRAINED | AB_CHECK_STUN | AB_CHECK_CONSCIOUS + background_icon_state = "bg_agent" + icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon_state = "deploy_box" + var/cooldown = 0 + var/obj/structure/closet/cardboard/agent/box + +/datum/action/item_action/agent_box/Trigger() + if(!box) + if(cooldown < world.time - 30) + box = new(get_turf(owner)) + owner.forceMove(box) + cooldown = world.time + owner.playsound_local(box, 'sound/misc/box_deploy.ogg', 50, TRUE) + else + owner.forceMove(get_turf(box)) + owner.playsound_local(box, 'sound/misc/box_deploy.ogg', 50, TRUE) + QDEL_NULL(box) //Preset for spells /datum/action/spell_action diff --git a/code/game/objects/items/implants/implant_stealth.dm b/code/game/objects/items/implants/implant_stealth.dm new file mode 100644 index 0000000000..f514b8e21a --- /dev/null +++ b/code/game/objects/items/implants/implant_stealth.dm @@ -0,0 +1,38 @@ +/obj/item/implant/stealth + name = "S3 implant" + desc = "Allows you to be hidden in plain sight." + actions_types = list(/datum/action/item_action/agent_box) + +//Box Object + +/obj/structure/closet/cardboard/agent + name = "inconspicious box" + desc = "It's so normal that you didn't notice it before." + icon_state = "agentbox" + use_mob_movespeed = TRUE + +/obj/structure/closet/cardboard/agent/proc/go_invisible() + animate(src, , alpha = 0, time = 5) + START_PROCESSING(SSobj, src) + +/obj/structure/closet/cardboard/agent/Initialize() + . = ..() + go_invisible() + + +/obj/structure/closet/cardboard/agent/open() + . = ..() + qdel(src) + +/obj/structure/closet/cardboard/agent/process() + animate(src, , alpha = alpha - 50, time = 3) + +/obj/structure/closet/cardboard/agent/Move() + . = ..() + if(.) + alpha = min(alpha + 5, 255) + +/obj/structure/closet/cardboard/agent/Bump(atom/movable/A) + . = ..() + if(isliving(A)) + alpha = 255 diff --git a/code/game/objects/items/implants/implanter.dm b/code/game/objects/items/implants/implanter.dm index 528905be1e..a0aa5fc960 100644 --- a/code/game/objects/items/implants/implanter.dm +++ b/code/game/objects/items/implants/implanter.dm @@ -71,3 +71,7 @@ /obj/item/implanter/emp name = "implanter (EMP)" imp_type = /obj/item/implant/emp + +/obj/item/implanter/stealth + name = "implanter (stealth)" + imp_type = /obj/item/implant/stealth diff --git a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm index a22ea805ea..63286076bd 100644 --- a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm +++ b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm @@ -14,6 +14,7 @@ delivery_icon = "deliverybox" anchorable = FALSE var/move_speed_multiplier = 1 + var/use_mob_movespeed = FALSE var/move_delay = FALSE var/egged = 0 @@ -22,7 +23,7 @@ return move_delay = TRUE if(step(src, direction)) - addtimer(CALLBACK(src, .proc/ResetMoveDelay), CONFIG_GET(number/walk_delay) * move_speed_multiplier) + addtimer(CALLBACK(src, .proc/ResetMoveDelay), (use_mob_movespeed ? user.movement_delay() : CONFIG_GET(number/walk_delay)) * move_speed_multiplier) else ResetMoveDelay() diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index 1eac811971..a58d8a6269 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -1293,6 +1293,12 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) cost = 40 cant_discount = TRUE +/datum/uplink_item/cyber_implants/stealthimplant + name = "Stealth Implant" + desc = "This one-of-a-kind implant will make you almost invisible if you play your cards right." + item = /obj/item/implanter/stealth + cost = 8 + // Role-specific items /datum/uplink_item/role_restricted category = "Role-Restricted" diff --git a/icons/mob/actions/actions_items.dmi b/icons/mob/actions/actions_items.dmi index ce7d000409..ca380a5376 100644 Binary files a/icons/mob/actions/actions_items.dmi and b/icons/mob/actions/actions_items.dmi differ diff --git a/icons/mob/actions/backgrounds.dmi b/icons/mob/actions/backgrounds.dmi index 6af3b98728..4303c6fff6 100644 Binary files a/icons/mob/actions/backgrounds.dmi and b/icons/mob/actions/backgrounds.dmi differ diff --git a/icons/obj/closet.dmi b/icons/obj/closet.dmi index 3d1d7c406d..53bed2d5bb 100644 Binary files a/icons/obj/closet.dmi and b/icons/obj/closet.dmi differ diff --git a/icons/obj/library.dmi b/icons/obj/library.dmi index 804cd607d2..7f97bcb0fd 100644 Binary files a/icons/obj/library.dmi and b/icons/obj/library.dmi differ diff --git a/sound/misc/box_deploy.ogg b/sound/misc/box_deploy.ogg new file mode 100644 index 0000000000..3fbe895950 Binary files /dev/null and b/sound/misc/box_deploy.ogg differ diff --git a/tgstation.dme b/tgstation.dme index e2504f75b8..af5c44c7a0 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -875,6 +875,7 @@ #include "code\game\objects\items\implants\implant_mindshield.dm" #include "code\game\objects\items\implants\implant_misc.dm" #include "code\game\objects\items\implants\implant_spell.dm" +#include "code\game\objects\items\implants\implant_stealth.dm" #include "code\game\objects\items\implants\implant_storage.dm" #include "code\game\objects\items\implants\implant_track.dm" #include "code\game\objects\items\implants\implantcase.dm"