diff --git a/hyperstation/code/mobs/mimic.dm b/hyperstation/code/mobs/mimic.dm
index 40a12324..f3b0fe4e 100644
--- a/hyperstation/code/mobs/mimic.dm
+++ b/hyperstation/code/mobs/mimic.dm
@@ -33,9 +33,9 @@
wander = TRUE
minbodytemp = 250 //weak to cold
maxbodytemp = 1500
- pressure_resistance = 600
+ pressure_resistance = 1200
sight = SEE_MOBS
- var/unstealth = FALSE
+ var/stealthed = TRUE
var/knockdown_people = 1
var/playerTransformCD = 50
var/playerTfTime
@@ -45,13 +45,13 @@
var/playstyle_string = "You are a mimic, a tricky creature that can take the form of \
almost any item 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. \
- Attacking carbon lifeforms will heal you at the cost of destructuring their DNA."
+ Attacking carbon lifeforms will heal you at the cost of destructuring their DNA. \
+ You can also change your form to that of simple animals, but be wary that anyone examining you can \
+ find out."
/mob/living/simple_animal/hostile/hs13mimic/Initialize()
. = ..()
- // When initialized, make sure they take the form of something.
- unstealth = FALSE
- trytftorandomobject()
+ trytftorandomobject() // When initialized, make sure they take the form of something.
/mob/living/simple_animal/hostile/hs13mimic/Login()
. = ..()
@@ -60,26 +60,37 @@
/mob/living/simple_animal/hostile/hs13mimic/attack_hand(mob/living/carbon/human/M)
. = ..()
- trigger()
+ if(stealthed && stat == CONSCIOUS)
+ if(M.a_intent == INTENT_HELP)//They're trying to pick us up! We tricked them boys! *plays runescape sea shanty*
+ target = M
+ guaranteedknockdown(M)
+ trigger() // Bring our friends if any!
/mob/living/simple_animal/hostile/hs13mimic/AttackingTarget()
. = ..()
if(iscarbon(target))
var/mob/living/carbon/C = target
- if(unstealth == FALSE && knockdown_people && .) //Guaranteed knockdown if we get the first hit while disguised. Typically, only players can do this since NPC mimics transform first before attacking.
- unstealth = TRUE
- restore()
- C.Knockdown(40)
- C.visible_message("\The [src] knocks down \the [C]!", \
- "\The [src] knocks you down!")
- else if(knockdown_people && . && prob(15))
- C.Knockdown(40)
- C.visible_message("\The [src] knocks down \the [C]!", \
+ if(.)
+ if(stealthed && knockdown_people) //Guaranteed knockdown if we get the first hit while disguised. Typically, only players can do this since NPC mimics transform first before attacking.
+ restore()
+ C.Knockdown(40)
+ C.visible_message("\The [src] knocks down \the [C]!", \
"\The [src] knocks you down!")
- if(C.nutrition >= 15)
- C.nutrition -= (rand(7,15)) //They lose 7-15 nutrition
- adjustBruteLoss(-3) //We heal 3 damage
- C.adjustCloneLoss(rand(2,4)) //They also take a bit of cellular damage.
+ else if(knockdown_people && prob(15))
+ C.Knockdown(40)
+ C.visible_message("\The [src] knocks down \the [C]!", \
+ "\The [src] knocks you down!")
+ if(C.nutrition >= 15)
+ C.nutrition -= (rand(7,15)) //They lose 7-15 nutrition
+ adjustBruteLoss(-3) //We heal 3 damage
+ C.adjustCloneLoss(rand(2,4)) //They also take a bit of cellular damage.
+ if(isanimal(target))
+ var/mob/living/simple_animal/A = target
+ if(.)
+ if(stealthed)
+ restore()
+ if(A.stat != DEAD)
+ adjustBruteLoss(-3) //We heal 3 damage
/mob/living/simple_animal/hostile/hs13mimic/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
trigger()
@@ -88,95 +99,97 @@
/mob/living/simple_animal/hostile/hs13mimic/FindTarget()
. = ..()
if(.)
- trigger()
- else if(!target && unstealth)
+ trigger() //We have a target! Trigger!
+ else if(!target && !stealthed) //Has no target, isn't stealthed, let's search for an object to transform
trytftorandomobject()
/mob/living/simple_animal/hostile/hs13mimic/death(gibbed)
- restore()
+ restore() //We died. Restore form.
. = ..()
/mob/living/simple_animal/hostile/hs13mimic/med_hud_set_health()
- if(!unstealth)
+ if(stealthed)
var/image/holder = hud_list[HEALTH_HUD]
holder.icon_state = null
return //we hide medical hud while morphed
..()
/mob/living/simple_animal/hostile/hs13mimic/med_hud_set_status()
- if(!unstealth)
+ if(stealthed)
var/image/holder = hud_list[STATUS_HUD]
holder.icon_state = null
return //we hide medical hud while morphed
..()
-/mob/living/simple_animal/hostile/hs13mimic/proc/Mimictransform() //The list of default things to transform needs to be bigger, consider this in the future.
+/mob/living/simple_animal/hostile/hs13mimic/proc/mimicTransformList() //The list of default things to transform needs to be bigger, consider this in the future.
var/transformitem = rand(1,100)
medhudupdate()
- if(unstealth == FALSE)
- wander = FALSE
- vision_range = initial(vision_range)
- switch(transformitem)
- if(1 to 10)
- name = "drinking glass"
- icon = 'icons/obj/drinks.dmi'
- icon_state = "glass_empty"
- desc = "Your standard drinking glass."
- if(11 to 20)
- name = "insulated gloves"
- icon = 'icons/obj/clothing/gloves.dmi'
- icon_state = "yellow"
- desc = "These gloves will protect the wearer from electric shock."
- if(21 to 30)
- name = "Private Security Officer"
- desc = "A cardboard cutout of a private security officer."
- icon = 'icons/obj/cardboard_cutout.dmi'
- icon_state = "cutout_ntsec"
- if(31 to 40)
- name = "pen"
- icon = 'icons/obj/bureaucracy.dmi'
- icon_state = "pen"
- desc = "It's a black ink pen, modified for use with both paper and Nanotransen-brand Digital-Readpads™!"
- if(41 to 50)
- name = "newspaper"
- desc = "An issue of The Griffon, the newspaper circulating aboard Kin.Co Space Stations."
- icon = 'icons/obj/bureaucracy.dmi'
- icon_state = "newspaper"
- if(51 to 60)
- name = "toolbox"
- desc = "Danger. Very robust."
- icon = 'icons/obj/storage.dmi'
- icon_state = "red"
- if(61 to 70)
- name = "emergency oxygen tank"
- desc = "Used for emergencies. Contains very little oxygen, so try to conserve it until you actually need it."
- icon = 'icons/obj/tank.dmi'
- icon_state = "emergency"
- if(71 to 80)
- name = "drinking glass"
- icon = 'icons/obj/drinks.dmi'
- icon_state = "glass_empty"
- desc = "Your standard drinking glass."
- if(81 to 90)
- name = "fleshlight"
- icon = 'hyperstation/icons/obj/fleshlight.dmi'
- icon_state = "fleshlight_totallynotamimic"
- desc = "A sex toy disguised as a flashlight, used to stimulate someones penis, complete with colour changing sleeve."
- if(91 to 100)
- icon = 'modular_citadel/icons/obj/genitals/dildo.dmi'
- switch(rand(1,3)) //switch within a switch hmmmmmmmmmm
- if(1)
- icon_state = "dildo_knotted_2"
- name = "small knotted dildo"
- if(2)
- icon_state = "dildo_flared_4"
- name = "huge flared dildo"
- if(3)
- icon_state = "dildo_knotted_3"
- name = "big knotted dildo"
- desc = "Floppy!"
- else
- restore()
+ wander = FALSE
+ vision_range = initial(vision_range)
+ switch(transformitem)
+ if(1 to 10)
+ name = "drinking glass"
+ icon = 'icons/obj/drinks.dmi'
+ icon_state = "glass_empty"
+ desc = "Your standard drinking glass."
+ if(11 to 20)
+ name = "insulated gloves"
+ icon = 'icons/obj/clothing/gloves.dmi'
+ icon_state = "yellow"
+ desc = "These gloves will protect the wearer from electric shock."
+ if(21 to 30)
+ name = "Private Security Officer"
+ desc = "A cardboard cutout of a private security officer."
+ icon = 'icons/obj/cardboard_cutout.dmi'
+ icon_state = "cutout_ntsec"
+ if(31 to 40)
+ name = "pen"
+ icon = 'icons/obj/bureaucracy.dmi'
+ icon_state = "pen"
+ desc = "It's a black ink pen, modified for use with both paper and Nanotransen-brand Digital-Readpads™!"
+ if(41 to 50)
+ name = "newspaper"
+ desc = "An issue of The Griffon, the newspaper circulating aboard Kin.Co Space Stations."
+ icon = 'icons/obj/bureaucracy.dmi'
+ icon_state = "newspaper"
+ if(51 to 60)
+ name = "toolbox"
+ desc = "Danger. Very robust."
+ icon = 'icons/obj/storage.dmi'
+ icon_state = "red"
+ if(61 to 70)
+ name = "emergency oxygen tank"
+ desc = "Used for emergencies. Contains very little oxygen, so try to conserve it until you actually need it."
+ icon = 'icons/obj/tank.dmi'
+ icon_state = "emergency"
+ if(71 to 80)
+ name = "drinking glass"
+ icon = 'icons/obj/drinks.dmi'
+ icon_state = "glass_empty"
+ desc = "Your standard drinking glass."
+ if(81 to 90)
+ name = "fleshlight"
+ icon = 'hyperstation/icons/obj/fleshlight.dmi'
+ icon_state = "fleshlight_totallynotamimic"
+ desc = "A sex toy disguised as a flashlight, used to stimulate someones penis, complete with colour changing sleeve."
+ if(91 to 100)
+ icon = 'modular_citadel/icons/obj/genitals/dildo.dmi'
+ switch(rand(1,3)) //switch within a switch hmmmmmmmmmm
+ if(1)
+ icon_state = "dildo_knotted_2"
+ name = "small knotted dildo"
+ if(2)
+ icon_state = "dildo_flared_4"
+ name = "huge flared dildo"
+ if(3)
+ icon_state = "dildo_knotted_3"
+ name = "big knotted dildo"
+ desc = "Floppy!"
+
+/mob/living/simple_animal/hostile/hs13mimic/proc/guaranteedknockdown(mob/living/carbon/human/M)
+ M.Knockdown(40)
+ M.visible_message("\The [src] knocks down \the [M]!", \
+ "\The [src] tricks you, knocking you down!")
/mob/living/simple_animal/hostile/hs13mimic/proc/medhudupdate()
med_hud_set_health()
@@ -185,6 +198,7 @@
/mob/living/simple_animal/hostile/hs13mimic/proc/restore()
//back to normal mimic sprite
medhudupdate()
+ stealthed = FALSE
name = initial(name)
icon = 'hyperstation/icons/mobs/mimic.dmi'
icon_state = "mimic"
@@ -194,10 +208,9 @@
vision_range = 9
/mob/living/simple_animal/hostile/hs13mimic/proc/trigger()
- if(unstealth == FALSE && !stat)
- unstealth = TRUE
+ if(stealthed && stat == CONSCIOUS)
visible_message("The [src] Reveals itself to be a Mimic!")
- Mimictransform()
+ restore()
playsound(loc, 'hyperstation/sound/creatures/mimictransform.ogg', 75, TRUE)
triggerOthers(target) // Friends too!
@@ -208,7 +221,7 @@
C.trigger()
/mob/living/simple_animal/hostile/hs13mimic/proc/trytftorandomobject()
- unstealth = FALSE
+ stealthed = TRUE
medhudupdate()
var/list/obj/item/listItems = list()
for(var/obj/item/I in oview(9,src.loc))
@@ -223,32 +236,39 @@
icon_state = changedReference.icon_state
desc = changedReference.desc
else
- Mimictransform()
+ mimicTransformList() //Couldn't find any valid items, let's go for the default list then.
/mob/living/simple_animal/hostile/hs13mimic/proc/allowed(atom/movable/A)
- return !is_type_in_typecache(A, mimic_blacklisted_transform_items) && (isitem(A))
+ return !is_type_in_typecache(A, mimic_blacklisted_transform_items) && (isitem(A) || isanimal(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)
+//Player control code
+
+/mob/living/simple_animal/hostile/hs13mimic/ShiftClickOn(atom/movable/A)
+ if(playerTfTime <= world.time && stat == CONSCIOUS)
if(A == src)
restore()
playerTfTime = world.time + playerTransformCD
return
if(istype(A) && allowed(A))
- unstealth = FALSE
+ stealthed = TRUE
+ SEND_SOUND(src, sound('hyperstation/sound/creatures/mimictransform.ogg',volume=50))
name = A.name
icon = A.icon
icon_state = A.icon_state
desc = A.desc
speed = 5
playerTfTime = world.time + playerTransformCD
+ if(isanimal(A))
+ var/mob/living/simple_animal/animal = A
+ icon_state = animal.icon_living
+ desc += " But something about it seems wrong..."
+
else
to_chat(src, "You need to wait a little longer before you can shift into something else!")
..()
//Event control
-
/datum/round_event_control/mimic_infestation
name = "Mimic Infestation"
typepath = /datum/round_event/mimic_infestation