diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index d8b5ab0b..36966d0a 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -80,6 +80,7 @@ #define ADMIN_PUNISHMENT_NUGGET "Nugget" #define ADMIN_PUNISHMENT_BREADIFY ":b:read" #define ADMIN_PUNISHMENT_BOOKIFY "Bookify" +#define ADMIN_PUNISHMENT_BONK "Bonk" #define AHELP_ACTIVE 1 #define AHELP_CLOSED 2 diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 1f780448..01d1902f 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -1274,7 +1274,8 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits ADMIN_PUNISHMENT_FAKEBWOINK, ADMIN_PUNISHMENT_NUGGET, ADMIN_PUNISHMENT_BREADIFY, - ADMIN_PUNISHMENT_BOOKIFY) + ADMIN_PUNISHMENT_BOOKIFY, + ADMIN_PUNISHMENT_BONK) var/punishment = input("Choose a punishment", "DIVINE SMITING") as null|anything in punishment_list @@ -1393,6 +1394,10 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits addtimer(CALLBACK(GLOBAL_PROC, .proc/bookify, target), BOOKIFY_TIME) playsound(target, 'hyperstation/sound/misc/bookify.ogg', 60, 1) #undef BOOKIFY_TIME + if(ADMIN_PUNISHMENT_BONK) + playsound(target, 'hyperstation/sound/misc/bonk.ogg', 100, 1) + target.AddElement(/datum/element/squish, 60 SECONDS) + to_chat(target, "Bonk.") punish_log(target, punishment) 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 diff --git a/hyperstation/icons/obj/plushes.dmi b/hyperstation/icons/obj/plushes.dmi index 55bd43a5..1f67aedf 100644 Binary files a/hyperstation/icons/obj/plushes.dmi and b/hyperstation/icons/obj/plushes.dmi differ diff --git a/hyperstation/sound/misc/bonk.ogg b/hyperstation/sound/misc/bonk.ogg new file mode 100644 index 00000000..8f03c8ec Binary files /dev/null and b/hyperstation/sound/misc/bonk.ogg differ diff --git a/icons/mob/suit_digi.dmi b/icons/mob/suit_digi.dmi deleted file mode 100644 index 88c30722..00000000 Binary files a/icons/mob/suit_digi.dmi and /dev/null differ