diff --git a/code/game/objects/effects/decals/cleanable/aliens.dm b/code/game/objects/effects/decals/cleanable/aliens.dm index 6d6b1731d5..2b9ac1cbe1 100644 --- a/code/game/objects/effects/decals/cleanable/aliens.dm +++ b/code/game/objects/effects/decals/cleanable/aliens.dm @@ -10,20 +10,17 @@ /obj/effect/decal/cleanable/blood/gibs/xeno color = BLOOD_COLOR_XENO - unique_body = "x" /obj/effect/decal/cleanable/blood/gibs/xeno/Initialize(mapload, list/datum/disease/diseases) . = ..() reagents.add_reagent("liquidxenogibs", 5) - guts() -/obj/effect/decal/cleanable/blood/gibs/xeno/guts() +/obj/effect/decal/cleanable/blood/gibs/xeno/update_icon() if(gib_overlay) var/icon/blood = new(icon,"[icon_state]",dir) - var/image/gibz = new(icon, icon_state + "[unique_body]-overlay") + var/image/gibz = new(icon, icon_state + "x-overlay") blood.Blend(blood_DNA_to_color(),ICON_MULTIPLY) - icon = blood - cut_overlays() + gibz.appearance_flags = RESET_COLOR add_overlay(gibz) /obj/effect/decal/cleanable/blood/gibs/xeno/streak(list/directions) diff --git a/code/game/objects/effects/decals/cleanable/gibs.dm b/code/game/objects/effects/decals/cleanable/gibs.dm index fdb1cec174..3f498bcc69 100644 --- a/code/game/objects/effects/decals/cleanable/gibs.dm +++ b/code/game/objects/effects/decals/cleanable/gibs.dm @@ -7,23 +7,26 @@ mergeable_decal = FALSE var/gib_overlay = FALSE var/body_colors = "e3ba84" //a default color just in case. - var/unique_body = "c" + +/obj/effect/decal/cleanable/blood/gibs/Initialize(mapload, list/datum/disease/diseases) + . = ..() /obj/effect/decal/cleanable/blood/gibs/update_icon() - . = ..() - guts() + cut_overlays() + var/list/guts = list() + var/mutable_appearance/blood = new(icon, "[icon_state]") + blood.appearance_flags |= RESET_COLOR|KEEP_APART + blood.color = blood_DNA_to_color() + guts += blood + var/mutable_appearance/gibz = new(icon, "[icon_state]-guts") + gibz.appearance_flags |= RESET_COLOR|KEEP_APART + guts += gibz + var/mutable_appearance/gibz2 = new(icon, "[icon_state]c-overlay") + gibz2.appearance_flags |= RESET_COLOR|KEEP_APART + gibz2.color = body_colors + guts += gibz2 -/obj/effect/decal/cleanable/blood/gibs/proc/guts() - if(gib_overlay) - var/icon/blood = new(icon,"[icon_state]",dir) - var/icon/gibz = new(icon, icon_state + "-overlay") - var/image/gibz2 = new(icon, icon_state + "[unique_body]-overlay") - blood.Blend(blood_DNA_to_color(),ICON_MULTIPLY) - gibz2.color = body_colors - icon = blood - cut_overlays() - add_overlay(gibz) - add_overlay(gibz2) + add_overlay(guts) /obj/effect/decal/cleanable/blood/gibs/ex_act(severity, target) return @@ -107,20 +110,6 @@ /obj/effect/decal/cleanable/blood/gibs/human/Initialize(mapload, list/datum/disease/diseases) . = ..() reagents.add_reagent("liquidgibs", 5) - update_icon() - -/obj/effect/decal/cleanable/blood/gibs/human/guts() - if(gib_overlay) - var/icon/blood = new(icon,"[icon_state]",dir) - var/icon/gibz = new(icon, icon_state + "-overlay") - var/image/gibz2 = new(icon, icon_state + "[unique_body]-overlay") - blood.Blend(blood_DNA_to_color(),ICON_MULTIPLY) - gibz2.color = body_colors - icon = blood - cut_overlays() - add_overlay(gibz) - add_overlay(gibz2) - /obj/effect/decal/cleanable/blood/gibs/human/up random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1") @@ -150,24 +139,6 @@ /obj/effect/decal/cleanable/blood/gibs/human/lizard body_colors = "117720" -/obj/effect/decal/cleanable/blood/gibs/human/lizard/Initialize(mapload, list/datum/disease/diseases) - . = ..() - reagents.add_reagent("liquidgibs", 5) - update_icon() - -/obj/effect/decal/cleanable/blood/gibs/human/lizard/guts() - if(gib_overlay) - var/icon/blood = new(icon,"[icon_state]",dir) - var/icon/gibz = new(icon, icon_state + "-overlay") - var/image/gibz2 = new(icon, icon_state + "[unique_body]-overlay") - blood.Blend(blood_DNA_to_color(),ICON_MULTIPLY) - gibz2.color = body_colors - icon = blood - cut_overlays() - add_overlay(gibz) - add_overlay(gibz2) - - /obj/effect/decal/cleanable/blood/gibs/human/lizard/up random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1") gib_overlay = TRUE @@ -195,24 +166,16 @@ // Slime Gibs /obj/effect/decal/cleanable/blood/gibs/slime desc = "They look gooey and gruesome." - unique_body = "c" - body_colors = "00fff" /obj/effect/decal/cleanable/blood/gibs/slime/Initialize(mapload, list/datum/disease/diseases) . = ..() reagents.add_reagent("liquidslimegibs", 5) - update_icon() - guts() - -/obj/effect/decal/cleanable/blood/gibs/slime/guts() +/* +/obj/effect/decal/cleanable/blood/gibs/slime/update_icon() if(gib_overlay) - var/icon/blood = new(icon,"[icon_state]",dir) - var/image/gibz = new(icon, icon_state + "[unique_body]-overlay") - blood.Blend(blood_DNA_to_color(),ICON_MULTIPLY) + var/image/gibz = new(icon, icon_state + "c-overlay") gibz.color = body_colors - icon = blood - cut_overlays() - add_overlay(gibz) + add_overlay(gibz) */ /obj/effect/decal/cleanable/blood/gibs/slime/up random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1") @@ -240,34 +203,26 @@ /obj/effect/decal/cleanable/blood/gibs/synth desc = "They look sludgy and disgusting." - unique_body = "r" /obj/effect/decal/cleanable/blood/gibs/synth/Initialize(mapload, list/datum/disease/diseases) . = ..() reagents.add_reagent("liquidsyntheticgibs", 5) - update_icon() - guts() //IPCs /obj/effect/decal/cleanable/blood/gibs/ipc desc = "They look sharp yet oozing." - unique_body = "r" body_colors = "00ff00" /obj/effect/decal/cleanable/blood/gibs/ipc/Initialize(mapload, list/datum/disease/diseases) . = ..() reagents.add_reagent("liquidoilgibs", 5) - update_icon() - guts() -/obj/effect/decal/cleanable/blood/gibs/ipc/guts() +/obj/effect/decal/cleanable/blood/gibs/ipc/update_icon() if(gib_overlay) var/icon/blood = new(icon,"[icon_state]",dir) - var/image/gibz = new(icon, icon_state + "[unique_body]-overlay") + var/image/gibz = new(icon, icon_state + "r-overlay") blood.Blend(blood_DNA_to_color(),ICON_MULTIPLY) - gibz.color = body_colors - icon = blood - cut_overlays() + gibz.appearance_flags = RESET_COLOR add_overlay(gibz) /obj/effect/decal/cleanable/blood/gibs/ipc/up @@ -293,12 +248,3 @@ /obj/effect/decal/cleanable/blood/gibs/ipc/core random_icon_states = list("gibmid1", "gibmid2", "gibmid3") gib_overlay = TRUE - -/obj/effect/decal/cleanable/blood/gibs/synth - desc = "They look sludgy and disgusting." - -/obj/effect/decal/cleanable/blood/gibs/synth/Initialize(mapload, list/datum/disease/diseases) - . = ..() - reagents.add_reagent("liquidsyntheticgibs", 5) - update_icon() - guts() diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm index fee579f00b..19752c8d16 100644 --- a/code/game/objects/effects/spawners/gibspawner.dm +++ b/code/game/objects/effects/spawners/gibspawner.dm @@ -73,7 +73,7 @@ var/mob/living/carbon/digester = loc digester.stomach_contents += gib - if(dna_to_add.len) + if(dna_to_add && dna_to_add.len) gib.add_blood(dna_to_add) gib.body_colors = body_coloring gib.update_icon() @@ -111,7 +111,6 @@ gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, GLOB.alldirs, list()) return ..() - /obj/effect/gibspawner/human/bodypartless //only the gibs that don't look like actual full bodyparts (except torso). gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/human, /obj/effect/decal/cleanable/blood/gibs/human/core, /obj/effect/decal/cleanable/blood/gibs/human, /obj/effect/decal/cleanable/blood/gibs/human/core, /obj/effect/decal/cleanable/blood/gibs/human, /obj/effect/decal/cleanable/blood/gibs/human/torso) gibamounts = list(1, 1, 1, 1, 1, 1) @@ -121,33 +120,70 @@ gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, list()) return ..() -/obj/effect/gibspawner/human/lizard - gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/human/lizard, /obj/effect/decal/cleanable/blood/gibs/human/lizard/core, /obj/effect/decal/cleanable/blood/gibs/human/lizard, /obj/effect/decal/cleanable/blood/gibs/human/lizard/core, /obj/effect/decal/cleanable/blood/gibs/human, /obj/effect/decal/cleanable/blood/gibs/human/lizard/torso) - gibamounts = list(1, 1, 1, 1, 1, 1) +/obj/effect/gibspawner/lizard + gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/human/lizard/up, /obj/effect/decal/cleanable/blood/gibs/human/lizard/down, /obj/effect/decal/cleanable/blood/gibs/human/lizard, /obj/effect/decal/cleanable/blood/gibs/human/lizard, /obj/effect/decal/cleanable/blood/gibs/human/lizard/body, /obj/effect/decal/cleanable/blood/gibs/human/lizard/limb, /obj/effect/decal/cleanable/blood/gibs/human/lizard/core) + gibamounts = list(1, 1, 1, 1, 1, 1, 1) + gib_mob_type = /mob/living/carbon/human/species/lizard gib_mob_species = /datum/species/lizard + sound_vol = 50 -/obj/effect/gibspawner/human/lizard/bodypartless +/obj/effect/gibspawner/lizard/Initialize() + if(!gibdirections.len) + gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, GLOB.alldirs, list()) + return ..() + +/obj/effect/gibspawner/lizard/bodypartless gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/human/lizard, /obj/effect/decal/cleanable/blood/gibs/human/lizard/core, /obj/effect/decal/cleanable/blood/gibs/human/lizard, /obj/effect/decal/cleanable/blood/gibs/human/lizard/core, /obj/effect/decal/cleanable/blood/gibs/human/lizard, /obj/effect/decal/cleanable/blood/gibs/human/lizard/torso) - gibamounts = list(2, 0, 1, 1, 2, 0) + gibamounts = list(1, 1, 1, 1, 1, 1) -/obj/effect/gibspawner/human/slimeperson +/obj/effect/gibspawner/lizard/bodypartless/Initialize() + if(!gibdirections.len) + gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, list()) + return ..() + +/obj/effect/gibspawner/slime gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/slime/up, /obj/effect/decal/cleanable/blood/gibs/slime/down, /obj/effect/decal/cleanable/blood/gibs/slime, /obj/effect/decal/cleanable/blood/gibs/slime, /obj/effect/decal/cleanable/blood/gibs/slime/body, /obj/effect/decal/cleanable/blood/gibs/slime/limb, /obj/effect/decal/cleanable/blood/gibs/slime/core) - gib_mob_species = /datum/species/jelly + gibamounts = list(1, 1, 1, 1, 1, 1, 1) + gib_mob_type = /mob/living/carbon/human/species/roundstartslime + gib_mob_species = /datum/species/jelly/roundstartslime + sound_vol = 50 -/obj/effect/gibspawner/human/slimeperson/bodypartless - gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/slime, /obj/effect/decal/cleanable/blood/gibs/slime/core, /obj/effect/decal/cleanable/blood/gibs/slime, /obj/effect/decal/cleanable/blood/gibs/slime/core, /obj/effect/decal/cleanable/blood/gibs/slime, /obj/effect/decal/cleanable/blood/gibs/torso) - gibamounts = list(2, 0, 1, 1, 2, 0) +/obj/effect/gibspawner/slime/Initialize() + if(!gibdirections.len) + gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, GLOB.alldirs, list()) + return ..() -/obj/effect/gibspawner/human/ipc - sparks = TRUE +/obj/effect/gibspawner/slime/bodypartless //only the gibs that don't look like actual full bodyparts (except torso). + gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/slime, /obj/effect/decal/cleanable/blood/gibs/slime/core, /obj/effect/decal/cleanable/blood/gibs/slime, /obj/effect/decal/cleanable/blood/gibs/slime/core, /obj/effect/decal/cleanable/blood/gibs/slime, /obj/effect/decal/cleanable/blood/gibs/slime/torso) + gibamounts = list(1, 1, 1, 1, 1, 1) + +/obj/effect/gibspawner/slime/bodypartless/Initialize() + if(!gibdirections.len) + gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, list()) + return ..() + +/obj/effect/gibspawner/ipc gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/ipc/up, /obj/effect/decal/cleanable/blood/gibs/ipc/down, /obj/effect/decal/cleanable/blood/gibs/ipc, /obj/effect/decal/cleanable/blood/gibs/ipc, /obj/effect/decal/cleanable/blood/gibs/ipc/body, /obj/effect/decal/cleanable/blood/gibs/ipc/limb, /obj/effect/decal/cleanable/blood/gibs/ipc/core) gibamounts = list(1, 1, 1, 1, 1, 1, 1) - gib_mob_type = /mob/living/carbon/human + gib_mob_type = /mob/living/carbon/human/species/ipc gib_mob_species = /datum/species/ipc + sound_vol = 50 + sparks = TRUE + sound_to_play = 'sound/effects/bang.ogg' -/obj/effect/gibspawner/human/ipc/bodypartless - gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/ipc/up, /obj/effect/decal/cleanable/blood/gibs/ipc/down, /obj/effect/decal/cleanable/blood/gibs/ipc, /obj/effect/decal/cleanable/blood/gibs/ipc, /obj/effect/decal/cleanable/blood/gibs/ipc/body, /obj/effect/decal/cleanable/blood/gibs/ipc/limb, /obj/effect/decal/cleanable/blood/gibs/ipc/core) - gibamounts = list(1, 1, 2, 2, 0, 0, 1) +/obj/effect/gibspawner/ipc/Initialize() + if(!gibdirections.len) + gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, GLOB.alldirs, list()) + return ..() + +/obj/effect/gibspawner/ipc/bodypartless //only the gibs that don't look like actual full bodyparts (except torso). + gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/ipc, /obj/effect/decal/cleanable/blood/gibs/ipc/core, /obj/effect/decal/cleanable/blood/gibs/ipc, /obj/effect/decal/cleanable/blood/gibs/ipc/core, /obj/effect/decal/cleanable/blood/gibs/ipc, /obj/effect/decal/cleanable/blood/gibs/ipc/torso) + gibamounts = list(1, 1, 1, 1, 1, 1) + +/obj/effect/gibspawner/ipc/bodypartless/Initialize() + if(!gibdirections.len) + gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, list()) + return ..() /obj/effect/gibspawner/xeno gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/xeno/up, /obj/effect/decal/cleanable/blood/gibs/xeno/down, /obj/effect/decal/cleanable/blood/gibs/xeno, /obj/effect/decal/cleanable/blood/gibs/xeno, /obj/effect/decal/cleanable/blood/gibs/xeno/body, /obj/effect/decal/cleanable/blood/gibs/xeno/limb, /obj/effect/decal/cleanable/blood/gibs/xeno/core) @@ -169,7 +205,7 @@ return ..() /obj/effect/gibspawner/xeno/xenoperson - gib_mob_type = /mob/living/carbon/human + gib_mob_type = /mob/living/carbon/human/species/xeno gib_mob_species = /datum/species/xeno /obj/effect/gibspawner/xeno/xenoperson/bodypartless @@ -197,7 +233,7 @@ sparks = TRUE gibtypes = list(/obj/effect/decal/cleanable/robot_debris/up, /obj/effect/decal/cleanable/robot_debris/down, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/robot_debris/limb) gibamounts = list(1, 1, 1, 1, 1, 1) - gib_mob_type = /mob/living/silicon + gib_mob_type = /mob/living/silicon/robot /obj/effect/gibspawner/robot/Initialize() if(!gibdirections.len) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 01ea3d540e..6cb28dc7a0 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -7,15 +7,15 @@ /mob/living/carbon/human/spawn_gibs(with_bodyparts) if(isjellyperson(src)) if(with_bodyparts) - new /obj/effect/gibspawner/human/slimeperson(drop_location(), dna, get_static_viruses()) + new /obj/effect/gibspawner/slime(drop_location(), dna, get_static_viruses()) else - new /obj/effect/gibspawner/human/slimeperson/bodypartless(drop_location(), dna, get_static_viruses()) + new /obj/effect/gibspawner/slime/bodypartless(drop_location(), dna, get_static_viruses()) if(isipcperson(src)) if(with_bodyparts) - new /obj/effect/gibspawner/human/ipc(drop_location(), dna, get_static_viruses()) + new /obj/effect/gibspawner/ipc(drop_location(), dna, get_static_viruses()) else - new /obj/effect/gibspawner/human/ipc/bodypartless(drop_location(), dna, get_static_viruses()) + new /obj/effect/gibspawner/ipc/bodypartless(drop_location(), dna, get_static_viruses()) if(isxenoperson(src)) if(with_bodyparts) @@ -23,6 +23,12 @@ else new /obj/effect/gibspawner/xeno/xenoperson/bodypartless(drop_location(), dna, get_static_viruses()) + if(islizard(src)) + if(with_bodyparts) + new /obj/effect/gibspawner/lizard(drop_location(), dna, get_static_viruses()) + else + new /obj/effect/gibspawner/lizard/bodypartless(drop_location(), dna, get_static_viruses()) + else if(with_bodyparts) new /obj/effect/gibspawner/human(drop_location(), dna, get_static_viruses()) diff --git a/icons/effects/blood.dmi b/icons/effects/blood.dmi index 78c9acc937..09576e9f1b 100644 Binary files a/icons/effects/blood.dmi and b/icons/effects/blood.dmi differ