Colonectomy

Various fixes by feedback
Render Item refactor to modular system
This commit is contained in:
Aurorablade
2015-07-20 17:04:32 -04:00
parent f4bc0a2f7a
commit 0bb5dd626b
7 changed files with 188 additions and 259 deletions
+1 -2
View File
@@ -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"