mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-24 20:47:10 +01:00
LETS DO THE GIT WARP AGAIN! LETS DO THE GIT WARP AGAIN!
So i did a thing..and it messed up alot of other things..so i remade the thing.. Adjusted some spans and redid the spawn locs based on the ghostie antag
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
|
||||
/obj/item/weapon/antag_spawner/proc/equip_antag(mob/target as mob)
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/antag_spawner/borg_tele
|
||||
name = "Syndicate Cyborg Teleporter"
|
||||
@@ -49,16 +49,16 @@
|
||||
checking = 0
|
||||
spawn_antag(possibleborg, get_turf(src.loc), "syndieborg")
|
||||
else
|
||||
possiblecandidates -= possibleborg
|
||||
possiblecandidates -= possibleborg
|
||||
get_candidate_answer(user, possiblecandidates)
|
||||
return
|
||||
|
||||
|
||||
sleep(300)
|
||||
if(checking)
|
||||
possiblecandidates -= possibleborg
|
||||
possiblecandidates -= possibleborg
|
||||
get_candidate_answer(user, possiblecandidates)
|
||||
return
|
||||
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/antag_spawner/borg_tele/spawn_antag(var/client/C, var/turf/T, var/type = "")
|
||||
var/datum/effect/effect/system/spark_spread/S = new /datum/effect/effect/system/spark_spread
|
||||
@@ -70,3 +70,80 @@
|
||||
ticker.mode.update_synd_icons_added(R.mind)
|
||||
R.mind.special_role = "syndicate"
|
||||
R.faction = list("syndicate")
|
||||
|
||||
/obj/item/weapon/antag_spawner/slaughter_demon //Warning edgiest item in the game
|
||||
name = "vial of blood"
|
||||
desc = "A magically infused bottle of blood, distilled from countless murder victims. Used in unholy rituals to attract horrifying creatures."
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "vial"
|
||||
var/checking = 0
|
||||
|
||||
|
||||
/obj/item/weapon/antag_spawner/slaughter_demon/attack_self(mob/user as mob)
|
||||
//var/list/demon_candidates = get_candidates(BE_ALIEN)
|
||||
if(user.z != 1)
|
||||
user << "<span class='notice'>You should probably wait until you reach the station.</span>"
|
||||
return
|
||||
if(!checking)
|
||||
user << "<span class='notice'>You ready yourself to shatter the bottle...</span>"
|
||||
get_candidate_answer(user, get_candidates(BE_ALIEN))
|
||||
else
|
||||
user << "<span class='notice'>You are already thinking about shattering the bottle.</span>"
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/antag_spawner/slaughter_demon/proc/get_candidate_answer(mob/user as mob, var/list/possiblecandidates = list())
|
||||
var/time_passed = world.time
|
||||
if(possiblecandidates.len <= 0)
|
||||
checking = 0
|
||||
user << "<span class='notice'>You can't seem to work up the nerve to shatter the bottle. Perhaps you should try again later..</span>"
|
||||
return
|
||||
else
|
||||
var/demon_candidates = pick(possiblecandidates)
|
||||
spawn(0)
|
||||
var/input = alert(demon_candidates,"Do you want to spawn in as a Slaughter Demon?","Please answer in thirty seconds!","Yes","No")
|
||||
if(input == "Yes" && used == 0)
|
||||
if((world.time-time_passed)>300)
|
||||
return
|
||||
possiblecandidates -= demon_candidates
|
||||
used = 1
|
||||
checking = 0
|
||||
spawn_antag(demon_candidates, get_turf(src.loc), "Slaughter Demon")
|
||||
user << "<span class='notice'>You shatter the bottle, no turning back now!</span>"
|
||||
user << "<span class='notice'>You sense a dark presence lurking just beyond the veil...</span>"
|
||||
playsound(user.loc, 'sound/effects/Glassbr1.ogg', 100, 1)
|
||||
playsound(user.loc,'sound/hallucinations/im_here1.ogg', 50, -1)//Paradise Port:THIS IS OVERKILL -AB
|
||||
qdel(src)
|
||||
else
|
||||
possiblecandidates -= demon_candidates
|
||||
get_candidate_answer(user, possiblecandidates)
|
||||
return
|
||||
|
||||
sleep(300)
|
||||
if(checking)
|
||||
possiblecandidates -= demon_candidates
|
||||
get_candidate_answer(user, possiblecandidates)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/antag_spawner/slaughter_demon/spawn_antag(var/client/C, var/turf/T, var/type = "")
|
||||
|
||||
var /obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(T)
|
||||
var/mob/living/simple_animal/slaughter/S = new /mob/living/simple_animal/slaughter/(holder)
|
||||
S.vialspawned = TRUE
|
||||
S.phased = TRUE
|
||||
S.key = C.key
|
||||
S.mind.assigned_role = "Slaughter Demon"
|
||||
S.mind.special_role = "Slaughter Demon"
|
||||
ticker.mode.traitors += S.mind
|
||||
var/datum/objective/assassinate/KillDaWiz = new /datum/objective/assassinate
|
||||
KillDaWiz.owner = S:mind
|
||||
KillDaWiz:target = usr:mind
|
||||
KillDaWiz.explanation_text = "Kill [usr.real_name], the one who was foolish enough to summon you."
|
||||
S.mind.objectives += KillDaWiz
|
||||
var/datum/objective/slaughter/objective = new
|
||||
objective.owner = S:mind
|
||||
//Paradise port:i changed ther verbage..might want to do so on the above kill objective. Maybe save the wizard for last...
|
||||
S.mind.objectives += objective
|
||||
S << "<B>Objective #[1]</B>: [KillDaWiz.explanation_text]"
|
||||
S << "<B>Objective #[2]</B>: [objective.explanation_text]"
|
||||
@@ -181,6 +181,79 @@
|
||||
del src
|
||||
return
|
||||
..()
|
||||
//Why did i add this....-Fethas
|
||||
/obj/item/weapon/veilrender/honkrender //HONK!!
|
||||
name = "honk render"
|
||||
desc = "A wicked curved 'blade' of honk origin, recovered from the ruins of a vast circus."
|
||||
icon_state = "clownrender"
|
||||
|
||||
/obj/item/weapon/veilrender/honkrender/attack_self(mob/user as mob)
|
||||
if(charged)
|
||||
new /obj/effect/rend/honk(get_turf(usr))
|
||||
charged = 0
|
||||
visible_message("\red <B>[src] hums with power as [usr] deals a blow to depression itself!</B>")
|
||||
playsound(get_turf(usr),"sound/items/bikehorn.ogg",50,10,1)
|
||||
else
|
||||
user << "\red The honk energies that powered the blade are now dormant."
|
||||
|
||||
/obj/effect/rend/honk
|
||||
desc = "Gently wafting with the sounds of endless laughter."
|
||||
var/honkleft = 10
|
||||
|
||||
/obj/effect/rend/honk/New()
|
||||
processing_objects.Add(src)
|
||||
return
|
||||
|
||||
/obj/effect/rend/honk/process()
|
||||
if(locate(/mob) in loc) return
|
||||
new /mob/living/simple_animal/hostile/retaliate/clown(loc)
|
||||
honkleft--
|
||||
if(honkleft <= 0)
|
||||
del src
|
||||
|
||||
/obj/effect/rend/honk/attackby(obj/item/I as obj, mob/user as mob, params)
|
||||
if(istype(I, /obj/item/weapon/nullrod))
|
||||
visible_message("\red <b>[I] strikes a blow against \the [src], banishing it!</b>")
|
||||
spawn(1)
|
||||
del src
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/veilrender/crabrender //HONK!!
|
||||
name = "crab render"
|
||||
desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast aquarium."
|
||||
|
||||
|
||||
/obj/item/weapon/veilrender/crabrender/attack_self(mob/user as mob)
|
||||
if(charged)
|
||||
new /obj/effect/rend/crab(get_turf(usr))
|
||||
charged = 0
|
||||
visible_message("\red <B>[src] hums with power as [usr] deals a blow to reality itself!</B>")
|
||||
else
|
||||
user << "\red The energies that powered the blade are now dormant."
|
||||
|
||||
/obj/effect/rend/crab
|
||||
desc = "Gently wafting with the sounds of endless clacking."
|
||||
var/crableft = 10
|
||||
|
||||
/obj/effect/rend/crab/New()
|
||||
processing_objects.Add(src)
|
||||
return
|
||||
|
||||
/obj/effect/rend/crab/process()
|
||||
if(locate(/mob) in loc) return
|
||||
new /mob/living/simple_animal/crab(loc)
|
||||
crableft--
|
||||
if(crableft <= 0)
|
||||
del src
|
||||
|
||||
///obj/effect/rend/crab/attackby(obj/item/I as obj, mob/user as mob, params)
|
||||
// if(istype(I, /obj/item/weapon/nullrod))
|
||||
// visible_message("\red <b>[I] strikes a blow against \the [src], banishing it!</b>")
|
||||
// spawn(1)
|
||||
// del src
|
||||
// return
|
||||
// ..()
|
||||
|
||||
|
||||
/////////////////////////////////////////Scrying///////////////////
|
||||
|
||||
@@ -249,6 +249,12 @@
|
||||
item_path = /obj/item/weapon/scrying
|
||||
log_name = "SO"
|
||||
|
||||
/datum/spellbook_entry/item/bloodbottle
|
||||
name = "Bottle of Blood"
|
||||
desc = "A bottle of magically infused blood, the smell of which will attract extradimensional beings when broken. Be careful though, the kinds of creatures summoned by blood magic are indiscriminate in their killing, and you yourself may become a victim."
|
||||
item_path = /obj/item/weapon/antag_spawner/slaughter_demon
|
||||
log_name = "BB"
|
||||
|
||||
/datum/spellbook_entry/item/scryingorb/Buy(var/mob/living/carbon/human/user,var/obj/item/weapon/spellbook/book)
|
||||
if(..())
|
||||
if (!(XRAY in user.mutations))
|
||||
@@ -386,6 +392,11 @@
|
||||
src.uses++
|
||||
qdel(O)
|
||||
|
||||
if(istype(O, /obj/item/weapon/antag_spawner/slaughter_demon))
|
||||
user << "<span class='notice'>On second thought, maybe summoning a demon is a bad idea. You refund your points.</span>"
|
||||
src.uses++
|
||||
qdel(O)
|
||||
|
||||
/obj/item/weapon/spellbook/proc/GetCategoryHeader(var/category)
|
||||
var/dat = ""
|
||||
switch(category)
|
||||
@@ -555,8 +566,8 @@
|
||||
|
||||
/obj/item/weapon/spellbook/oneuse/fireball/recoil(mob/user as mob)
|
||||
..()
|
||||
explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2)
|
||||
qdel(src)
|
||||
explosion(user.loc, -1, 0, 2, 3, 0)
|
||||
del(src)
|
||||
|
||||
/obj/item/weapon/spellbook/oneuse/smoke
|
||||
spell = /obj/effect/proc_holder/spell/wizard/targeted/smoke
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
|
||||
/datum/event/spawn_slaughter//Paradise port:Changed from round_event to event, i was getting errors
|
||||
var/key_of_slaughter
|
||||
|
||||
|
||||
|
||||
/datum/event/spawn_slaughter/proc/get_slaughter(var/end_if_fail = 0)
|
||||
var/time_passed = world.time
|
||||
key_of_slaughter = null
|
||||
if(!key_of_slaughter)//Paradise port change:I added in the whole do you want to be this question
|
||||
var/list/candidates = get_candidates(BE_ALIEN)
|
||||
if(!candidates.len)
|
||||
if(end_if_fail)
|
||||
return 0
|
||||
return find_slaughter()
|
||||
var/client/C = pick(candidates)
|
||||
var/input = alert(C,"Do you want to spawn in as a Slaughter Demon?","Please answer in thirty seconds!","Yes","No")
|
||||
if(input == "Yes")
|
||||
if((world.time-time_passed)>300)
|
||||
return
|
||||
key_of_slaughter = C.key
|
||||
if(!key_of_slaughter)
|
||||
if(end_if_fail)
|
||||
return 0
|
||||
return find_slaughter()
|
||||
var/datum/mind/player_mind = new /datum/mind(key_of_slaughter)
|
||||
player_mind.active = 1
|
||||
var/list/spawn_locs = list()
|
||||
for(var/obj/effect/landmark/L in landmarks_list)
|
||||
if(isturf(L.loc))
|
||||
switch(L.name)
|
||||
if("revenantspawn")
|
||||
spawn_locs += L.loc
|
||||
if(!spawn_locs) //If we can't find any revenant spawns, try the carp spawns
|
||||
for(var/obj/effect/landmark/L in landmarks_list)
|
||||
if(isturf(L.loc))
|
||||
switch(L.name)
|
||||
if("carpspawn")
|
||||
spawn_locs += L.loc
|
||||
if(!spawn_locs) //If we can't find either, just spawn the revenant at the player's location
|
||||
spawn_locs += get_turf(player_mind.current)
|
||||
if(!spawn_locs) //If we can't find THAT, then just retry
|
||||
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
|
||||
player_mind.transfer_to(S)
|
||||
player_mind.assigned_role = "Slaughter Demon"
|
||||
player_mind.special_role = "Slaughter Demon"
|
||||
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
|
||||
|
||||
|
||||
|
||||
/datum/event/spawn_slaughter/start()
|
||||
get_slaughter()
|
||||
|
||||
|
||||
|
||||
/datum/event/spawn_slaughter/proc/find_slaughter()
|
||||
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.")
|
||||
return 0
|
||||
message_admins("Unfortunately, no candidates were available for becoming a Slaugter Demon. Shutting down.")
|
||||
kill()
|
||||
return
|
||||
@@ -0,0 +1,413 @@
|
||||
///The following mini-antag was coded by KorPhaeron for TG Station
|
||||
//Credits: Concept: KorPhaeron, Sprite:Ausops, Sounds:Cuboos
|
||||
///Ported for paradise by Aurorablade/Fethas
|
||||
///Things added for port:
|
||||
//Various tweeks
|
||||
//Blood...
|
||||
/// Made the message tell you waht the demon is sinking into(gibs/blood etc)
|
||||
///Alot of blood...Alot..Of blood..
|
||||
|
||||
//////////////////The Monster
|
||||
|
||||
/mob/living/simple_animal/slaughter
|
||||
name = "Slaughter Demon"
|
||||
real_name = "Slaughter Demon"
|
||||
desc = "You should run."
|
||||
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"
|
||||
speed = 0
|
||||
a_intent = "harm"
|
||||
stop_automated_movement = 1
|
||||
status_flags = CANPUSH
|
||||
attack_sound = 'sound/misc/demon_attack1.ogg'
|
||||
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
|
||||
faction = list("slaughter")
|
||||
attacktext = "wildly tears into"
|
||||
maxHealth = 250
|
||||
health = 250
|
||||
environment_smash = 1
|
||||
universal_understand = 1
|
||||
melee_damage_lower = 30
|
||||
melee_damage_upper = 30
|
||||
see_in_dark = 8
|
||||
see_invisible = SEE_INVISIBLE_MINIMUM
|
||||
|
||||
|
||||
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
|
||||
var/vialspawned = FALSE
|
||||
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. </B>"
|
||||
//Paradise todo:change to altclick,add objectives. need ideas as i want people to be creative, not just RAWR KILL
|
||||
|
||||
|
||||
/mob/living/simple_animal/slaughter/New()
|
||||
..()
|
||||
spawn()
|
||||
if(src.mind)
|
||||
src.mind.current.verbs += /mob/living/simple_animal/slaughter/proc/bloodPull
|
||||
src.mind.current.verbs += /mob/living/simple_animal/slaughter/proc/slaughterWhisper
|
||||
src << src.playstyle_string
|
||||
src << "<B><span class ='notice'>You are not currently in the same plane of existence as the station. Ctrl+Click a blood pool to manifest.</span></B>"
|
||||
if(!(vialspawned))
|
||||
var/datum/objective/slaughter/objective = new
|
||||
var/datum/objective/demonFluff/fluffObjective = new
|
||||
ticker.mode.traitors |= src.mind
|
||||
objective.owner = src.mind
|
||||
fluffObjective.owner = src.mind
|
||||
//Paradise Port:I added the objective for one spawned like this
|
||||
src.mind.objectives += objective
|
||||
src.mind.objectives += fluffObjective
|
||||
src << "<B>Objective #[1]</B>: [objective.explanation_text]"
|
||||
src << "<B>Objective #[2]</B>: [fluffObjective.explanation_text]"
|
||||
|
||||
|
||||
/mob/living/simple_animal/slaughter/death()
|
||||
..(1)
|
||||
new /obj/effect/decal/cleanable/blood (src.loc)
|
||||
new /obj/effect/gibspawner/generic(get_turf(src))
|
||||
new /obj/effect/gibspawner/generic(get_turf(src))
|
||||
playsound(get_turf(src),'sound/misc/demon_dies.ogg', 200, 1)
|
||||
new /obj/item/weapon/demonheart (src.loc)
|
||||
visible_message("<span class='danger'>The [src] screams in anger as its form collapes into a pool of viscera.</span>")
|
||||
ghostize()
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
|
||||
|
||||
////////////////////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 << "<span class='notice'> You have consumed enough to be able to throw Excess Gore."
|
||||
src.notransform = 0
|
||||
if(!(src.eating))
|
||||
new /obj/effect/gibspawner/human(get_turf(src))///Somewhere a janitor weeps..
|
||||
sleep(6)
|
||||
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)
|
||||
qdel(src.holder)
|
||||
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
|
||||
|
||||
/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
|
||||
|
||||
|
||||
/mob/living/simple_animal/slaughter/proc/slaughterWhisper()
|
||||
set name = "Whisper"
|
||||
set desc = "Whisper to a mortal"
|
||||
set category = "Daemon"
|
||||
|
||||
var/list/choices = list()
|
||||
for(var/mob/living/carbon/C in living_mob_list)
|
||||
if(C.stat != 2 && C.mind)
|
||||
choices += C
|
||||
|
||||
var/mob/living/carbon/M = input(src,"Who do you wish to talk to?") in null|choices
|
||||
spawn(0)
|
||||
var/msg = stripped_input(usr, "What do you wish to tell [M]?", null, "")
|
||||
if(!(msg))
|
||||
return
|
||||
usr << "<span class='info'><b>You whisper to [M]:</b> [msg]</span>"
|
||||
M << "<span class='deadsay'><b>Suddenly a strange,demonic,voice resonates in your head...</b></span><i><span class='danger'> [msg]</span></I>"
|
||||
|
||||
|
||||
/mob/living/simple_animal/slaughter/proc/bloodPull()
|
||||
set name = "Exsanguinate"
|
||||
set desc = "Cuase blood to be torn our of mortals to help acess the plane.."
|
||||
set category = "Daemon"
|
||||
|
||||
for(var/mob/living/carbon/human/H in view(10,(src.holder || src.loc)))
|
||||
nearby_mortals.Add(H)
|
||||
|
||||
if (cooldown == 0 || world.time - cooldown > 1800)
|
||||
for(var/mob/living/carbon/human/H in view(7,(src.holder || src.loc)))
|
||||
nearby_mortals.Add(H)
|
||||
//var/mob/living/carbon/human/M = pop(nearby_mortals)
|
||||
if(nearby_mortals.len)
|
||||
playsound(src.loc, pick('sound/hallucinations/wail.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/far_noise.ogg'), 50, 1, -3)
|
||||
new /datum/artifact_effect/badfeeling/DoEffectPulse()
|
||||
for (var/mob/living/carbon/human/portal in nearby_mortals)
|
||||
var/targetPart = pick("chest","groin","head","l_arm","r_arm","r_leg","l_leg","l_hand","r_hand","l_foot","r_foot")
|
||||
portal.apply_damage(rand(5, 10), BRUTE, targetPart)
|
||||
portal << "\red The skin on your [parse_zone(targetPart)] feels like it's ripping apart, and a stream of blood flies out."
|
||||
var/obj/effect/decal/cleanable/blood/splatter/animated/aniBlood = new(portal.loc)
|
||||
aniBlood.target_turf = pick(range(1, src))
|
||||
aniBlood.blood_DNA = list()
|
||||
aniBlood.blood_DNA[portal.dna.unique_enzymes] = portal.dna.b_type
|
||||
portal.vessel.remove_reagent("blood",rand(25,50))
|
||||
cooldown = world.time
|
||||
else
|
||||
usr << "<span class='info'>You cannot Exsanguinate mortals yet!"
|
||||
|
||||
/mob/living/simple_animal/slaughter/proc/goreThrow(mob/target as mob in oview())
|
||||
set name = "Gore Throw"
|
||||
set desc = "Launch blood at some poor unsuspecting person..."
|
||||
set category = "Daemon"
|
||||
|
||||
if (!(src.phased))
|
||||
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)
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
//src << "[target]"//debug
|
||||
src.visible_message("<span class='warning'>[src] throws gore at [target]!</span>")
|
||||
H.bloody_body(target)
|
||||
H.bloody_hands(target)
|
||||
gorecooldown = world.time
|
||||
|
||||
else
|
||||
usr << "<span class='info'>You need more time to do that again!</span>"
|
||||
else
|
||||
usr << "<span class='info'> you can only do that from the material plane!</span>"
|
||||
|
||||
|
||||
|
||||
//////////The Loot
|
||||
|
||||
/obj/item/weapon/demonheart
|
||||
name = "demon's heart"
|
||||
desc = "It's still faintly beating with rage"
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
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()
|
||||
|
||||
//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))
|
||||
src << "[victimType.species]"//debug
|
||||
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)
|
||||
|
||||
|
||||
//Objective info, Based on Reverent mini Atang
|
||||
/datum/objective/slaughter
|
||||
var/targetKill = 10
|
||||
|
||||
/datum/objective/slaughter/New()
|
||||
targetKill = rand(10,20)
|
||||
explanation_text = "Devour [targetKill] mortals."
|
||||
..()
|
||||
|
||||
/datum/objective/slaughter/check_completion()
|
||||
if(!istype(owner.current, /mob/living/simple_animal/slaughter) || !owner.current)
|
||||
return 0
|
||||
var/mob/living/simple_animal/slaughter/R = owner.current
|
||||
if(!R || R.stat == DEAD)
|
||||
return 0
|
||||
var/deathCount = R.devoured
|
||||
if(deathCount < targetKill)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/datum/objective/demonFluff
|
||||
|
||||
|
||||
/datum/objective/demonFluff/New()
|
||||
find_target()
|
||||
var/targetname = "someone"
|
||||
if(target && target.current)
|
||||
targetname = target.current.real_name
|
||||
var/list/explanationTexts = list("Attempt to make your presence unknown to the crew.", \
|
||||
"Kill or Dystroy all Janitors or Sanitation bots.", \
|
||||
"Drive [targetname] insane."
|
||||
)
|
||||
|
||||
explanation_text = pick(explanationTexts)
|
||||
..()
|
||||
|
||||
/datum/objective/demonFluff/check_completion()
|
||||
return 1
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 203 KiB After Width: | Height: | Size: 223 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 11 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user