diff --git a/hyperstation/code/mobs/mimic.dm b/hyperstation/code/mobs/mimic.dm index a98282da..c89e973c 100644 --- a/hyperstation/code/mobs/mimic.dm +++ b/hyperstation/code/mobs/mimic.dm @@ -243,6 +243,48 @@ /mob/living/simple_animal/hostile/hs13mimic/proc/allowed(atom/movable/A) return !is_type_in_typecache(A, mimic_blacklisted_transform_items) && (isitem(A) || isanimal(A)) +//One leader mimic spawns per mimic event spawn, they are able to consume and transform themselves into the station's dead pets. Buckle up. +/mob/living/simple_animal/hostile/hs13mimic/leader + var/mob/living/consumptionTarget = null + var/consuming = FALSE + health = 38 //They have a teeeny tiny more health. + maxHealth = 38 + +/mob/living/simple_animal/hostile/hs13mimic/leader/Life() + . = ..() + if(!consuming) + if(!consumptionTarget) + for(var/mob/living/simple_animal/pet/A in oview(5, src)) + if(A.stat == DEAD) + consumptionTarget = A + break + if(!target && consumptionTarget) //Don't try to consume anything if we're currently attacking something. + var/target_distance = get_dist(targets_from, consumptionTarget) + if(target_distance > minimum_distance) + Goto(consumptionTarget,move_to_delay,minimum_distance) + else + tryConsume(consumptionTarget) + +/mob/living/simple_animal/hostile/hs13mimic/leader/proc/tryConsume(var/mob/living/simple_animal/pet/A) + src.visible_message("[A] is being consumed...", + "You start to consume the dead [A]...", "You hear strange fleshy sounds.") + consuming = TRUE + if(do_after(src, 100, target = A)) + stealthed = TRUE + speed = 5 + wander = TRUE + name = A.name + desc = A.desc + icon = A.icon + icon_state = A.icon_living + desc += " But something about it seems wrong..." + qdel(A) + consuming = FALSE + consumptionTarget = FALSE + return TRUE + consuming = FALSE + return FALSE + //Player control code /mob/living/simple_animal/hostile/hs13mimic/ShiftClickOn(atom/movable/A) @@ -298,6 +340,7 @@ /area/asteroid/nearstation, /area/science/server, /area/science/explab, + /area/science/xenobiology, /area/security/processing) var/spawncount = 1 fakeable = FALSE @@ -360,8 +403,12 @@ notify_ghosts("A group of mimics has spawned in [pickedArea]!", source=pickedArea, action=NOTIFY_ATTACK, flashwindow = FALSE) while(spawncount > 0 && validTurfs.len) - var/turf/pickedTurf = pick_n_take(validTurfs) - var/spawn_type = /mob/living/simple_animal/hostile/hs13mimic - spawn_atom_to_turf(spawn_type, pickedTurf, 1, FALSE) spawncount-- + var/turf/pickedTurf = pick_n_take(validTurfs) + if(spawncount != 0) + var/spawn_type = /mob/living/simple_animal/hostile/hs13mimic + spawn_atom_to_turf(spawn_type, pickedTurf, 1, FALSE) + else + var/spawn_type = /mob/living/simple_animal/hostile/hs13mimic/leader + spawn_atom_to_turf(spawn_type, pickedTurf, 1, FALSE) return SUCCESSFUL_SPAWN