diff --git a/code/defines/obj/decal.dm b/code/defines/obj/decal.dm index 1fd30a0a27..3ae89fc366 100644 --- a/code/defines/obj/decal.dm +++ b/code/defines/obj/decal.dm @@ -15,6 +15,8 @@ /obj/decal/cleanable var/list/random_icon_states = list() +//HUMANS + /obj/decal/cleanable/blood name = "Blood" desc = "It's red." @@ -33,22 +35,6 @@ virus.cure(0) ..() -/obj/decal/cleanable/xenoblood - name = "Xeno blood" - desc = "It's green." - density = 0 - anchored = 1 - layer = 2 - icon = 'blood.dmi' - icon_state = "xfloor1" - random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7") - var/datum/disease/virus = null - - Del() - if(virus) - virus.cure(0) - ..() - /obj/decal/cleanable/blood/splatter random_icon_states = list("gibbl1", "gibbl2", "gibbl3", "gibbl4", "gibbl5") @@ -75,6 +61,49 @@ /obj/decal/cleanable/blood/gibs/core random_icon_states = list("gibmid1", "gibmid2", "gibmid3") +//ALIENS + +/obj/decal/cleanable/xenoblood + name = "xeno blood" + desc = "It's green." + density = 0 + anchored = 1 + layer = 2 + icon = 'blood.dmi' + icon_state = "xfloor1" + random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7") + var/datum/disease/virus = null + + Del() + if(virus) + virus.cure(0) + ..() + +/obj/decal/cleanable/xenoblood/xsplatter + random_icon_states = list("xgibbl1", "xgibbl2", "xgibbl3", "xgibbl4", "xgibbl5") + +/obj/decal/cleanable/xenoblood/xgibs + name = "xeno gibs" + desc = "Gnarly..." + icon = 'blood.dmi' + icon_state = "xgib1" + random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6") + +/obj/decal/cleanable/xenoblood/xgibs/body + random_icon_states = list("xgibhead", "xgibtorso") + +/obj/decal/cleanable/xenoblood/xgibs/limb + random_icon_states = list("xgibleg", "xgibarm") + +/obj/decal/cleanable/xenoblood/xgibs/core + random_icon_states = list("xgibmid1", "xgibmid2", "xgibmid3") + +/obj/decal/cleanable/blood/xtracks + icon_state = "xtracks" + random_icon_states = null + +//ROBOTS + /obj/decal/cleanable/robot_debris name = "robot debris" desc = "Useless heap of junk." @@ -94,7 +123,7 @@ density = 0 anchored = 1 layer = 2 - icon = 'oil.dmi' + icon = 'robots.dmi' icon_state = "floor1" var/datum/disease/virus = null random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7") @@ -107,6 +136,8 @@ /obj/decal/cleanable/oil/streak random_icon_states = list("streak1", "streak2", "streak3", "streak4", "streak5") +//OTHER + /obj/decal/cleanable/generic name = "clutter" desc = "Someone should clean that up." diff --git a/code/game/gamemodes/wizard/spell2.dm b/code/game/gamemodes/wizard/spell2.dm index b95db86c09..151716c1f6 100644 --- a/code/game/gamemodes/wizard/spell2.dm +++ b/code/game/gamemodes/wizard/spell2.dm @@ -1,6 +1,6 @@ /mob/proc/kill(mob/M as mob in oview(1)) set category = "Spells" - set name = "Shocking Grasp" + set name = "Disintegrate" if(usr.stat) usr << "Not when you're incapicated." return @@ -26,4 +26,4 @@ s.set_up(4, 1, M) s.start() - M.gib(1) + M.dust() diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index c1519f4110..afc1a7480b 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -343,7 +343,7 @@ dat += "Each item costs 1 telecrystal. The number afterwards is the cooldown time.
" dat += "Magic Missile (10)
" dat += "Fireball (10)
" - dat += "Shocking Grasp (60)
" + dat += "Disintegrate (60)
" dat += "Disable Technology (60)
" dat += "Smoke (10)
" dat += "Blind (30)
" @@ -381,7 +381,7 @@ src.uses -= 1 usr.verbs += /client/proc/fireball src.temp = "This spell fires a fireball at a target. Be careful not to fire it at people that are standing next to you." - else if (href_list["spell_shock"]) + else if (href_list["spell_disintegrate"]) if (src.uses >= 1) src.uses -= 1 usr.verbs += /mob/proc/kill @@ -490,7 +490,7 @@ src.menu_message += "Each item costs 1 telecrystal. The number afterwards is the cooldown time.
" src.menu_message += "Magic Missile (10)
" src.menu_message += "Fireball (10)
" - src.menu_message += "Shocking Grasp (60)
" + src.menu_message += "Disintegrate (60)
" src.menu_message += "Disable Technology (60)
" src.menu_message += "Smoke (10)
" src.menu_message += "Blind (30)
" @@ -522,11 +522,11 @@ src.uses -= 1 usr.verbs += /client/proc/fireball src.temp = "This spell fires a fireball at a target. Be careful not to fire it at people that are standing next to you." - if("shock") + if("disintegrate") if (src.uses >= 1) src.uses -= 1 usr.verbs += /mob/proc/kill - src.temp = "This spell instantly kills somebody standing next to you. It has a long cooldown." + src.temp = "This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown." if("emp") if (src.uses >= 1) src.uses -= 1 diff --git a/code/game/machinery/bots/cleanbot.dm b/code/game/machinery/bots/cleanbot.dm index 6c0a13e54d..3f109e6ff3 100644 --- a/code/game/machinery/bots/cleanbot.dm +++ b/code/game/machinery/bots/cleanbot.dm @@ -189,9 +189,13 @@ text("[src.oddbutton ? "Yes" : "No" /obj/machinery/bot/cleanbot/proc/get_targets() src.target_types = new/list() if(src.blood) + target_types += /obj/decal/cleanable/xenoblood/ + target_types += /obj/decal/cleanable/xenoblood/xgibs target_types += /obj/decal/cleanable/blood/ target_types += /obj/decal/cleanable/blood/gibs/ + target_types += /obj/decal/cleanable/oil + target_types += /obj/decal/cleanable/robot_debris /obj/machinery/bot/cleanbot/proc/clean(var/obj/decal/cleanable/target) src.anchored = 1 diff --git a/code/game/objects/blood.dm b/code/game/objects/blood.dm index bf87f9255f..29d8b62181 100644 --- a/code/game/objects/blood.dm +++ b/code/game/objects/blood.dm @@ -11,6 +11,8 @@ return */ +//Gibs.spread proc in gibs.dm + /obj/decal/cleanable/blood/gibs/proc/streak(var/list/directions) spawn (0) var/direction = pick(directions) @@ -23,6 +25,18 @@ if (step_to(src, get_step(src, direction), 0)) break +/obj/decal/cleanable/xenoblood/xgibs/proc/streak(var/list/directions) + spawn (0) + var/direction = pick(directions) + for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) + sleep(3) + if (i > 0) + var/obj/decal/cleanable/xenoblood/b = new /obj/decal/cleanable/xenoblood/xsplatter(src.loc) + if (src.virus) + b.virus = src.virus + if (step_to(src, get_step(src, direction), 0)) + break + /obj/decal/cleanable/robot_debris/proc/streak(var/list/directions) spawn (0) var/direction = pick(directions) diff --git a/code/game/objects/gibs.dm b/code/game/objects/gibs.dm index 0590ff65e7..cd14466f60 100644 --- a/code/game/objects/gibs.dm +++ b/code/game/objects/gibs.dm @@ -1,3 +1,5 @@ +//HUMANS + /proc/gibs(atom/location, var/datum/disease/virus) var/obj/decal/cleanable/blood/gibs/gib = null if(virus && virus.spread_type == SPECIAL) @@ -63,6 +65,75 @@ gib.virus.holder = gib gib.virus.spread_type = CONTACT_FEET +//ALIENS +//mostly carbon copy of the human code. N + +/proc/xgibs(atom/location, var/datum/disease/virus) + var/obj/decal/cleanable/xenoblood/xgibs/gib = null + if(virus && virus.spread_type == SPECIAL) + virus = null + + // NORTH + gib = new /obj/decal/cleanable/xenoblood/xgibs(location) + if (prob(30)) + gib.icon_state = "xgibup1" + if(virus && prob(20)) + gib.virus = new virus.type + gib.virus.holder = gib + gib.virus.spread_type = CONTACT_FEET + gib.streak(list(NORTH, NORTHEAST, NORTHWEST)) + + // SOUTH + gib = new /obj/decal/cleanable/xenoblood/xgibs(location) + if (prob(30)) + gib.icon_state = "xgibdown1" + if(virus && prob(20)) + gib.virus = new virus.type + gib.virus.holder = gib + gib.virus.spread_type = CONTACT_FEET + gib.streak(list(SOUTH, SOUTHEAST, SOUTHWEST)) + + // WEST + gib = new /obj/decal/cleanable/xenoblood/xgibs(location) + if(virus && prob(20)) + gib.virus = new virus.type + gib.virus.holder = gib + gib.virus.spread_type = CONTACT_FEET + gib.streak(list(WEST, NORTHWEST, SOUTHWEST)) + + // EAST + gib = new /obj/decal/cleanable/xenoblood/xgibs(location) + if(virus) + gib.virus = new virus.type + gib.virus.holder = gib + gib.virus.spread_type = CONTACT_FEET + gib.streak(list(EAST, NORTHEAST, SOUTHEAST)) + + // RANDOM BODY + gib = new /obj/decal/cleanable/xenoblood/xgibs/body(location) + if(virus && prob(20)) + gib.virus = new virus.type + gib.virus.holder = gib + gib.virus.spread_type = CONTACT_FEET + gib.streak(alldirs) + + // RANDOM LIMBS + for (var/i = 0, i < pick(0, 1, 2), i++) + gib = new /obj/decal/cleanable/xenoblood/xgibs/limb(location) + if(virus && prob(20)) + gib.virus = new virus.type + gib.virus.holder = gib + gib.virus.spread_type = CONTACT_FEET + gib.streak(alldirs) + + // CORE + gib = new /obj/decal/cleanable/xenoblood/xgibs/core(location) + if(virus && prob(20)) + gib.virus = new virus.type + gib.virus.holder = gib + gib.virus.spread_type = CONTACT_FEET + +//ROBOTS /proc/robogibs(atom/location, var/datum/disease/virus) var/obj/decal/cleanable/robot_debris/gib = null if(virus && virus.spread_type == SPECIAL) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 9100a5c24f..3555d6b050 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1872,7 +1872,9 @@ // world << "[src] ~ [src.bodytemperature] ~ [temperature]" return temperature -/mob/proc/gib(give_medal) +//This is the proc for gibbing a mob. Cannot gib ghosts. Removed the medal reference, +//added different sort of gibs and animations. N +/mob/proc/gib() if (istype(src, /mob/dead/observer)) var/virus = src.virus @@ -1884,12 +1886,19 @@ src.canmove = 0 src.icon = null src.invisibility = 101 + + animation = new(src.loc) + animation.icon_state = "blank" + animation.icon = 'mob.dmi' + animation.master = src if(ishuman(src)) - animation = new(src.loc) - animation.icon_state = "blank" - animation.icon = 'mob.dmi' - animation.master = src - flick("gibbed", animation) + flick("gibbed-h", animation) + else if(ismonkey(src)) + flick("gibbed-m", animation) + else if(isalien(src)) + flick("gibbed-a", animation) + else + flick("gibbed-r", animation) if (src.client) var/mob/dead/observer/newmob @@ -1902,6 +1911,8 @@ var/virus = src.virus if (istype(src, /mob/living/silicon)) robogibs(src.loc, virus) + else if (istype(src, /mob/living/carbon/alien)) + xgibs(src.loc, virus) else gibs(src.loc, virus) @@ -1909,12 +1920,53 @@ var/virus = src.virus if (istype(src, /mob/living/silicon)) robogibs(src.loc, virus) + else if (istype(src, /mob/living/carbon/alien)) + xgibs(src.loc, virus) else gibs(src.loc, virus) //CRASH("Generating error messages to attempt to fix random gibbins.") //no longer necessary sleep(15) del(src) +/* +This is the proc for turning a mob into ash. Mostly a copy of gib code (above). +Originally created for wizard disintegrate. I've removed the virus code since it's irrelevant here. N +*/ +/mob/proc/dust() + + if (istype(src, /mob/dead/observer)) + return + src.death(1) + var/atom/movable/overlay/animation = null + src.monkeyizing = 1 + src.canmove = 0 + src.icon = null + src.invisibility = 101 + + animation = new(src.loc) + animation.icon_state = "blank" + animation.icon = 'mob.dmi' + animation.master = src + if(ishuman(src)) + flick("dust-h", animation) + else if(ismonkey(src)) + flick("dust-m", animation) + else if(isalien(src)) + flick("dust-a", animation) + else + flick("dust-r", animation) + new /obj/decal/ash(src.loc) + + if (src.client) + var/mob/dead/observer/newmob + + newmob = new/mob/dead/observer(src) + src:client:mob = newmob + if (src.mind) + src.mind.transfer_to(newmob) + + sleep(15) + del(src) /mob/proc/get_contents() var/list/L = list() @@ -1943,14 +1995,15 @@ return 0 -// adds a dizziness amount to a mob -// use this rather than directly changing var/dizziness -// since this ensures that the dizzy_process proc is started -// currently only humans get dizzy - -// value of dizziness ranges from 0 to 1000 -// below 100 is not dizzy +/* +adds a dizziness amount to a mob +use this rather than directly changing var/dizziness +since this ensures that the dizzy_process proc is started +currently only humans get dizzy +value of dizziness ranges from 0 to 1000 +below 100 is not dizzy +*/ /mob/proc/make_dizzy(var/amount) if(!istype(src, /mob/living/carbon/human)) // for the moment, only humans get dizzy return @@ -1962,9 +2015,11 @@ dizzy_process() -// dizzy process - wiggles the client's pixel offset over time -// spawned from make_dizzy(), will terminate automatically when dizziness gets <100 -// note dizziness decrements automatically in the mob's Life() proc. +/* +dizzy process - wiggles the client's pixel offset over time +spawned from make_dizzy(), will terminate automatically when dizziness gets <100 +note dizziness decrements automatically in the mob's Life() proc. +*/ /mob/proc/dizzy_process() is_dizzy = 1 while(dizziness > 100) diff --git a/icons/effects/blood.dmi b/icons/effects/blood.dmi index 19b3029ad0..abd17e8924 100644 Binary files a/icons/effects/blood.dmi and b/icons/effects/blood.dmi differ diff --git a/icons/effects/oil.dmi b/icons/effects/oil.dmi deleted file mode 100644 index ddc87f46bd..0000000000 Binary files a/icons/effects/oil.dmi and /dev/null differ diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index e8e3271a05..4d94ab84b3 100644 Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi index c194306010..640d9f8a75 100644 Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ