diff --git a/hyperstation/code/mobs/mimic.dm b/hyperstation/code/mobs/mimic.dm
index 082d7d5e..3ebb8140 100644
--- a/hyperstation/code/mobs/mimic.dm
+++ b/hyperstation/code/mobs/mimic.dm
@@ -12,7 +12,8 @@
turns_per_move = 5
move_to_delay = 1
speed = 0
- see_in_dark = 6
+ see_in_dark = 8
+ lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
pass_flags = PASSTABLE
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/xeno = 2)
response_help = "prods"
@@ -35,10 +36,15 @@
pressure_resistance = 600
var/unstealth = FALSE
var/knockdown_people = 1
+ var/playerTransformCD = 50
+ var/playerTfTime
var/static/mimic_blacklisted_transform_items = typecacheof(list(
/obj/item/projectile,
/obj/item/radio/intercom))
- var/turns_since_notarget
+ var/warned
+ var/playstyle_string = "You are a mimic, a tricky creature that can take the form of \
+ almost any items nearby by shift-clicking it. While morphed, you move slowly and do less damage. \
+ Finally, you can restore yourself to your original form while morphed by shift-clicking yourself."
/mob/living/simple_animal/hostile/hs13mimic/Initialize()
. = ..()
@@ -52,16 +58,20 @@
/mob/living/simple_animal/hostile/hs13mimic/Life()
. = ..()
- turns_since_notarget++
- if(turns_since_notarget >= 5)
- turns_since_notarget = 0
- if(unstealth && (!target || isdead(target)))
- target = null
- trytftorandomobject()
+ if(src.mind && !warned)
+ to_chat(src, src.playstyle_string)
+ warned = TRUE
/mob/living/simple_animal/hostile/hs13mimic/AttackingTarget()
. = ..()
- if(knockdown_people && . && prob(15) && iscarbon(target))
+ if(unstealth == FALSE && knockdown_people && . && iscarbon(target))//Guaranteed knockdown if we get the first hit while in stealth. Typically, only players can do this since NPC mimics transform first before attacking.
+ unstealth = TRUE
+ restore()
+ var/mob/living/carbon/C = target
+ C.Knockdown(40)
+ C.visible_message("\The [src] knocks down \the [C]!", \
+ "\The [src] knocks you down!")
+ else if(knockdown_people && . && prob(15) && iscarbon(target))
var/mob/living/carbon/C = target
C.Knockdown(40)
C.visible_message("\The [src] knocks down \the [C]!", \
@@ -175,11 +185,12 @@
icon = 'hyperstation/icons/mobs/mimic.dmi'
icon_state = "mimic"
desc = initial(desc)
+ speed = initial(speed)
wander = TRUE
vision_range = 9
/mob/living/simple_animal/hostile/hs13mimic/proc/trigger()
- if(unstealth == FALSE)
+ if(unstealth == FALSE && !stat)
unstealth = TRUE
visible_message("The [src] Reveals itself to be a Mimic!")
Mimictransform()
@@ -197,7 +208,7 @@
medhudupdate()
var/list/obj/item/listItems = list()
for(var/obj/item/I in oview(9,src.loc))
- if(!(is_type_in_typecache(I, mimic_blacklisted_transform_items)))
+ if(allowed(I))
listItems += I
if(LAZYLEN(listItems))
var/obj/item/changedReference = pick(listItems)
@@ -210,6 +221,26 @@
else
Mimictransform()
+/mob/living/simple_animal/hostile/hs13mimic/proc/allowed(atom/movable/A)
+ return !is_type_in_typecache(A, mimic_blacklisted_transform_items) && (isitem(A))
+
+/mob/living/simple_animal/hostile/hs13mimic/ShiftClickOn(atom/movable/A) //if by any chance a player takes control of them
+ if(playerTfTime <= world.time && !stat)
+ if(A == src)
+ restore()
+ playerTfTime = world.time + playerTransformCD
+ return
+ if(istype(A) && allowed(A))
+ unstealth = FALSE
+ name = A.name
+ icon = A.icon
+ icon_state = A.icon_state
+ desc = A.desc
+ speed = 5
+ playerTfTime = world.time + playerTransformCD
+ else
+ to_chat(src, "You need to wait a little longer before you can shift into something else!")
+ ..()
//Event control