From 1d4e0d3511955c60cedc116f7ac29dc7d35c3782 Mon Sep 17 00:00:00 2001 From: Poojawa Date: Tue, 6 Feb 2018 09:56:36 -0600 Subject: [PATCH] Oops, copy paste fail --- .../antagonists/slaughter/slaughter.dm | 219 +++++++++++++++--- 1 file changed, 181 insertions(+), 38 deletions(-) diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm index 175e8ad31e..e8eb95aa7b 100644 --- a/code/modules/antagonists/slaughter/slaughter.dm +++ b/code/modules/antagonists/slaughter/slaughter.dm @@ -1,47 +1,190 @@ -/datum/round_event_control/slaughter - name = "Spawn Slaughter Demon" - typepath = /datum/round_event/ghost_role/slaughter - weight = 1 //Very rare - max_occurrences = 1 - earliest_start = 36000 //1 hour - min_players = 20 +//////////////////The Monster + +/mob/living/simple_animal/slaughter + name = "slaughter demon" + real_name = "slaughter demon" + desc = "A large, menacing creature covered in armored black scales." + speak_emote = list("gurgles") + emote_hear = list("wails","screeches") + response_help = "thinks better of touching" + response_disarm = "flails at" + response_harm = "punches" + icon = 'icons/mob/mob.dmi' + icon_state = "daemon" + icon_living = "daemon" + speed = 1 + a_intent = INTENT_HARM + stop_automated_movement = 1 + status_flags = CANPUSH + attack_sound = 'sound/magic/demon_attack1.ogg' + var/feast_sound = 'sound/magic/demon_consume.ogg' + death_sound = 'sound/magic/demon_dies.ogg' + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + minbodytemp = 0 + maxbodytemp = INFINITY + faction = list("slaughter") + attacktext = "wildly tears into" + maxHealth = 200 + health = 200 + healable = 0 + environment_smash = ENVIRONMENT_SMASH_STRUCTURES + obj_damage = 50 + melee_damage_lower = 30 + melee_damage_upper = 30 + see_in_dark = 8 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + var/boost = 0 + bloodcrawl = BLOODCRAWL_EAT + var/playstyle_string = "You are a slaughter demon, a terrible creature from another realm. You have a single desire: To kill. \ + You may use the \"Blood Crawl\" ability near blood pools to travel through them, appearing and disappearing from the station at will. \ + Pulling a dead or unconscious mob while you enter a pool will pull them in with you, allowing you to feast and regain your health. \ + You move quickly upon leaving a pool of blood, but the material world will soon sap your strength and leave you sluggish. " + + loot = list(/obj/effect/decal/cleanable/blood, \ + /obj/effect/decal/cleanable/blood/innards, \ + /obj/item/organ/heart/demon) + del_on_death = 1 + deathmessage = "screams in anger as it collapses into a puddle of viscera!" + +/mob/living/simple_animal/slaughter/Initialize() + ..() + var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new + AddSpell(bloodspell) + if(istype(loc, /obj/effect/dummy/slaughter)) + bloodspell.phased = 1 + +/mob/living/simple_animal/slaughter/Life() + ..() + if(boost[user] raises [src] to their mouth and tears into it with their teeth!", \ + "An unnatural hunger consumes you. You raise [src] your mouth and devour it!") + playsound(user, 'sound/magic/demon_consume.ogg', 50, 1) + for(var/obj/effect/proc_holder/spell/knownspell in user.mind.spell_list) + if(knownspell.type == /obj/effect/proc_holder/spell/bloodcrawl) + to_chat(user, "...and you don't feel any different.") + qdel(src) + return + user.visible_message("[user]'s eyes flare a deep crimson!", \ + "You feel a strange power seep into your body... you have absorbed the demon's blood-travelling powers!") + user.temporarilyRemoveItemFromInventory(src, TRUE) + src.Insert(user) //Consuming the heart literally replaces your heart with a demon heart. H A R D C O R E - var/mob/dead/selected = pick_n_take(candidates) +/obj/item/organ/heart/demon/Insert(mob/living/carbon/M, special = 0) + ..() + if(M.mind) + M.mind.AddSpell(new /obj/effect/proc_holder/spell/bloodcrawl(null)) - var/datum/mind/player_mind = new /datum/mind(selected.key) - player_mind.active = 1 +/obj/item/organ/heart/demon/Remove(mob/living/carbon/M, special = 0) + ..() + if(M.mind) + M.mind.RemoveSpell(/obj/effect/proc_holder/spell/bloodcrawl) - var/list/spawn_locs = list() - for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list) - if(isturf(L.loc)) - spawn_locs += L.loc +/obj/item/organ/heart/demon/Stop() + return 0 // Always beating. - if(!spawn_locs) - message_admins("No valid spawn locations found, aborting...") - return MAP_ERROR +/mob/living/simple_animal/slaughter/laughter + // The laughter demon! It's everyone's best friend! It just wants to hug + // them so much, it wants to hug everyone at once! + name = "laughter demon" + real_name = "laughter demon" + desc = "A large, adorable creature covered in armor with pink bows." + speak_emote = list("giggles","titters","chuckles") + emote_hear = list("guffaws","laughs") + response_help = "hugs" + attacktext = "wildly tickles" - var/obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter((pick(spawn_locs))) - var/mob/living/simple_animal/slaughter/S = new (holder) - S.holder = holder - player_mind.transfer_to(S) - player_mind.assigned_role = "Slaughter Demon" - player_mind.special_role = "Slaughter Demon" - player_mind.add_antag_datum(/datum/antagonist/slaughter) - to_chat(S, S.playstyle_string) - to_chat(S, "You are currently not currently in the same plane of existence as the station. Blood Crawl near a blood pool to manifest.") - SEND_SOUND(S, 'sound/magic/demon_dies.ogg') - message_admins("[key_name_admin(S)] has been made into a slaughter demon by an event.") - log_game("[key_name(S)] was spawned as a slaughter demon by an event.") - spawned_mobs += S - return SUCCESSFUL_SPAWN + attack_sound = 'sound/items/bikehorn.ogg' + feast_sound = 'sound/spookoween/scary_horn2.ogg' + death_sound = 'sound/misc/sadtrombone.ogg' + + icon_state = "bowmon" + icon_living = "bowmon" + deathmessage = "fades out, as all of its friends are released from its \ + prison of hugs." + loot = list(/mob/living/simple_animal/pet/cat/kitten{name = "Laughter"}) + + // Keep the people we hug! + var/list/consumed_mobs = list() + + playstyle_string = "You are a laughter \ + demon, a wonderful creature from another realm. You have a single \ + desire: To hug and tickle.
\ + You may use the \"Blood Crawl\" ability near blood pools to travel \ + through them, appearing and disappearing from the station at will. \ + Pulling a dead or unconscious mob while you enter a pool will pull \ + them in with you, allowing you to hug them and regain your health.
\ + You move quickly upon leaving a pool of blood, but the material world \ + will soon sap your strength and leave you sluggish.
\ + What makes you a little sad is that people seem to die when you tickle \ + them; but don't worry! When you die, everyone you hugged will be \ + released and fully healed, because in the end it's just a jape, \ + sibling!
" + +/mob/living/simple_animal/slaughter/laughter/Destroy() + release_friends() + . = ..() + +/mob/living/simple_animal/slaughter/laughter/ex_act(severity) + switch(severity) + if(1) + death() + if(2) + adjustBruteLoss(60) + if(3) + adjustBruteLoss(30) + +/mob/living/simple_animal/slaughter/laughter/proc/release_friends() + if(!consumed_mobs) + return + + for(var/mob/living/M in consumed_mobs) + if(!M) + continue + var/turf/T = find_safe_turf() + if(!T) + T = get_turf(src) + M.forceMove(T) + if(M.revive(full_heal = TRUE, admin_revive = TRUE)) + M.grab_ghost(force = TRUE) + playsound(T, feast_sound, 50, 1, -1) + to_chat(M, "You leave [src]'s warm embrace, and feel ready to take on the world.") + +/mob/living/simple_animal/slaughter/laughter/bloodcrawl_swallow(var/mob/living/victim) + if(consumed_mobs) + // Keep their corpse so rescue is possible + consumed_mobs += victim + else + // Be safe and just eject the corpse + victim.forceMove(get_turf(victim)) + victim.exit_blood_effect() + victim.visible_message("[victim] falls out of the air, covered in blood, looking highly confused. And dead.")