CRAWLING IN MY CRAWL! THESE WOUNDS THEY WILL NOT CRAWL

Update based on
This commit is contained in:
Aurorablade
2015-07-29 07:14:33 -04:00
parent 92ec49705b
commit 5b0f43ade1
6 changed files with 215 additions and 200 deletions
+1 -1
View File
@@ -43,7 +43,7 @@
return find_slaughter()
var /obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(pick(spawn_locs))
var/mob/living/simple_animal/slaughter/S = new /mob/living/simple_animal/slaughter/(holder)
S.phased = TRUE
S.holder = holder
player_mind.transfer_to(S)
player_mind.assigned_role = "Slaughter Demon"
player_mind.special_role = "Slaughter Demon"
+192
View File
@@ -0,0 +1,192 @@
//Travel through pools of blood. Slaughter Demon powers for everyone!
/mob/living/proc/phaseout(var/obj/effect/decal/cleanable/B)
var/mob/living/kidnapped = null
var/turf/mobloc = get_turf(src.loc)
var/turf/bloodloc = get_turf(B.loc)
if(Adjacent(bloodloc))
src.notransform = TRUE
spawn(0)
src.visible_message("<span class='danger'>[src] sinks into [B].</span>")
playsound(get_turf(src), 'sound/misc/enter_blood.ogg', 100, 1, -1)
var/obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter( mobloc )
var/atom/movable/overlay/animation = new /atom/movable/overlay( mobloc )
animation.name = "odd blood"
animation.density = 0
animation.anchored = 1
animation.icon = 'icons/mob/mob.dmi'
animation.icon_state = "jaunt"
animation.layer = 5
animation.master = holder
animation.dir = src.dir
src.ExtinguishMob()
if(src.buckled)
src.buckled.unbuckle()
if(src.pulling && src.bloodcrawl == 2)
if(istype(src.pulling, /mob/living/))
var/mob/living/victim = src.pulling
if(victim.stat == CONSCIOUS)
src.visible_message("[victim] kicks free of \the [src] at the last second!")
else
victim.loc = holder///holder
src.visible_message("<span class='danger'><B>\The [src] drags [victim] into [B]!</B></span>")
kidnapped = victim
flick("jaunt",animation)
src.loc = holder
src.holder = holder
if(kidnapped)
src << "<B>You begin to feast on [kidnapped]. You can not move while you are doing this.</B>"
src.visible_message("<span class='warning'><B>Loud eating sounds come from the blood...</B></span>")
GibEat(kidnapped)
sleep(6)
if (animation)
qdel(animation)
playsound(get_turf(src),'sound/misc/Demon_consume.ogg', 100, 1)
sleep(30)
GibEat(kidnapped)
playsound(get_turf(src),'sound/misc/Demon_consume.ogg', 100, 1)
sleep(30)
GibEat(kidnapped)
playsound(get_turf(src),'sound/misc/Demon_consume.ogg', 100, 1)
sleep(30)
src << "<B>You devour [kidnapped]. Your health is fully restored.</B>"
src.adjustBruteLoss(-1000)
kidnapped.ghostize()
qdel(kidnapped)
new /obj/effect/gibspawner/human(get_turf(src))///Somewhere a janitor weeps.
if (istype(src, /mob/living/simple_animal/slaughter)) //rason, do not want humans to get this
var/mob/living/simple_animal/slaughter/demon = src
demon.devoured++
//src.kidnapped = null
if (demon.devoured == 5)
src.mind.current.verbs += /mob/living/simple_animal/slaughter/proc/goreThrow
src.mind.current.verbs += /mob/living/simple_animal/slaughter/proc/bloodSac
src << "<span class='notice'> You have consumed enough to be able to summon Excess Gore.</span>"
else
sleep(6)
if (animation)
qdel(animation)
src.notransform = 0
/mob/living/proc/phasein(var/obj/effect/decal/cleanable/B)
if(src.notransform)
src << "<B>Finish eating first!</B>"
else
var/atom/movable/overlay/animation = new /atom/movable/overlay( B.loc )
animation.name = "odd blood"
animation.density = 0
animation.anchored = 1
animation.icon = 'icons/mob/mob.dmi'
animation.icon_state = "jauntup" //Paradise Port:I reversed the jaunt animation so it looks like its rising up
animation.layer = 5
animation.master = B.loc
animation.dir = src.dir
flick("jauntup",animation)
src.loc = B.loc
src.client.eye = src
if (prob(25))
var/list/voice = list('sound/hallucinations/behind_you1.ogg','sound/hallucinations/im_here1.ogg','sound/hallucinations/turn_around1.ogg','sound/hallucinations/i_see_you1.ogg')
playsound(get_turf(src), pick(voice),50, 1, -1)
src.visible_message("<span class='warning'><B>\The [src] rises out of \the [B]!</B>")
playsound(get_turf(src), 'sound/misc/exit_blood.ogg', 100, 1, -1)
qdel(src.holder)
src.holder = null
sleep(6)
if(animation)
qdel(animation)
/obj/effect/decal/cleanable/blood/CtrlClick(mob/living/user)
..()
if(user.bloodcrawl)
if(user.holder)
user.phasein(src)
else
user.phaseout(src)
/obj/effect/decal/cleanable/trail_holder/CtrlClick(mob/living/user)
..()
if(user.bloodcrawl)
if(user.holder)
user.phasein(src)
else
user.phaseout(src)
/turf/CtrlClick(var/mob/living/user)
..()
if(user.bloodcrawl)
for(var/obj/effect/decal/cleanable/B in src.contents)
if(istype(B, /obj/effect/decal/cleanable/blood) || istype(B, /obj/effect/decal/cleanable/trail_holder))
if(user.holder)
user.phasein(B)
break
else
user.phaseout(B)
break
/obj/effect/dummy/slaughter //Can't use the wizard one, blocked by jaunt/slow
name = "odd blood"
icon = 'icons/effects/effects.dmi'
icon_state = "nothing"
var/canmove = 1
density = 0
anchored = 1
//invisibility = INVISIBILITY_OBSERVER
/obj/effect/dummy/slaughter/relaymove(var/mob/user, direction)
if (!src.canmove || !direction) return
var/turf/newLoc = get_step(src,direction)
loc = newLoc
src.canmove = 0
spawn(1)
src.canmove = 1
/obj/effect/dummy/slaughter/ex_act(severity)
return 1
/obj/effect/dummy/slaughter/bullet_act(blah)
return
/obj/effect/dummy/slaughter/singularity_act(blah)
return
/obj/item/weapon/guts
name = "guts"
desc = "Ewwwwwwwwwwww"
icon = 'icons/obj/surgery.dmi'
icon_state = "innards"
//Gib helperfunc
/mob/living/proc/GibEat(var/napped)
//at some point we may eat a robot..and its gonna throw out gibs..
//don't question...When a demon drags you into a blood portal you have no idea whos gibs you are actually seeing
//...Or we can just blame bluespace.
var/atom/throwtarget = get_edge_target_turf(src.holder, get_dir(src.holder, get_step_away(src.holder, src.holder)))
if(istype(napped,/mob/living/carbon/human))
var/mob/living/carbon/human/victimType = napped
var/obj/effect/decal/cleanable/blood/gibs/gore = new victimType.species.single_gib_type(get_turf(src))
if(victimType.species.flesh_color)
gore.fleshcolor = victimType.species.flesh_color
if(victimType.species.blood_color)
gore.basecolor = victimType.species.blood_color
gore.update_icon()
spawn()//Wait for itt....
gore.throw_at(get_edge_target_turf(throwtarget,pick(alldirs)),rand(10,20),10)
else//in case we eat ian.
new /obj/effect/gibspawner/human(get_turf(src))
var/obj/tossGuts = new /obj/item/weapon/guts(get_turf(src.holder))
tossGuts.throw_at(get_edge_target_turf(throwtarget,pick(alldirs)),rand(10,20),5)
@@ -46,6 +46,9 @@
var/floating = 0
var/nightvision = 0
var/bloodcrawl = 0 //0 No blood crawling, 1 blood crawling, 2 blood crawling+mob devour
var/holder = null //The holder for blood crawling
var/ventcrawler = 0 //0 No vent crawling, 1 vent crawling in the nude, 2 vent crawling always
var/list/icon/pipes_shown = list()
var/last_played_vent
@@ -1,4 +1,6 @@
//////////////////The Monster
#define BLOODCRAWL 1
#define BLOODCRAWL_EAT 2
/mob/living/simple_animal/slaughter
name = "Slaughter Demon"
@@ -37,13 +39,11 @@
melee_damage_upper = 30
see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM
bloodcrawl = 2
var/devoured = 0
var/phased = FALSE
var/holder = null
var/eating = FALSE
var/mob/living/kidnapped = null
var/list/nearby_mortals = list()
var/cooldown = 0
var/gorecooldown = 0
@@ -90,168 +90,6 @@
return 0
////////////////////The Powers
/mob/living/simple_animal/slaughter/proc/phaseout(var/obj/effect/decal/cleanable/B)
var/turf/mobloc = get_turf(src.loc)
var/turf/bloodloc = get_turf(B.loc)
if(Adjacent(bloodloc))
src.notransform = TRUE
spawn(0)
src.visible_message("<span class='danger'>The [src] sinks into [B].</span>")
playsound(get_turf(src), 'sound/misc/enter_blood.ogg', 100, 1, -1)
var/obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter( mobloc )
var/atom/movable/overlay/animation = new /atom/movable/overlay( mobloc )
animation.name = "odd blood"
animation.density = 0
animation.anchored = 1
animation.icon = 'icons/mob/mob.dmi'
animation.icon_state = "jaunt"
animation.layer = 5
animation.master = holder
animation.dir = src.dir
src.ExtinguishMob()
if(src.buckled)
src.buckled.unbuckle()
if(src.pulling)
if(istype(src.pulling, /mob/living/))
var/mob/living/victim = src.pulling
if(victim.stat == CONSCIOUS)
src.visible_message("[victim] kicks free of \the [src] at the last second!")
else
victim.loc = holder///holder
src.visible_message("<span class='danger'><B>\The [src] drags [victim] into [B]!</B></span>")
src.kidnapped = victim
flick("jaunt",animation)
src.loc = holder
src.phased = TRUE
src.holder = holder
if(src.kidnapped)
src << "<B>You begin to feast on [kidnapped]. You can not move while you are doing this.</B>"
src.visible_message("<span class='warning'><B>Loud eating sounds come from the blood...</B></span>")
src.eating = TRUE
sleep(6)
qdel(animation)
src.GibEat()
playsound(get_turf(src),'sound/misc/Demon_consume.ogg', 100, 1)
sleep(30)
src.GibEat()
playsound(get_turf(src),'sound/misc/Demon_consume.ogg', 100, 1)
sleep(30)
src.GibEat()
playsound(get_turf(src),'sound/misc/Demon_consume.ogg', 100, 1)
sleep(30)
src << "<B>You devour [kidnapped]. Your health is fully restored.</B>"
src.adjustBruteLoss(-1000)
kidnapped.ghostize()
qdel(kidnapped)
src.devoured++
//src << "<B> [src.devoured] [src.kidnapped] [src.eating]<B>"//Debug for tracking how many is devoured, use in objective?
src.kidnapped = null
src.eating = FALSE
src.pulling = FALSE
if (src.devoured == 5)
src.mind.current.verbs += /mob/living/simple_animal/slaughter/proc/goreThrow
src.mind.current.verbs += /mob/living/simple_animal/slaughter/proc/bloodSac
src << "<span class='notice'> You have consumed enough to be able to summon Excess Gore.</span>"
src.notransform = 0
if(!(src.eating))
new /obj/effect/gibspawner/human(get_turf(src))///Somewhere a janitor weeps..
sleep(6)
if(animation)
qdel(animation)
/mob/living/simple_animal/slaughter/proc/phasein(var/obj/effect/decal/cleanable/B)
var/atom/movable/overlay/animation = new /atom/movable/overlay( B.loc )
animation.name = "odd blood"
animation.density = 0
animation.anchored = 1
animation.icon = 'icons/mob/mob.dmi'
animation.icon_state = "jauntup" //Paradise Port:I reversed the jaunt animation so it looks like its rising up
animation.layer = 5
animation.master = B.loc
animation.dir = src.dir
if(src.eating)
src << "<B>Finish eating first!</B>"
else
flick("jauntup",animation)
src.client.eye = src
src.loc = B.loc
src.phased = FALSE
//Paradise port:The hallucination sounds removed from the demon as of a recent commit..i liked it though..
if (prob(25))
var/list/voice = list('sound/hallucinations/behind_you1.ogg','sound/hallucinations/im_here1.ogg','sound/hallucinations/turn_around1.ogg','sound/hallucinations/i_see_you1.ogg')
playsound(get_turf(src), pick(voice),50, 1, -1)
src.visible_message("<span class='danger'><B>\The [src] rises out of [B]!</B></span>")
new /obj/effect/gibspawner/human(get_turf(src))
playsound(get_turf(src), 'sound/misc/exit_blood.ogg', 100, 1, -1)
sleep(6)
if(src.holder)
qdel(src.holder)
if(animation)
qdel(animation)
/obj/effect/decal/cleanable/blood/CtrlClick(var/mob/user)
..()
if(istype(user, /mob/living/simple_animal/slaughter))
var/mob/living/simple_animal/slaughter/S = user
if(S.phased)
S.phasein(src)
else
S.phaseout(src)
/obj/effect/decal/cleanable/trail_holder/CtrlClick(var/mob/user)
..()
if(istype(user, /mob/living/simple_animal/slaughter))
var/mob/living/simple_animal/slaughter/S = user
//5 second cooldown
if(S.phased)
S.phasein(src)
else
S.phaseout(src)
/turf/CtrlClick(var/mob/user)
..()
if(istype(user, /mob/living/simple_animal/slaughter))
var/mob/living/simple_animal/slaughter/S = user
for(var/obj/effect/decal/cleanable/B in src.contents)
if((istype(B, /obj/effect/decal/cleanable/blood) || istype(B, /obj/effect/decal/cleanable/trail_holder))&& !istype(B,/obj/effect/decal/cleanable/blood/gibs/robot))
if(S.phased)
S.phasein(B)
break
else
S.phaseout(B)
break
/obj/effect/dummy/slaughter //Can't use the wizard one, blocked by jaunt/slow
name = "odd blood"
icon = 'icons/effects/effects.dmi'
icon_state = "nothing"
var/canmove = 1
density = 0
anchored = 1
//invisibility = INVISIBILITY_OBSERVER
/obj/effect/dummy/slaughter/relaymove(var/mob/user, direction)
if (!src.canmove || !direction) return
var/turf/newLoc = get_step(src,direction)
loc = newLoc
src.canmove = 0
spawn(1)
src.canmove = 1
/obj/effect/dummy/slaughter/ex_act(severity)
return 1
/obj/effect/dummy/slaughter/bullet_act(blah)
return
/obj/effect/dummy/slaughter/singularity_act(blah)
return
//Paradise Port:I added this cuase..SPOOPY DEMON IN YOUR BRAIN
@@ -310,7 +148,7 @@
set desc = "Launch blood at some poor unsuspecting person..."
set category = "Daemon"
if (!(src.phased))
if (!(src.notransform))
if (gorecooldown == 0 || world.time - gorecooldown > 600)
var/obj/effect/decal/cleanable/blood/gibs/gore = new(src.loc)
gore.throw_at(target,10,5,src)
@@ -333,7 +171,7 @@
set name = "Blood Pustile"
set desc = "Summon a blood filled that expels blood."
set category = "Daemon"
if (src.phased)
if (src.notransform)
if (gorecooldown == 0 || world.time - gorecooldown > 1200)
new /obj/effect/bloodnode(src.holder)
@@ -353,39 +191,20 @@
icon_state = "heart-on"
origin_tech = "combat=5;biotech=8"
/obj/item/weapon/guts
name = "guts"
desc = "Ewwwwwwwwwwww"
icon = 'icons/obj/surgery.dmi'
icon_state = "innards"
//Event
//Gib helperfunc
/mob/living/simple_animal/slaughter/proc/GibEat()
/obj/item/weapon/demonheart/attack_self(mob/living/user)
visible_message("[user] feasts upon the [src].")
if(user.bloodcrawl == 0)
user << "You absorb some of the demon's power!"
user.bloodcrawl = 1
else if(user.bloodcrawl == 1)
user << "You absorb some of the demon's power!"
user << "You feel diffr-<span class = 'danger'> CONSUME THEM! </span>"
user.bloodcrawl = 2
qdel(src)
//at some point we may eat a robot..and its gonna throw out gibs..
//don't question...When a demon drags you into a blood portal you have no idea whos gibs you are actually seeing
//...Or we can just blame bluespace.
var/atom/throwtarget = get_edge_target_turf(src.holder, get_dir(src.holder, get_step_away(src.holder, src.holder)))
if(istype(src.kidnapped,/mob/living/carbon/human))
var/mob/living/carbon/human/victimType = src.kidnapped
var/obj/effect/decal/cleanable/blood/gibs/gore = new victimType.species.single_gib_type(get_turf(src))
if(victimType.species.flesh_color)
gore.fleshcolor = victimType.species.flesh_color
if(victimType.species.blood_color)
gore.basecolor = victimType.species.blood_color
gore.update_icon()
spawn()//Wait for itt....
gore.throw_at(get_edge_target_turf(throwtarget,pick(alldirs)),rand(10,20),10)
else//in case we eat ian.
new /obj/effect/gibspawner/human(get_turf(src))
var/obj/tossGuts = new /obj/item/weapon/guts (get_turf(src.holder))
tossGuts.throw_at(get_edge_target_turf(throwtarget,pick(alldirs)),rand(10,20),5)
//Objectives and helpers.
//Objective info, Based on Reverent mini Atang
/datum/objective/slaughter