diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm index 1ba84f91ecd..d3b96551e16 100644 --- a/code/game/gamemodes/antag_spawner.dm +++ b/code/game/gamemodes/antag_spawner.dm @@ -76,54 +76,24 @@ 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) + var/list/demon_candidates = get_candidates(BE_ALIEN) if(user.z == ZLEVEL_CENTCOMM)//this is to make sure the wizard does NOT summon a demon from the Den.. user << "You should probably wait until you reach the station." return - if(!checking) - user << "You ready yourself to shatter the bottle..." - get_candidate_answer(user, get_candidates(BE_ALIEN)) + if(demon_candidates.len > 0) + used = 1 + var/client/C = pick(demon_candidates) + spawn_antag(C, get_turf(src.loc), "Slaughter Demon") + user << "You shatter the bottle, no turning back now!" + user << "You sense a dark presence lurking just beyond the veil..." + playsound(user.loc, 'sound/effects/Glassbr1.ogg', 100, 1) + qdel(src) else - user << "You are already thinking about shattering the bottle." - 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 << "You can't seem to work up the nerve to shatter the bottle. Perhaps you should try again later.." - 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) - user << "You shatter the bottle, no turning back now!" - user << "You sense a dark presence lurking just beyond the veil..." - 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 + user << "You can't seem to work up the nerve to shatter the bottle. Perhaps you should try again later." /obj/item/weapon/antag_spawner/slaughter_demon/spawn_antag(var/client/C, var/turf/T, var/type = "", mob/user as mob) @@ -133,20 +103,18 @@ S.vialspawned = TRUE S.holder = holder S.key = C.key - if(S.mind) - 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 = user.mind - KillDaWiz.explanation_text = "Kill [user.real_name], the one who was foolish enough to summon you." - S.mind.objectives += KillDaWiz - var/datum/objective/KillDaCrew = new /datum/objective - KillDaCrew.owner = S.mind - KillDaCrew.explanation_text = "Kill everyone else while you're at it." - S.mind.objectives += KillDaCrew - //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 += KillDaCrew - S << "Objective #[1]: [KillDaWiz.explanation_text]" - S << "Objective #[2]: [KillDaCrew.explanation_text]" \ No newline at end of file + 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 = user.mind + KillDaWiz.explanation_text = "Kill [user.real_name], the one who was foolish enough to summon you." + S.mind.objectives += KillDaWiz + var/datum/objective/KillDaCrew = new /datum/objective + KillDaCrew.owner = S.mind + KillDaCrew.explanation_text = "Kill everyone else while you're at it." + S.mind.objectives += KillDaCrew + S.mind.objectives += KillDaCrew + S << "Objective #[1]: [KillDaWiz.explanation_text]" + S << "Objective #[2]: [KillDaCrew.explanation_text]" \ No newline at end of file diff --git a/code/modules/events/slaughterevent.dm b/code/modules/events/slaughterevent.dm index 5d0c5304be2..7b39f035010 100644 --- a/code/modules/events/slaughterevent.dm +++ b/code/modules/events/slaughterevent.dm @@ -1,24 +1,19 @@ -/datum/event/spawn_slaughter//Paradise port:Changed from round_event to event, i was getting errors +/datum/event/spawn_slaughter 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 + if(!key_of_slaughter) 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 + key_of_slaughter = C.key if(!key_of_slaughter) if(end_if_fail) return 0 diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm index eaaa2ab23e7..76c71cfeb87 100644 --- a/code/modules/mob/living/bloodcrawl.dm +++ b/code/modules/mob/living/bloodcrawl.dm @@ -25,7 +25,7 @@ src.ExtinguishMob() if(src.buckled) src.buckled.unbuckle() - if(src.pulling && src.bloodcrawl == 2) + if(src.pulling && src.bloodcrawl == BLOODCRAWL_EAT) if(istype(src.pulling, /mob/living/)) var/mob/living/victim = src.pulling if(victim.stat == CONSCIOUS) @@ -41,33 +41,26 @@ if(kidnapped) src << "You begin to feast on [kidnapped]. You can not move while you are doing this." src.visible_message("Loud eating sounds come from the blood...") - 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 << "You devour [kidnapped]. Your health is fully restored." src.adjustBruteLoss(-1000) + src.adjustFireLoss(-1000) + src.adjustOxyLoss(-1000) + src.adjustToxLoss(-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 << " You have consumed enough to be able to summon Excess Gore." else sleep(6) if (animation) @@ -140,7 +133,6 @@ var/canmove = 1 density = 0 anchored = 1 - //invisibility = INVISIBILITY_OBSERVER /obj/effect/dummy/slaughter/relaymove(var/mob/user, direction) if (!src.canmove || !direction) return @@ -157,37 +149,4 @@ 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) + return \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/slaughter/bloodnode.dm b/code/modules/mob/living/simple_animal/slaughter/bloodnode.dm deleted file mode 100644 index 15825362eff..00000000000 --- a/code/modules/mob/living/simple_animal/slaughter/bloodnode.dm +++ /dev/null @@ -1,117 +0,0 @@ -//yes i did stealfrom blobcode... -/obj/effect/bloodnode - name = "blood pustilue" - icon = 'icons/mob/blob.dmi' - icon_state = "blank_blob" - var/health = 100 - anchored = 1 - density = 1 - var/lastblood = 0 - var/nodecount = 0 - var/datum/artifact_effect/paranoia = new /datum/artifact_effect/badfeeling - - - -/obj/effect/bloodnode/New(loc, var/h = 100) - nodecount +=1 - processing_objects.Add(src) - NodeColor() - ..(loc, h) - - -/obj/effect/bloodnode/Destroy() - nodecount -= 1 - processing_objects.Remove(src) - ..() - -/obj/effect/bloodnode/process() - if(lastblood == 0 || (world.time - lastblood) > 600) - //src.visible_message("pulse!")//debug - var/obj/effect/decal/cleanable/blood/splatter/blooddecal = new (src.loc) - playsound(get_turf(src), 'sound/effects/splat.ogg', 50, 1) - //throw that then use a gibspawner - new /obj/effect/gibspawner/human(get_turf(src)) - var/atom/bloodtarget = get_edge_target_turf(src, get_dir(src, get_step_away(src, src))) - blooddecal.throw_at(get_edge_target_turf(bloodtarget,pick(alldirs)),rand(5,15),5) - lastblood += world.time - -/obj/effect/bloodnode/proc/NodeColor()//Stealing from NEW blob code... - overlays.Cut() - var/image/I = new('icons/mob/blob.dmi', "blob") - I.color = "#7F0000" - overlays += I - var/image/C = new('icons/mob/blob.dmi', "blob_node_overlay") - C.color = "#FF4C4C" - overlays += C - - - -/obj/effect/bloodnode/update_icon() - //src.visible_message("[health]") - if(health <= 0) - playsound(get_turf(src), 'sound/effects/gib.ogg', 50, 1) - new /obj/effect/gibspawner/human(get_turf(src)) - qdel(src) - - -/obj/effect/bloodnode/ex_act(severity) - var/damage = 150 - health -= ((damage - (severity * 5))) - update_icon() - - -/obj/effect/bloodnode/bullet_act(var/obj/item/projectile/Proj) - ..() - health -= (Proj.damage) - update_icon() - return 0 - - -/obj/effect/bloodnode/attackby(var/obj/item/weapon/W, var/mob/living/user, params) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - playsound(get_turf(src), 'sound/effects/attackblob.ogg', 50, 1) - src.visible_message("The [src.name] has been attacked with \the [W][(user ? " by [user]." : ".")]") - var/damage = 0 - switch(W.damtype) - if("fire") - damage = (W.force) - if(istype(W, /obj/item/weapon/weldingtool)) - playsound(get_turf(src), 'sound/items/Welder.ogg', 100, 1) - if("brute") - if(prob(25)) - paranoia.DoEffectTouch(user) - damage = (W.force) - - health -= damage - update_icon() - - -/obj/effect/bloodnode/attack_hand(var/mob/user) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - if(prob(25)) - paranoia.DoEffectTouch(user) - playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1) - var/damage = rand(5,10) - if(!damage) // Avoid divide by zero errors - return - src.visible_message("\The [src.name] has been punched by [user]!") - damage = max(damage) - health -= damage - update_icon() - - - -/obj/effect/bloodnode/attack_animal(mob/living/simple_animal/M as mob) - M.changeNext_move(CLICK_CD_MELEE) - M.do_attack_animation(src) - playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1) - src.visible_message("\The [src.name] has been attacked by \the [M]!") - var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) - if(!damage) // Avoid divide by zero errors - return - damage = max(damage) - health -= damage - update_icon() - diff --git a/code/modules/mob/living/simple_animal/slaughter/slaughter.dm b/code/modules/mob/living/simple_animal/slaughter/slaughter.dm index 02af98027c3..1332d75b1bf 100644 --- a/code/modules/mob/living/simple_animal/slaughter/slaughter.dm +++ b/code/modules/mob/living/simple_animal/slaughter/slaughter.dm @@ -47,7 +47,7 @@ var/cooldown = 0 var/gorecooldown = 0 var/vialspawned = FALSE - var/playstyle_string = "You are the Slaughter Demon, a terible creature from another existence. You have a single desire: To kill. \ + var/playstyle_string = "You are the Slaughter Demon, a terrible 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. " @@ -57,7 +57,6 @@ ..() 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 << "You are not currently in the same plane of existence as the station. Ctrl+Click a blood pool to manifest." @@ -81,8 +80,8 @@ else speed = 0 -/mob/living/simple_animal/slaughter/death() - ..(1) +/mob/living/simple_animal/slaughter/Die() + ..() new /obj/effect/decal/cleanable/blood (src.loc) new /obj/effect/gibspawner/generic(get_turf(src)) new /obj/effect/gibspawner/generic(get_turf(src)) @@ -124,77 +123,6 @@ usr << "You whisper to [M]: [msg]" M << "Suddenly a strange,demonic,voice resonates in your head... [msg]" - -/mob/living/simple_animal/slaughter/proc/bloodPull() - set name = "Exsanguinate" - set desc = "Cuase blood to be torn out 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/effects/ghost.ogg','sound/effects/ghost2.ogg'), 50, 1, -3) - var/datum/artifact_effect/paranoia = new /datum/artifact_effect/badfeeling - - for (var/mob/living/carbon/human/portal in nearby_mortals) - if(prob(25)) - paranoia.DoEffectPulse() - 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 << "\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 << "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.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) - if(ishuman(target)) - var/mob/living/carbon/human/H = target - //src << "[target]"//debug - src.visible_message("[src] throws gore at [target]!") - H.bloody_body(target) - H.bloody_hands(target) - gorecooldown = world.time - - else - usr << "You need more time to do that again!" - else - usr << " you can only do that from the material plane!" - - -//inverse of gore throw, can only use while phased OUT -/mob/living/simple_animal/slaughter/proc/bloodSac() - set name = "Blood Pustile" - set desc = "Summon a blood filled that expels blood." - set category = "Daemon" - if (src.notransform) - if (gorecooldown == 0 || world.time - gorecooldown > 1200) - - new /obj/effect/bloodnode(src.holder) - gorecooldown = world.time - - else - usr << "You need more time to do that again!" - else - usr << " you can only do that from outside the material plane!" - //////////The Loot /obj/item/weapon/demonheart diff --git a/paradise.dme b/paradise.dme index 4e0226eb9c1..765e546ef36 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1455,7 +1455,6 @@ #include "code\modules\mob\living\simple_animal\revenant\revenant.dm" #include "code\modules\mob\living\simple_animal\revenant\revenant_abilities.dm" #include "code\modules\mob\living\simple_animal\revenant\revenant_spawn_event.dm" -#include "code\modules\mob\living\simple_animal\slaughter\bloodnode.dm" #include "code\modules\mob\living\simple_animal\slaughter\slaughter.dm" #include "code\modules\mob\new_player\login.dm" #include "code\modules\mob\new_player\logout.dm"