mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-17 18:13:34 +01:00
Colonectomy
Various fixes by feedback Render Item refactor to modular system
This commit is contained in:
@@ -66,5 +66,4 @@
|
||||
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
|
||||
kill()
|
||||
@@ -12,109 +12,106 @@
|
||||
|
||||
|
||||
|
||||
New(loc, var/h = 100)
|
||||
nodecount +=1
|
||||
processing_objects.Add(src)
|
||||
NodeColor()
|
||||
..(loc, h)
|
||||
/obj/effect/bloodnode/New(loc, var/h = 100)
|
||||
nodecount +=1
|
||||
processing_objects.Add(src)
|
||||
NodeColor()
|
||||
..(loc, h)
|
||||
|
||||
Destroy()
|
||||
nodecount -= 1
|
||||
processing_objects.Remove(src)
|
||||
..()
|
||||
return
|
||||
|
||||
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
|
||||
return
|
||||
/obj/effect/bloodnode/Destroy()
|
||||
nodecount -= 1
|
||||
processing_objects.Remove(src)
|
||||
..()
|
||||
|
||||
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/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
|
||||
|
||||
proc/Delete()
|
||||
/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()
|
||||
//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))
|
||||
Delete()
|
||||
return
|
||||
|
||||
|
||||
/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("<span class='danger'>The [src.name] has been attacked with \the [W][(user ? " by [user]." : ".")]</span>")
|
||||
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("<span class='danger'>\The [src.name] has been punched by [user]!</span>")
|
||||
damage = max(damage)
|
||||
health -= damage
|
||||
update_icon()
|
||||
|
||||
ex_act(severity)
|
||||
var/damage = 150
|
||||
health -= ((damage - (severity * 5)))
|
||||
//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("<span class='danger'>\The [src.name] has been attacked by \the [M]!</span>")
|
||||
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()
|
||||
|
||||
|
||||
bullet_act(var/obj/item/projectile/Proj)
|
||||
..()
|
||||
health -= (Proj.damage)
|
||||
//update_icon()
|
||||
return 0
|
||||
|
||||
|
||||
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("\red <B>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()
|
||||
return
|
||||
|
||||
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(1,10)
|
||||
if(!damage) // Avoid divide by zero errors
|
||||
return
|
||||
damage = max(damage)
|
||||
health -= damage
|
||||
update_icon()
|
||||
return
|
||||
|
||||
|
||||
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("<span class='danger'>The [src.name] has been attacked by \the [M]!</span>")
|
||||
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()
|
||||
return
|
||||
|
||||
@@ -1,12 +1,3 @@
|
||||
///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
|
||||
@@ -27,20 +18,21 @@
|
||||
status_flags = CANPUSH
|
||||
attack_sound = 'sound/misc/demon_attack1.ogg'
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
max_oxy = INFINITY
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
max_tox = INFINITY
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
max_co2 = INFINITY
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
max_n2 = INFINITY
|
||||
minbodytemp = 0
|
||||
maxbodytemp = INFINITY
|
||||
faction = list("slaughter")
|
||||
attacktext = "wildly tears into"
|
||||
maxHealth = 250
|
||||
health = 250
|
||||
environment_smash = 1
|
||||
universal_understand = 1
|
||||
//universal_understand = 1
|
||||
melee_damage_lower = 30
|
||||
melee_damage_upper = 30
|
||||
see_in_dark = 8
|
||||
@@ -93,10 +85,9 @@
|
||||
visible_message("<span class='danger'>The [src] screams in anger as its form collapes into a pool of viscera.</span>")
|
||||
ghostize()
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/slaughter/say(message)
|
||||
return 0
|
||||
////////////////////The Powers
|
||||
|
||||
/mob/living/simple_animal/slaughter/proc/phaseout(var/obj/effect/decal/cleanable/B)
|
||||
@@ -124,10 +115,10 @@
|
||||
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("[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.visible_message("<span class='danger'><B>\The [src] drags [victim] into [B]!</B></span>")
|
||||
src.kidnapped = victim
|
||||
flick("jaunt",animation)
|
||||
src.loc = holder
|
||||
@@ -161,12 +152,13 @@
|
||||
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."
|
||||
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)
|
||||
qdel(animation)
|
||||
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 )
|
||||
@@ -189,12 +181,14 @@
|
||||
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>")
|
||||
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)
|
||||
if(src.holder)
|
||||
qdel(src.holder)
|
||||
if(animation)
|
||||
qdel(animation)
|
||||
|
||||
/obj/effect/decal/cleanable/blood/CtrlClick(var/mob/user)
|
||||
..()
|
||||
@@ -238,7 +232,7 @@
|
||||
var/canmove = 1
|
||||
density = 0
|
||||
anchored = 1
|
||||
invisibility = INVISIBILITY_OBSERVER
|
||||
//invisibility = INVISIBILITY_OBSERVER
|
||||
|
||||
/obj/effect/dummy/slaughter/relaymove(var/mob/user, direction)
|
||||
if (!src.canmove || !direction) return
|
||||
@@ -268,7 +262,7 @@
|
||||
|
||||
var/list/choices = list()
|
||||
for(var/mob/living/carbon/C in living_mob_list)
|
||||
if(C.stat != 2 && C.mind)
|
||||
if(C.stat != 2 && C.client && C.stat != DEAD)
|
||||
choices += C
|
||||
|
||||
var/mob/living/carbon/M = input(src,"Who do you wish to talk to?") in null|choices
|
||||
@@ -301,7 +295,7 @@
|
||||
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 << "\red The skin on your [parse_zone(targetPart)] feels like it's ripping apart, and a stream of blood flies out."
|
||||
portal << "<span class='notice'>\The skin on your [parse_zone(targetPart)] feels like it's ripping apart, and a stream of blood flies out.</span>"
|
||||
var/obj/effect/decal/cleanable/blood/splatter/animated/aniBlood = new(portal.loc)
|
||||
aniBlood.target_turf = pick(range(1, src))
|
||||
aniBlood.blood_DNA = list()
|
||||
@@ -309,7 +303,7 @@
|
||||
portal.vessel.remove_reagent("blood",rand(25,50))
|
||||
cooldown = world.time
|
||||
else
|
||||
usr << "<span class='info'>You cannot Exsanguinate mortals yet!"
|
||||
usr << "<span class='info'>You cannot Exsanguinate mortals yet!</span>"
|
||||
|
||||
/mob/living/simple_animal/slaughter/proc/goreThrow(mob/target as mob in oview())
|
||||
set name = "Gore Throw"
|
||||
|
||||
Reference in New Issue
Block a user