Oops, copy paste fail
This commit is contained in:
@@ -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 = "<span class='big bold'>You are a slaughter demon,</span><B> 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. </B>"
|
||||
|
||||
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<world.time)
|
||||
speed = 1
|
||||
else
|
||||
speed = 0
|
||||
|
||||
/obj/effect/decal/cleanable/blood/innards
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
name = "pile of viscera"
|
||||
desc = "A repulsive pile of guts and gore."
|
||||
gender = NEUTER
|
||||
random_icon_states = list("innards")
|
||||
|
||||
/mob/living/simple_animal/slaughter/phasein()
|
||||
. = ..()
|
||||
speed = 0
|
||||
boost = world.time + 60
|
||||
|
||||
|
||||
//The loot from killing a slaughter demon - can be consumed to allow the user to blood crawl
|
||||
/obj/item/organ/heart/demon
|
||||
name = "demon heart"
|
||||
desc = "Still it beats furiously, emanating an aura of utter hate."
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "demon_heart-on"
|
||||
|
||||
/datum/round_event/ghost_role/slaughter
|
||||
minimum_required = 1
|
||||
role_name = "slaughter demon"
|
||||
/obj/item/organ/heart/demon/update_icon()
|
||||
return //always beating visually
|
||||
|
||||
/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/attack(mob/M, mob/living/carbon/user, obj/target)
|
||||
if(M != user)
|
||||
return ..()
|
||||
user.visible_message("<span class='warning'>[user] raises [src] to their mouth and tears into it with their teeth!</span>", \
|
||||
"<span class='danger'>An unnatural hunger consumes you. You raise [src] your mouth and devour it!</span>")
|
||||
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, "<span class='warning'>...and you don't feel any different.</span>")
|
||||
qdel(src)
|
||||
return
|
||||
user.visible_message("<span class='warning'>[user]'s eyes flare a deep crimson!</span>", \
|
||||
"<span class='userdanger'>You feel a strange power seep into your body... you have absorbed the demon's blood-travelling powers!</span>")
|
||||
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, "<B>You are currently not currently in the same plane of existence as the station. Blood Crawl near a blood pool to manifest.</B>")
|
||||
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 = "<span class='big bold'>You are a laughter \
|
||||
demon,</span><B> a wonderful creature from another realm. You have a single \
|
||||
desire: <span class='clown'>To hug and tickle.</span><BR>\
|
||||
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.<BR> \
|
||||
You move quickly upon leaving a pool of blood, but the material world \
|
||||
will soon sap your strength and leave you sluggish.<BR>\
|
||||
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!</B>"
|
||||
|
||||
/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, "<span class='clown'>You leave [src]'s warm embrace, and feel ready to take on the world.</span>")
|
||||
|
||||
/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.")
|
||||
|
||||
Reference in New Issue
Block a user