Side antagonist tweaks

This commit is contained in:
Xhuis
2015-09-18 16:54:01 -04:00
parent f9a01d1365
commit c0d3a67f0e
9 changed files with 119 additions and 70 deletions
+26 -17
View File
@@ -35,7 +35,7 @@ obj/effect/dummy/slaughter/relaymove(mob/user, direction)
var/turf/mobloc = get_turf(src.loc)
src.notransform = TRUE
spawn(0)
src.visible_message("[src] sinks into the pool of blood.")
src.visible_message("<span class='warning'>[src] sinks into the pool of blood!</span>")
playsound(get_turf(src), 'sound/magic/enter_blood.ogg', 100, 1, -1)
var/obj/effect/dummy/slaughter/holder = PoolOrNew(/obj/effect/dummy/slaughter,mobloc)
src.ExtinguishMob()
@@ -45,41 +45,50 @@ obj/effect/dummy/slaughter/relaymove(mob/user, direction)
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!")
src.visible_message("<span class='warning'>[victim] kicks free of the blood pool just before entering it!</span>")
else
victim.loc = holder
src.visible_message("<span class='warning'><B>The [src] drags [victim] into the pool of blood!</B>")
victim.emote("scream")
src.visible_message("<span class='warning'><b>[src] drags [victim] into the pool of blood!</b></span>")
kidnapped = victim
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>"
playsound(get_turf(src),'sound/magic/Demon_consume.ogg', 100, 1)
sleep(30)
playsound(get_turf(src),'sound/magic/Demon_consume.ogg', 100, 1)
sleep(30)
playsound(get_turf(src),'sound/magic/Demon_consume.ogg', 100, 1)
sleep(30)
src << "<span class='danger'>You begin to feast on [kidnapped]. You can not move while you are doing this.</span>"
for(var/i = 3; i > 0; i--)
playsound(get_turf(src),'sound/magic/Demon_consume.ogg', 100, 1)
sleep(30)
if(kidnapped)
src << "<B>You devour [kidnapped]. Your health is fully restored.</B>"
src << "<span class='danger'>You devour [kidnapped]. Your health is fully restored.</span>"
src.adjustBruteLoss(-1000)
src.adjustFireLoss(-1000)
src.adjustOxyLoss(-1000)
src.adjustToxLoss(-1000)
kidnapped.ghostize()
qdel(kidnapped)
if(istype(src, /mob/living/simple_animal/slaughter))
var/mob/living/simple_animal/slaughter/S = src
kidnapped << "<span class='userdanger'>You feel teeth sink into your flesh, and the--</span>"
kidnapped.adjustBruteLoss(1000)
kidnapped.loc = src
S.consumed_mobs.Add(kidnapped)
else
kidnapped.ghostize()
qdel(kidnapped)
else
src << "<B>You happily devour...nothing? Your meal vanished at some point!</B>"
src << "<span class='danger'>You happily devour... nothing? Your meal vanished at some point!</span>"
src.notransform = 0
/mob/living/proc/phasein(obj/effect/decal/cleanable/B)
if(src.notransform)
src << "<B>Finish eating first!</B>"
src << "<span class='warning'>Finish eating first!</span>"
return 0
B.visible_message("<span class='warning'>[B] starts to bubble...</span>")
if(!do_after(src, 20, target = B))
return
if(!B)
return
src.loc = B.loc
src.client.eye = src
src.visible_message("<span class='warning'><B>The [src] rises out of the pool of blood!</B>")
src.visible_message("<span class='warning'><B>[src] rises out of the pool of blood!</B>")
playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, 1, -1)
qdel(src.holder)
src.holder = null
@@ -1,9 +1,9 @@
#define MORPH_COOLDOWN 50
/mob/living/simple_animal/hostile/morph
name = "Morph"
real_name = "Morph"
desc = "some amorphous blob"
name = "morph"
real_name = "morph"
desc = "A revolting, pulsating pile of flesh."
speak_emote = list("gurgles")
emote_hear = list("gurgles")
icon = 'icons/mob/animal.dmi'
@@ -28,16 +28,25 @@
see_invisible = SEE_INVISIBLE_MINIMUM
idle_vision_range = 1 // Only attack when target is close
wander = 0
attacktext = "glomps"
attack_sound = 'sound/effects/blobattack.ogg'
var/morphed = 0
var/atom/movable/form = null
var/morph_time = 0
var/playstyle_string = "<b><font size=3 color='red'>You are a morph,</font> an abomination of science created primarily with changeling cells. \
You may take the form of anything nearby by middle-clicking it. This process will alert any nearby \
observers, and can only be performed once every five seconds. While morphed, you move faster, but do \
less damage. In addition, anyone within three tiles will note an uncanny wrongness if examining you. \
You can attack any item or dead creature to consume it - creatures will fully restore your health. \
Finally, you can restore yourself to your original form while morphed by middle-clicking yourself.</b>"
/mob/living/simple_animal/hostile/morph/examine(mob/user)
if(morphed)
form.examine(user) // Refactor examine to return desc so it's static? Not sure if worth it
if(get_dist(user,src)<=3)
user << "<span class='notice'>Looks odd!</span>"
user << "<span class='warning'>It doesn't look quite right...</span>"
else
..()
return
@@ -57,6 +66,7 @@
if(istype(A) && allowed(A))
assume(A)
else
src << "<span class='warning'>Your chameleon skin is still repairing itself!</span>"
..()
/mob/living/simple_animal/hostile/morph/proc/assume(atom/movable/target)
@@ -72,11 +82,15 @@
else
overlays = target.overlays.Copy()
visible_message("<span class='warning'>[src] suddenly twists and changes shape, becoming a copy of [target]!</span>", \
"<span class='notice'>You twist your body and assume the form of [target].</span>")
name = target.name
icon = target.icon
icon_state = target.icon_state
overlays = target.overlays
//Morphed is weaker
melee_damage_lower = 5
melee_damage_upper = 5
@@ -93,6 +107,8 @@
//anim(loc,src,'icons/mob/mob.dmi',,"morph",,src.dir)
visible_message("<span class='warning'>[src] suddenly collapses in on itself, dissolving into a pile of green flesh!</span>", \
"<span class='notice'>You reform to your normal body.</span>")
name = initial(name)
icon = initial(icon)
icon_state = initial(icon_state)
@@ -108,7 +124,8 @@
/mob/living/simple_animal/hostile/morph/death()
if(morphed)
visible_message("<span class='danger'>The [src] dissolves!</span>")
visible_message("<span class='warning'>[src] twists and dissolves into a pile of green flesh!</span>", \
"<span class='userdanger'>Your skin ruptures! Your flesh breaks apart! No disguise can ward off de--</span>")
restore()
//Dump eaten stuff
@@ -148,7 +165,7 @@
var/mob/living/L = target
if(L.stat == DEAD)
if(do_after(src, 30, target = L))
visible_message("<span class='warning'>[src] swallows the [target] whole!</span>")
visible_message("<span class='warning'>[src] swallows [target] whole!</span>")
L.loc = src
adjustBruteLoss(-50)
return
@@ -156,7 +173,7 @@
var/obj/item/I = target
if(!I.anchored)
if(do_after(src,20, target = I))
visible_message("<span class='warning'>[src] swallows the [target] whole!</span>")
visible_message("<span class='warning'>[src] swallows [target] whole!</span>")
I.loc = src
return
target.attack_animal(src)
@@ -198,15 +215,10 @@
player_mind.assigned_role = "Morph"
player_mind.special_role = "Morph"
ticker.mode.traitors |= player_mind
var/info = {"<B>You are a Morph, a shapeshifting alien creature.</B>
You can assume the shape of anything in sight by Shift-Clicking it.
You can only transform every 5 seconds.
To return to your basic form Shift-Click on yourself.
Base form is slow but strong, you're much weaker and faster when disguised.
You can eat items and corpses by clicking on them,eating corpses will heal you."}
S << info
message_admins("[key_of_morph] has been made into Morph by an event.")
log_game("[key_of_morph] was spawned as a Morph by an event.")
S << S.playstyle_string
S << 'sound/magic/Mutate.ogg'
message_admins("[key_of_morph] has been made into morph by an event.")
log_game("[key_of_morph] was spawned as a morph by an event.")
return 1
/datum/round_event/morph/start()
@@ -214,11 +226,11 @@
/datum/round_event/morph/proc/find_morph()
message_admins("Attempted to spawn a Morph but there was no players available. Will try again momentarily.")
message_admins("Attempted to spawn a morph but there was no players available. Will try again momentarily.")
spawn(50)
if(get_morph(1))
message_admins("Situation has been resolved, [key_of_morph] has been spawned as a Morph.")
log_game("[key_of_morph] was spawned as a Morph by an event.")
message_admins("Situation has been resolved, [key_of_morph] has been spawned as a morph.")
log_game("[key_of_morph] was spawned as a morph by an event.")
return 0
message_admins("Unfortunately, no candidates were available for becoming a Morph. Shutting down.")
message_admins("Unfortunately, no candidates were available for becoming a morph. Shutting down.")
return kill()
@@ -1,9 +1,9 @@
//////////////////The Monster
/mob/living/simple_animal/slaughter
name = "Slaughter Demon"
real_name = "Slaughter Demon"
desc = "You should run."
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"
@@ -31,10 +31,11 @@
var/boost = 0
bloodcrawl = BLOODCRAWL_EAT
see_invisible = SEE_INVISIBLE_MINIMUM
var/playstyle_string = "<B>You are the Slaughter Demon, a terible creature from another existence. You have a single desire: To kill. \
You may Ctrl+Click on blood pools to travel through them, appearing and dissaapearing from the station at will. \
Pulling a dead or critical mob while you enter a pool will pull them in with you, allowing you to feast. \
You move quickly upon leaving a pool of blood, but the material world will soon sap your strength and leave you sluggish. </B>"
var/list/consumed_mobs = list()
var/playstyle_string = "<B><font size=3 color='red'>You are a slaughter demon,</font> 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 dissaapearing 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>"
/mob/living/simple_animal/slaughter/New()
..()
@@ -52,10 +53,17 @@
/mob/living/simple_animal/slaughter/death()
..(1)
new /obj/effect/decal/cleanable/blood (src.loc)
new /obj/item/weapon/demonheart (src.loc)
new /obj/effect/decal/cleanable/blood (get_turf(src))
var/obj/effect/decal/cleanable/blood/innards = new (get_turf(src))
innards.icon = 'icons/obj/surgery.dmi'
innards.icon_state = "innards"
innards.name = "pile of viscera"
innards.desc = "A repulsive pile of guts and gore."
new /obj/item/organ/internal/heart/demon (src.loc)
playsound(get_turf(src),'sound/magic/demon_dies.ogg', 200, 1)
visible_message("<span class='danger'>The [src] screams in anger as its form collapes into a pool of viscera.</span>")
visible_message("<span class='danger'>[src] screams in anger as it collapses into a puddle of viscera, its most recent meals spilling out of it.</span>")
for(var/mob/living/M in consumed_mobs)
M.loc = get_turf(src)
ghostize()
qdel(src)
return
@@ -67,23 +75,28 @@
boost = world.time + 30
//////////The Loot
/obj/item/weapon/demonheart
name = "demon's heart"
desc = "It's still faintly beating with rage"
//The loot from killing a slaughter demon - can be consumed to allow the user to blood crawl
/obj/item/organ/internal/heart/demon
name = "demon heart"
desc = "Still it beats furiously, emanating an aura of utter hate."
icon = 'icons/obj/surgery.dmi'
icon_state = "heart-on"
icon_state = "demon_heart"
origin_tech = "combat=5;biotech=8"
beating = 1 //What did you expect?
/obj/item/weapon/demonheart/attack_self(mob/living/user)
visible_message("[user] feasts upon the [src].")
/obj/item/organ/internal/heart/demon/attack(mob/M, mob/living/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)
user <<"<span class='notice'>You already know how to blood crawl.</span>"
user <<"<span class='warning'>...and you don't feel any different.</span>"
qdel(src)
return
user << "You absorb some of the demon's power!"
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.mind.AddSpell(new /obj/effect/proc_holder/spell/bloodcrawl)
user.drop_item()
qdel(src)
@@ -44,9 +44,10 @@
player_mind.special_role = "Slaughter Demon"
ticker.mode.traitors |= player_mind
S << S.playstyle_string
S << "<B>You are currently not currently in the same plane of existence as the station. Ctrl+Click a blood pool to manifest.</B>"
message_admins("[key_of_slaughter] has been made into a Slaughter Demon by an event.")
log_game("[key_of_slaughter] was spawned as a Slaughter Demon by an event.")
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>"
S << 'sound/magic/demon_dies.ogg'
message_admins("[key_of_slaughter] has been made into a slaughter demon by an event.")
log_game("[key_of_slaughter] was spawned as a slaughter demon by an event.")
return 1
@@ -57,11 +58,11 @@
/datum/round_event/slaughter/proc/find_slaughter()
message_admins("Attempted to spawn a Slaughter Demon but there was no players available. Will try again momentarily.")
message_admins("Attempted to spawn a slaughter demon but there was no players available. Will try again momentarily.")
spawn(50)
if(get_slaughter(1))
message_admins("Situation has been resolved, [key_of_slaughter] has been spawned as a Slaughter Demon.")
log_game("[key_of_slaughter] was spawned as a Slaughter Demon by an event.")
message_admins("Situation has been resolved, [key_of_slaughter] has been spawned as a slaughter demon.")
log_game("[key_of_slaughter] was spawned as a slaughter demon by an event.")
return 0
message_admins("Unfortunately, no candidates were available for becoming a Slaugter Demon. Shutting down.")
message_admins("Unfortunately, no candidates were available for becoming a slaughter demon. Shutting down.")
return kill()