diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index d83394236f4f..b846e2104120 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -83,6 +83,7 @@ #define ADMIN_PUNISHMENT_BLEED ":B:loodless" #define ADMIN_PUNISHMENT_PERFORATE ":B:erforate" #define ADMIN_PUNISHMENT_SCARIFY "Scarify" +#define ADMIN_PUNISHMENT_SMSPIDER "SM Spider" #define AHELP_ACTIVE 1 #define AHELP_CLOSED 2 @@ -118,4 +119,4 @@ GLOBAL_VAR_INIT(ghost_role_flags, (~0)) //ie pais, posibrains #define GHOSTROLE_SILICONS (1<<3) //ie mafia, ctf -#define GHOSTROLE_MINIGAME (1<<4) \ No newline at end of file +#define GHOSTROLE_MINIGAME (1<<4) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 8754cfef7aa0..010cf034a4ef 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -1100,7 +1100,8 @@ Traitors and the like can also be revived with the previous role mostly intact. ADMIN_PUNISHMENT_CRACK, ADMIN_PUNISHMENT_BLEED, ADMIN_PUNISHMENT_PERFORATE, - ADMIN_PUNISHMENT_SCARIFY + ADMIN_PUNISHMENT_SCARIFY, + ADMIN_PUNISHMENT_SMSPIDER ) var/punishment = input("Choose a punishment", "DIVINE SMITING") as null|anything in punishment_list @@ -1190,6 +1191,17 @@ Traitors and the like can also be revived with the previous role mostly intact. to_chat(target, span_reallybigphobia("HENK!! HENK!! HENK!! YOU DID SOMETHING EXTREMELY DUMB, AND MADE GOD MAD. CRY ABOUT IT.")) var/mob/living/carbon/human/H = target H?.cluwneify() + if(ADMIN_PUNISHMENT_SMSPIDER) + var/confirm = alert(usr, "Dust target with a spider? There is no chance of revival!", "Supermatter Spider", "Yes", "No") + if(confirm == "No") + return + //What's an open turf within the target's sight? Lets make a list of them. + var/FOVlist = circleviewturfs(target,5) + //Okay, now we spawn a spider on the turf... + var/mob/living/simple_animal/hostile/smspider/spider = new /mob/living/simple_animal/hostile/smspider(pick(FOVlist)) + //And have it target the victim. + spider.GiveTarget(target) + to_chat(usr, span_alert("Dusting target with a spider...")) if(ADMIN_PUNISHMENT_CRACK) if(!iscarbon(target)) to_chat(usr,span_warning("This must be used on a carbon mob."), confidential = TRUE) @@ -1276,6 +1288,7 @@ Traitors and the like can also be revived with the previous role mostly intact. * * wound_bonus- the wounding power we're assigning to the bullet, since we don't care about the base one * * damage- the damage we're assigning to the bullet, since we don't care about the base one */ + /proc/firing_squad(mob/living/carbon/target, turf/source_turf, body_zone, wound_bonus, damage) if(!target.get_bodypart(body_zone)) return diff --git a/code/modules/mob/living/simple_animal/hostile/smspider.dm b/code/modules/mob/living/simple_animal/hostile/smspider.dm new file mode 100644 index 000000000000..52350aa77c05 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/smspider.dm @@ -0,0 +1,58 @@ +/mob/living/simple_animal/hostile/smspider + name = "supermatter spider" + desc= "A sliver of supermatter placed upon a robotically enhanced pedestal." + icon = 'icons/mob/smspider.dmi' + icon_state = "smspider" + icon_living = "smspider" + icon_dead = "smspider_dead" + gender = NEUTER + turns_per_move = 2 + speak_emote = list("vibrates") + emote_see = list("vibrates") + emote_taunt = list("vibrates") + taunt_chance = 40 + maxHealth = 10 + health = 10 + minbodytemp = 0 + maxbodytemp = 1500 + healable = 0 + attacktext = "slices" + attack_sound = 'sound/effects/supermatter.ogg' + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + robust_searching = 1 + faction = list("hostile") + see_in_dark = 8 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + ventcrawler = VENTCRAWLER_ALWAYS + deathmessage = "falls to the ground, its shard dulling to a miserable grey!" + var/overcharged = FALSE // if true, spider will not die if it dusts a limb + +/mob/living/simple_animal/hostile/smspider/AttackingTarget() + . = ..() + if(isliving(target)) + playsound(get_turf(src), 'sound/effects/supermatter.ogg', 10, TRUE) + visible_message(span_danger("[src] knocks into [target], turning them to dust in a brilliant flash of light!")) + var/mob/living/victim = target + victim.dust() + if(!overcharged) + death() + else if(!isturf(target)) + playsound(get_turf(src), 'sound/effects/supermatter.ogg', 10, TRUE) + visible_message(span_danger("[src] knocks into [target], turning it to dust in a brilliant flash of light!")) + qdel(target) + if(!overcharged) + death() + return FALSE + +/mob/living/simple_animal/hostile/smspider/Initialize(mapload) + . = ..() + AddComponent(/datum/component/swarming) + +/mob/living/simple_animal/hostile/smspider/overcharged + name = "overcharged supermatter spider" + desc = "A sliver of overcharged supermatter placed upon a robotically enhanced pedestal. This one seems especially dangerous." + icon_state = "smspideroc" + icon_living = "smspideroc" + maxHealth = 25 + health = 25 + overcharged = TRUE \ No newline at end of file diff --git a/icons/mob/smspider.dmi b/icons/mob/smspider.dmi new file mode 100644 index 000000000000..0fc057e0afe7 Binary files /dev/null and b/icons/mob/smspider.dmi differ diff --git a/yogstation.dme b/yogstation.dme index 39b0701d51cd..8fc796ccfa2c 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -2472,6 +2472,7 @@ #include "code\modules\mob\living\simple_animal\hostile\pirate.dm" #include "code\modules\mob\living\simple_animal\hostile\russian.dm" #include "code\modules\mob\living\simple_animal\hostile\skeleton.dm" +#include "code\modules\mob\living\simple_animal\hostile\smspider.dm" #include "code\modules\mob\living\simple_animal\hostile\statue.dm" #include "code\modules\mob\living\simple_animal\hostile\stickman.dm" #include "code\modules\mob\living\simple_animal\hostile\syndicate.dm"