mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-28 23:58:07 +01:00
Gibs you leave are now based on your biotype/chest bodypart, improves gibber VFX (#91421)
## About The Pull Request * When gibbing mobs, spawned gib type is now based on mob's biotypes if they're not a carbon, or their chest (or first) bodypart if they are, rather than requiring a proc override for every single mob. This means that a few robotic mobs no longer drop meaty gibs, and that gibbing androids now produces cyborg gibs instead of a meaty surprise, plus they should no longer runtime when trying to gib a robot. Gibs also are now spawned around the gibber and streak outwards instead of magically teleporting a few tiles away, for some visual flair. * Fixed meat not overriding blood DNA on blood_walk component which made xeno and lizard meat leave behind orange trails instead of proper lime/dark green blood colors (due to them keeping human meat DNA). * Brightened up the gibber blood overlay I've missed, so it should be consistent with old blood colors now. * Also cleaned up the gibspawner code. ## Why It's Good For The Game Biotype/chest changes should make devs lives easier and gameplay a bit more consistent, and streaking just makes the process look slightly better. ## Changelog 🆑 add: Androids and fully augmented humans now drop robotic gibs instead of meat add: Improved gibber VFX fix: Fixed gibber overlays being darker than intended fix: Fixed xenomorph and lizard meat leaving orange trails behind code: Improved gibs and gibspawner code /🆑
This commit is contained in:
@@ -1,33 +1,19 @@
|
||||
/obj/effect/gibspawner
|
||||
icon_state = "gibspawner"// For the map editor
|
||||
var/sparks = 0 //whether sparks spread
|
||||
var/virusProb = 20 //the chance for viruses to spread on the gibs
|
||||
var/gib_mob_type //generate a fake mob to transfer DNA from if we weren't passed a mob.
|
||||
var/sound_to_play = 'sound/effects/blob/blobattack.ogg'
|
||||
var/sound_vol = 60
|
||||
var/list/gibtypes = list() //typepaths of the gib decals to spawn
|
||||
var/list/gibamounts = list() //amount to spawn for each gib decal type we'll spawn.
|
||||
var/list/gibdirections = list() //of lists of possible directions to spread each gib decal type towards.
|
||||
var/list/gibtypes = list() // Assoc list of typepaths of the gib decals to spawn to amount to spawn
|
||||
var/list/gibdirections = list() // Lists of possible directions to spread each gib decal type towards.
|
||||
var/blood_dna_info // Cached blood_dna_info in case we do not have a source mob
|
||||
|
||||
/obj/effect/gibspawner/Initialize(mapload, mob/living/source_mob, list/datum/disease/diseases, blood_dna_info)
|
||||
. = ..()
|
||||
|
||||
if(gibtypes.len != gibamounts.len)
|
||||
stack_trace("Gib list amount length mismatch!")
|
||||
return
|
||||
if(gibamounts.len != gibdirections.len)
|
||||
stack_trace("Gib list dir length mismatch!")
|
||||
return
|
||||
|
||||
if(sound_to_play && isnum(sound_vol))
|
||||
playsound(src, sound_to_play, sound_vol, TRUE)
|
||||
|
||||
if(sparks)
|
||||
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
|
||||
s.set_up(2, 1, loc)
|
||||
s.start()
|
||||
|
||||
var/list/dna_to_add //find the dna to pass to the spawned gibs. do note this can be null if the mob doesn't have blood. add_blood_DNA() has built in null handling.
|
||||
if(blood_dna_info)
|
||||
dna_to_add = blood_dna_info
|
||||
@@ -42,39 +28,36 @@
|
||||
|
||||
|
||||
for(var/i in 1 to gibtypes.len)
|
||||
if(gibamounts[i])
|
||||
for(var/j in 1 to gibamounts[i])
|
||||
var/gibType = gibtypes[i]
|
||||
var/gibType = gibtypes[i]
|
||||
var/amount = gibtypes[gibType]
|
||||
for(var/j in 1 to amount)
|
||||
// These might streak off into space and cause annoying flaky failures with mapping nearstation tests
|
||||
#ifndef UNIT_TESTS
|
||||
var/obj/effect/decal/cleanable/blood/gibs/gib = new gibType(loc, diseases, dna_to_add)
|
||||
var/list/directions = gibdirections[i]
|
||||
if(isturf(loc))
|
||||
if(directions.len)
|
||||
gib.streak(directions, mapload)
|
||||
var/obj/effect/decal/cleanable/blood/gibs/gib = new gibType(loc, diseases, dna_to_add)
|
||||
var/list/directions = gibdirections[i]
|
||||
if(isturf(loc))
|
||||
if(directions.len)
|
||||
gib.streak(directions, mapload)
|
||||
#else
|
||||
new gibType(loc, diseases, dna_to_add)
|
||||
new gibType(loc, diseases, dna_to_add)
|
||||
#endif
|
||||
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
|
||||
/obj/effect/gibspawner/generic
|
||||
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/core)
|
||||
gibamounts = list(2, 2, 1)
|
||||
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs = 2, /obj/effect/decal/cleanable/blood/gibs = 2, /obj/effect/decal/cleanable/blood/gibs/core = 1)
|
||||
sound_vol = 40
|
||||
|
||||
/obj/effect/gibspawner/generic/Initialize(mapload, blood_dna_info)
|
||||
/obj/effect/gibspawner/generic/Initialize(mapload, mob/living/source_mob, list/datum/disease/diseases, blood_dna_info)
|
||||
if(!gibdirections.len)
|
||||
gibdirections = list(list(WEST, NORTHWEST, SOUTHWEST, NORTH),list(EAST, NORTHEAST, SOUTHEAST, SOUTH), list())
|
||||
gibdirections = list(list(WEST, NORTHWEST, SOUTHWEST, NORTH), list(EAST, NORTHEAST, SOUTHEAST, SOUTH), list())
|
||||
return ..()
|
||||
|
||||
/obj/effect/gibspawner/generic/animal
|
||||
gib_mob_type = /mob/living/basic/pet
|
||||
|
||||
/obj/effect/gibspawner/human
|
||||
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/up, /obj/effect/decal/cleanable/blood/gibs/down, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/body, /obj/effect/decal/cleanable/blood/gibs/limb, /obj/effect/decal/cleanable/blood/gibs/core)
|
||||
gibamounts = list(1, 1, 1, 1, 1, 1, 1)
|
||||
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/up = 1, /obj/effect/decal/cleanable/blood/gibs/down = 1, /obj/effect/decal/cleanable/blood/gibs = 1, /obj/effect/decal/cleanable/blood/gibs = 1, /obj/effect/decal/cleanable/blood/gibs/body = 1, /obj/effect/decal/cleanable/blood/gibs/limb = 1, /obj/effect/decal/cleanable/blood/gibs/core = 1)
|
||||
gib_mob_type = /mob/living/carbon/human
|
||||
sound_vol = 50
|
||||
|
||||
@@ -89,69 +72,63 @@
|
||||
GLOB.alldirs,
|
||||
list(),
|
||||
)
|
||||
|
||||
if(!iscarbon(source_mob) && isnull(blood_dna_info))
|
||||
return ..(blood_dna_info = list("Human DNA" = random_human_blood_type()))
|
||||
|
||||
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, /obj/effect/decal/cleanable/blood/gibs/core, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/core, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/torso)
|
||||
gibamounts = list(1, 1, 1, 1, 1, 1)
|
||||
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs = 1, /obj/effect/decal/cleanable/blood/gibs/core = 1, /obj/effect/decal/cleanable/blood/gibs = 1, /obj/effect/decal/cleanable/blood/gibs/core = 1, /obj/effect/decal/cleanable/blood/gibs = 1, /obj/effect/decal/cleanable/blood/gibs/torso = 1)
|
||||
|
||||
/obj/effect/gibspawner/human/bodypartless/Initialize(mapload)
|
||||
/obj/effect/gibspawner/human/bodypartless/Initialize(mapload, mob/living/source_mob, list/datum/disease/diseases, blood_dna_info)
|
||||
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)
|
||||
gibamounts = list(1, 1, 1, 1, 1, 1, 1)
|
||||
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/xeno/up = 1, /obj/effect/decal/cleanable/blood/gibs/xeno/down = 1, /obj/effect/decal/cleanable/blood/gibs/xeno = 1, /obj/effect/decal/cleanable/blood/gibs/xeno = 1, /obj/effect/decal/cleanable/blood/gibs/xeno/body = 1, /obj/effect/decal/cleanable/blood/gibs/xeno/limb = 1, /obj/effect/decal/cleanable/blood/gibs/xeno/core = 1)
|
||||
gib_mob_type = /mob/living/carbon/alien
|
||||
|
||||
/obj/effect/gibspawner/xeno/Initialize(mapload)
|
||||
/obj/effect/gibspawner/xeno/Initialize(mapload, mob/living/source_mob, list/datum/disease/diseases, blood_dna_info)
|
||||
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/xeno/bodypartless //only the gibs that don't look like actual full bodyparts (except torso).
|
||||
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/xeno, /obj/effect/decal/cleanable/blood/gibs/xeno/core, /obj/effect/decal/cleanable/blood/gibs/xeno, /obj/effect/decal/cleanable/blood/gibs/xeno/core, /obj/effect/decal/cleanable/blood/gibs/xeno, /obj/effect/decal/cleanable/blood/gibs/xeno/torso)
|
||||
gibamounts = list(1, 1, 1, 1, 1, 1)
|
||||
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/xeno = 1, /obj/effect/decal/cleanable/blood/gibs/xeno/core = 1, /obj/effect/decal/cleanable/blood/gibs/xeno = 1, /obj/effect/decal/cleanable/blood/gibs/xeno/core = 1, /obj/effect/decal/cleanable/blood/gibs/xeno = 1, /obj/effect/decal/cleanable/blood/gibs/xeno/torso = 1)
|
||||
|
||||
/obj/effect/gibspawner/xeno/bodypartless/Initialize(mapload)
|
||||
/obj/effect/gibspawner/xeno/bodypartless/Initialize(mapload, mob/living/source_mob, list/datum/disease/diseases, blood_dna_info)
|
||||
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/larva
|
||||
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/xeno/larva, /obj/effect/decal/cleanable/blood/gibs/xeno/larva, /obj/effect/decal/cleanable/blood/gibs/xeno/larva/body, /obj/effect/decal/cleanable/blood/gibs/xeno/larva/body)
|
||||
gibamounts = list(1, 1, 1, 1)
|
||||
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/xeno/larva = 1, /obj/effect/decal/cleanable/blood/gibs/xeno/larva = 1, /obj/effect/decal/cleanable/blood/gibs/xeno/larva/body = 1, /obj/effect/decal/cleanable/blood/gibs/xeno/larva/body = 1)
|
||||
gib_mob_type = /mob/living/carbon/alien/larva
|
||||
|
||||
/obj/effect/gibspawner/larva/Initialize(mapload)
|
||||
/obj/effect/gibspawner/larva/Initialize(mapload, mob/living/source_mob, list/datum/disease/diseases, blood_dna_info)
|
||||
if(!gibdirections.len)
|
||||
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST), list(SOUTH, SOUTHEAST, SOUTHWEST), list(), GLOB.alldirs)
|
||||
return ..()
|
||||
|
||||
/obj/effect/gibspawner/larva/bodypartless
|
||||
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/xeno/larva, /obj/effect/decal/cleanable/blood/gibs/xeno/larva, /obj/effect/decal/cleanable/blood/gibs/xeno/larva)
|
||||
gibamounts = list(1, 1, 1)
|
||||
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/xeno/larva = 1, /obj/effect/decal/cleanable/blood/gibs/xeno/larva = 1, /obj/effect/decal/cleanable/blood/gibs/xeno/larva = 1)
|
||||
|
||||
/obj/effect/gibspawner/larva/bodypartless/Initialize(mapload)
|
||||
/obj/effect/gibspawner/larva/bodypartless/Initialize(mapload, mob/living/source_mob, list/datum/disease/diseases, blood_dna_info)
|
||||
if(!gibdirections.len)
|
||||
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST), list(SOUTH, SOUTHEAST, SOUTHWEST), list())
|
||||
return ..()
|
||||
|
||||
|
||||
|
||||
/obj/effect/gibspawner/robot
|
||||
sparks = 1
|
||||
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/robot_debris/up, /obj/effect/decal/cleanable/blood/gibs/robot_debris/down, /obj/effect/decal/cleanable/blood/gibs/robot_debris, /obj/effect/decal/cleanable/blood/gibs/robot_debris, /obj/effect/decal/cleanable/blood/gibs/robot_debris, /obj/effect/decal/cleanable/blood/gibs/robot_debris/limb)
|
||||
gibamounts = list(1, 1, 1, 1, 1, 1)
|
||||
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/robot_debris/up = 1, /obj/effect/decal/cleanable/blood/gibs/robot_debris/down = 1, /obj/effect/decal/cleanable/blood/gibs/robot_debris = 1, /obj/effect/decal/cleanable/blood/gibs/robot_debris = 1, /obj/effect/decal/cleanable/blood/gibs/robot_debris = 1, /obj/effect/decal/cleanable/blood/gibs/robot_debris/limb = 1)
|
||||
gib_mob_type = /mob/living/silicon
|
||||
|
||||
/obj/effect/gibspawner/robot/Initialize(mapload)
|
||||
/obj/effect/gibspawner/robot/Initialize(mapload, mob/living/source_mob, list/datum/disease/diseases, blood_dna_info)
|
||||
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)
|
||||
gibamounts[6] = pick(0, 1, 2)
|
||||
return ..()
|
||||
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST), list(SOUTH, SOUTHEAST, SOUTHWEST), list(WEST, NORTHWEST, SOUTHWEST), list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, GLOB.alldirs)
|
||||
gibtypes[/obj/effect/decal/cleanable/blood/gibs/robot_debris/limb] = pick(0, 1, 2)
|
||||
. = ..()
|
||||
var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
|
||||
sparks.set_up(2, 1, drop_location())
|
||||
sparks.start()
|
||||
|
||||
Reference in New Issue
Block a user