diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm index e8eb95aa7b..175e8ad31e 100644 --- a/code/modules/antagonists/slaughter/slaughter.dm +++ b/code/modules/antagonists/slaughter/slaughter.dm @@ -1,190 +1,47 @@ -//////////////////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 +/datum/round_event/ghost_role/slaughter/spawn_role() + var/list/candidates = get_candidates(ROLE_ALIEN, null, ROLE_ALIEN) + if(!candidates.len) + return NOT_ENOUGH_PLAYERS -/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/mob/dead/selected = pick_n_take(candidates) -/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/datum/mind/player_mind = new /datum/mind(selected.key) + player_mind.active = 1 -/obj/item/organ/heart/demon/Stop() - return 0 // Always beating. + var/list/spawn_locs = list() + for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list) + if(isturf(L.loc)) + spawn_locs += L.loc -/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" + if(!spawn_locs) + message_admins("No valid spawn locations found, aborting...") + return MAP_ERROR - 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.") + 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