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