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
View File
@@ -95,7 +95,6 @@
var/canmove = 1
density = 0
anchored = 1
invisibility = INVISIBILITY_OBSERVER
/obj/effect/dummy/spell_jaunt/Destroy()
// Eject contents if deleted somehow
+18 -17
View File
@@ -81,7 +81,7 @@
/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)
if(user.z != ZLEVEL_STATION)//this is to make sure the wizard does NOT summon a demon from the Den..
user << "<span class='notice'>You should probably wait until you reach the station.</span>"
return
if(!checking)
@@ -108,7 +108,7 @@
possiblecandidates -= demon_candidates
used = 1
checking = 0
spawn_antag(demon_candidates, get_turf(src.loc), "Slaughter Demon")
spawn_antag(demon_candidates, get_turf(src.loc), "Slaughter Demon",user)
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)
@@ -126,24 +126,25 @@
return
/obj/item/weapon/antag_spawner/slaughter_demon/spawn_antag(var/client/C, var/turf/T, var/type = "")
/obj/item/weapon/antag_spawner/slaughter_demon/spawn_antag(var/client/C, var/turf/T, var/type = "", mob/user as mob)
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]"
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/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]"
+54 -115
View File
@@ -118,143 +118,82 @@
force = 15
throwforce = 10
w_class = 3
var/charged = 1
hitsound = 'sound/weapons/bladeslice.ogg'
var/charged = 1
var/spawn_type = /obj/singularity/narsie/wizard
var/spawn_amt = 1
var/activate_descriptor = "reality"
var/rend_desc = "You should run now."
/obj/item/weapon/veilrender/attack_self(mob/user as mob)
if(charged)
new /obj/effect/rend(get_turf(user), spawn_type, spawn_amt, rend_desc)
charged = 0
user.visible_message("<span class='userdanger'>[src] hums with power as [user] deals a blow to [activate_descriptor] itself!</span>")
else
user << "<span class='danger'>The unearthly energies that powered the blade are now dormant.</span>"
/obj/effect/rend
name = "tear in the fabric of reality"
desc = "You should run now"
desc = "You should run now."
icon = 'icons/obj/biomass.dmi'
icon_state = "rift"
density = 1
unacidable = 1
anchored = 1.0
var/spawn_path = /mob/living/simple_animal/cow //defaulty cows to prevent unintentional narsies
var/spawn_amt_left = 20
/obj/effect/rend/New()
spawn(50)
new /obj/singularity/narsie/wizard(get_turf(src))
/obj/effect/rend/New(loc, var/spawn_type, var/spawn_amt, var/desc)
..()
src.spawn_path = spawn_type
src.spawn_amt_left = spawn_amt
src.desc = desc
processing_objects.Add(src)
//return
/obj/effect/rend/process()
for(var/mob/M in loc)
return
new spawn_path(loc)
spawn_amt_left--
if(spawn_amt_left <= 0)
qdel(src)
/obj/effect/rend/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I, /obj/item/weapon/nullrod))
user.visible_message("<span class='danger'>[user] seals \the [src] with \the [I].</span>")
qdel(src)
return
return
/obj/item/weapon/veilrender/attack_self(mob/user as mob)
if(charged == 1)
new /obj/effect/rend(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 unearthly energies that powered the blade are now dormant."
..()
/obj/item/weapon/veilrender/vealrender
name = "veal render"
desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast farm."
spawn_type = /mob/living/simple_animal/cow
spawn_amt = 20
activate_descriptor = "hunger"
rend_desc = "Reverberates with the sound of ten thousand moos."
/obj/item/weapon/veilrender/vealrender/attack_self(mob/user as mob)
if(charged)
new /obj/effect/rend/cow(get_turf(usr))
charged = 0
visible_message("\red <B>[src] hums with power as [usr] deals a blow to hunger itself!</B>")
else
user << "\red The unearthly energies that powered the blade are now dormant."
/obj/effect/rend/cow
desc = "Reverberates with the sound of ten thousand moos."
var/cowsleft = 20
/obj/effect/rend/cow/New()
processing_objects.Add(src)
return
/obj/effect/rend/cow/process()
if(locate(/mob) in loc) return
new /mob/living/simple_animal/cow(loc)
cowsleft--
if(cowsleft <= 0)
qdel(src)
/obj/effect/rend/cow/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)
qdel(src)
return
..()
//Why did i add this....-Fethas
/obj/item/weapon/veilrender/honkrender //HONK!!
/obj/item/weapon/veilrender/honkrender
name = "honk render"
desc = "A wicked curved 'blade' of honk origin, recovered from the ruins of a vast circus."
desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast circus."
spawn_type = /mob/living/simple_animal/hostile/retaliate/clown
spawn_amt = 10
activate_descriptor = "depression"
rend_desc = "Gently wafting with the sounds of endless laughter."
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!!
/obj/item/weapon/veilrender/crabrender
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
// ..()
spawn_type = /mob/living/simple_animal/crab
spawn_amt = 10
activate_descriptor = "sea life"
rend_desc = "Gently wafting with the sounds of endless clacking."
/////////////////////////////////////////Scrying///////////////////
@@ -272,5 +211,5 @@
/obj/item/weapon/scrying/attack_self(mob/user as mob)
user << "\blue You can see...everything!"
visible_message("\red <B>[usr] stares into [src], their eyes glazing over.</B>")
visible_message("\red <B>[user] stares into [src], their eyes glazing over.</B>")
user.ghostize(1)
+1 -1
View File
@@ -267,7 +267,7 @@
user << "\blue The walls suddenly disappear."
return 1
/datum/spellbook_entry/item/scryingorb/CanBuy(var/mob/living/carbon/human/user,var/obj/item/weapon/spellbook/book)
/datum/spellbook_entry/item/bloodbottle/CanBuy(var/mob/living/carbon/human/user,var/obj/item/weapon/spellbook/book)
return ..() && !limit
/datum/spellbook_entry/item/soulstones
+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"