From d6f79f4427661c49609c6f739c8de3e8deb22157 Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 6 Oct 2023 07:12:22 -0500 Subject: [PATCH] Refactor gib code to use bitflags and have documentation (#78754) ## About The Pull Request This takes all the gib related procs: - `gib()` - `spawn_gibs()` - `spill_organs()` - `spread_bodyparts()` And adds heavy documentation that communicates what the procs are used for and how the different bitflags affect them. The difference is noticeable: `gib(TRUE, FALSE, FALSE, null)` vs `gib(DROP_ORGANS|DROP_BODYPARTS)` The code is now much more legible which is important considering it's used in a lot of places! Another robust change, is that we had several places in the code where there were double negatives like so: ``` /mob/living/carbon/spill_organs(no_brain, no_organs, no_bodyparts) if(!no_bodyparts) // DOUBLE NEGATIVES ARE BAD M'KAY?!? // do stuff here ``` This is a mindfuck to untangle. I inverted a lot of these parts so we don't lose our sanity. Last thing that was changed was a big `if()` loop in the `spill_organ()` proc. This was refactored to just be a simple `for` loop with `continue` statements where we needed to skip enabled bitflags. It's now shorter and cleaner than before. The only slight gameplay change this affects is that gibbing a mob now guarantees to drop all items unless the `DROP_ITEMS` bitflag is deliberately omitted. Some places like admin gib self, we don't want this to happen. ## Why It's Good For The Game Gib code is very old. (~15 years) People kept adding more arguments to the procs when it should have been a bitflag initially. By doing it this way, there is more flexibility and readability when it comes to adding new code in the future. ## Changelog :cl: refactor: Refactor gib code to be more robust. qol: Gibbing a mob will result in all items being dropped instead of getting deleted. There are a few exceptions (like admin gib self) where this will not take place. /:cl: --- code/__DEFINES/blood.dm | 13 +++++ .../signals/signals_mob/signals_mob_living.dm | 2 +- code/datums/components/butchering.dm | 2 +- code/datums/components/death_linked.dm | 2 +- code/datums/components/omen.dm | 6 +-- code/datums/components/squashable.dm | 2 +- code/datums/components/stationstuck.dm | 2 +- code/datums/diseases/gbs.dm | 2 +- code/datums/dna.dm | 4 +- code/datums/martial/plasma_fist.dm | 2 +- code/datums/mutations/body.dm | 2 +- code/datums/status_effects/debuffs/cursed.dm | 2 +- code/datums/status_effects/debuffs/debuffs.dm | 2 +- .../datums/storage/subtypes/bag_of_holding.dm | 2 +- code/game/machinery/computer/arcade/arcade.dm | 2 +- code/game/machinery/shieldgen.dm | 2 +- code/game/objects/items/debug_items.dm | 2 +- code/game/objects/items/food/monkeycube.dm | 2 +- code/game/objects/items/food/pizza.dm | 2 +- code/game/objects/items/food/sandwichtoast.dm | 2 +- code/game/objects/items/grenades/plastic.dm | 2 +- .../items/implants/implant_explosive.dm | 2 +- code/game/objects/items/manuals.dm | 5 +- code/game/objects/items/rcd/RCD.dm | 2 +- code/game/objects/items/skub.dm | 2 +- code/game/objects/items/spear.dm | 2 +- code/game/objects/items/teleportation.dm | 2 +- code/game/objects/items/weaponry.dm | 4 +- code/game/objects/structures/divine.dm | 2 +- code/modules/admin/smites/bsa.dm | 5 +- code/modules/admin/smites/gib.dm | 2 +- code/modules/admin/smites/puzzgrid.dm | 2 +- code/modules/admin/verbs/adminfun.dm | 6 +-- .../antagonists/changeling/headslug_eggs.dm | 2 +- .../antagonists/changeling/powers/headcrab.dm | 2 +- code/modules/antagonists/cult/runes.dm | 6 +-- .../antagonists/heretic/heretic_knowledge.dm | 2 +- .../modules/antagonists/heretic/influences.dm | 2 +- .../sacrifice_knowledge.dm | 2 +- .../equipment/nuclear_bomb/_nuclear_bomb.dm | 2 +- .../wizard/grand_ritual/finales/armageddon.dm | 2 +- code/modules/bitrunning/event.dm | 2 +- code/modules/cargo/coupon.dm | 2 +- code/modules/cargo/supplypod.dm | 2 +- .../clothing/head/mind_monkey_helmet.dm | 2 +- code/modules/experisci/destructive_scanner.dm | 2 +- code/modules/experisci/handheld_scanner.dm | 2 +- .../food_and_drinks/machinery/deep_fryer.dm | 2 +- .../food_and_drinks/machinery/gibber.dm | 2 +- .../food_and_drinks/machinery/processor.dm | 2 +- code/modules/hydroponics/grown/melon.dm | 2 +- .../industrial_lift/industrial_lift.dm | 2 +- code/modules/library/bibles.dm | 2 +- .../ruins/objects_and_mobs/ash_walker_den.dm | 2 +- .../ruins/spaceruin_code/hilbertshotel.dm | 2 +- .../modules/mob/living/basic/basic_defense.dm | 2 +- .../basic/icemoon/ice_whelp/ice_whelp.dm | 2 +- .../mob/living/basic/pets/dog/corgi.dm | 2 +- .../mob/living/carbon/alien/alien_defense.dm | 2 +- code/modules/mob/living/carbon/alien/death.dm | 4 +- .../mob/living/carbon/alien/larva/death.dm | 4 +- .../modules/mob/living/carbon/alien/organs.dm | 2 +- .../carbon/alien/special/alien_embryo.dm | 2 +- code/modules/mob/living/carbon/death.dm | 54 +++++++++---------- code/modules/mob/living/carbon/human/death.dm | 4 +- .../mob/living/carbon/human/human_defense.dm | 2 +- .../carbon/human/species_types/dullahan.dm | 6 +-- code/modules/mob/living/death.dm | 51 +++++++++++++----- .../mob/living/silicon/ai/ai_defense.dm | 2 +- .../modules/mob/living/silicon/robot/robot.dm | 2 +- .../mob/living/silicon/robot/robot_defense.dm | 4 +- .../simple_animal/hostile/gorilla/gorilla.dm | 4 +- .../hostile/megafauna/colossus.dm | 2 +- .../mining_mobs/elites/goliath_broodmother.dm | 2 +- .../mob_spawn/ghost_roles/mining_roles.dm | 2 +- code/modules/mod/modules/modules_ninja.dm | 2 +- code/modules/power/apc/apc_malf.dm | 2 +- .../projectiles/guns/ballistic/launchers.dm | 2 +- .../projectiles/projectile/special/rocket.dm | 2 +- .../chemistry/reagents/drug_reagents.dm | 2 +- .../reagents/chemistry/recipes/others.dm | 2 +- .../religion/honorbound/honorbound_rites.dm | 2 +- code/modules/research/anomaly/anomaly_core.dm | 2 +- .../research/xenobiology/xenobiology.dm | 2 +- code/modules/shuttle/on_move.dm | 2 +- .../spell_types/shapeshift/_shape_status.dm | 2 +- .../spell_types/shapeshift/_shapeshift.dm | 2 +- .../modules/spells/spell_types/touch/smite.dm | 2 +- code/modules/vehicles/mecha/_mecha.dm | 2 +- .../vehicles/mecha/combat/savannah_ivanov.dm | 2 +- .../mecha/equipment/tools/mining_tools.dm | 2 +- .../vehicles/mecha/mecha_mob_interaction.dm | 2 +- code/modules/vehicles/vehicle_key.dm | 2 +- code/modules/wiremod/shell/drone.dm | 2 +- code/modules/zombie/items.dm | 2 +- 95 files changed, 183 insertions(+), 155 deletions(-) diff --git a/code/__DEFINES/blood.dm b/code/__DEFINES/blood.dm index 3bf4af65969..2c8576a2eda 100644 --- a/code/__DEFINES/blood.dm +++ b/code/__DEFINES/blood.dm @@ -19,3 +19,16 @@ #define BLOOD_STATE_OIL "oil" /// No blood is present #define BLOOD_STATE_NOT_BLOODY "no blood whatsoever" + +// Bitflags for mob dismemberment and gibbing +/// Mobs will drop a brain +#define DROP_BRAIN (1<<0) +/// Mobs will drop organs +#define DROP_ORGANS (1<<1) +/// Mobs will drop bodyparts (arms, legs, etc.) +#define DROP_BODYPARTS (1<<2) +/// Mobs will drop items +#define DROP_ITEMS (1<<3) + +/// Mobs will drop everything +#define DROP_ALL_REMAINS (DROP_BRAIN | DROP_ORGANS | DROP_BODYPARTS | DROP_ITEMS) diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm index f697566671e..d16adbe07a7 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm @@ -64,7 +64,7 @@ ///from base of mob/living/death(): (gibbed) #define COMSIG_LIVING_DEATH "living_death" -///from base of mob/living/gib(): (no_brain, no_organs, no_bodyparts) +///from base of mob/living/gib(): (drop_bitflags) ///Note that it is fired regardless of whether the mob was dead beforehand or not. #define COMSIG_LIVING_GIBBED "living_gibbed" diff --git a/code/datums/components/butchering.dm b/code/datums/components/butchering.dm index 97bb2a30ad5..689de30db37 100644 --- a/code/datums/components/butchering.dm +++ b/code/datums/components/butchering.dm @@ -167,7 +167,7 @@ butcher_callback?.Invoke(butcher, target) target.harvest(butcher) target.log_message("has been butchered by [key_name(butcher)]", LOG_ATTACK) - target.gib(FALSE, FALSE, TRUE) + target.gib(DROP_BRAIN|DROP_ORGANS) ///Enables the butchering mechanic for the mob who has equipped us. /datum/component/butchering/proc/enable_butchering(datum/source) diff --git a/code/datums/components/death_linked.dm b/code/datums/components/death_linked.dm index 59d2ce5e855..c20c8100195 100644 --- a/code/datums/components/death_linked.dm +++ b/code/datums/components/death_linked.dm @@ -27,4 +27,4 @@ /datum/component/death_linked/proc/on_death(mob/living/target, gibbed) SIGNAL_HANDLER var/mob/living/linked_mob_resolved = linked_mob?.resolve() - linked_mob_resolved?.gib() + linked_mob_resolved?.gib(DROP_ALL_REMAINS) diff --git a/code/datums/components/omen.dm b/code/datums/components/omen.dm index 4f3b17a7473..f499d22968d 100644 --- a/code/datums/components/omen.dm +++ b/code/datums/components/omen.dm @@ -238,7 +238,7 @@ return ..() death_explode(our_guy) - our_guy.gib() + our_guy.gib(DROP_ALL_REMAINS) /** * The quirk omen. Permanent. @@ -259,7 +259,7 @@ /datum/component/omen/quirk/check_death(mob/living/our_guy) if(!iscarbon(our_guy)) - our_guy.gib() + our_guy.gib(DROP_ALL_REMAINS) return // Don't explode if buckled to a stasis bed @@ -270,7 +270,7 @@ death_explode(our_guy) var/mob/living/carbon/player = our_guy - player.spread_bodyparts(skip_head = TRUE) + player.spread_bodyparts() player.spawn_gibs() return diff --git a/code/datums/components/squashable.dm b/code/datums/components/squashable.dm index 5fc489873bf..8174127aeb3 100644 --- a/code/datums/components/squashable.dm +++ b/code/datums/components/squashable.dm @@ -72,7 +72,7 @@ /datum/component/squashable/proc/Squish(mob/living/target) if(squash_flags & SQUASHED_SHOULD_BE_GIBBED) - target.gib() + target.gib(DROP_ALL_REMAINS) else target.adjustBruteLoss(squash_damage) diff --git a/code/datums/components/stationstuck.dm b/code/datums/components/stationstuck.dm index 63a1dcabbbd..5634186f04e 100644 --- a/code/datums/components/stationstuck.dm +++ b/code/datums/components/stationstuck.dm @@ -49,7 +49,7 @@ It has a punishment variable that is what happens to the parent when they leave escapee.death() if(PUNISHMENT_GIB) escapee.investigate_log("has been gibbed by stationstuck component.", INVESTIGATE_DEATHS) - escapee.gib() + escapee.gib(DROP_ALL_REMAINS) if(PUNISHMENT_TELEPORT) var/targetturf = find_safe_turf(stuck_zlevel) if(!targetturf) diff --git a/code/datums/diseases/gbs.dm b/code/datums/diseases/gbs.dm index 22f84cf73a1..abf2116a92f 100644 --- a/code/datums/diseases/gbs.dm +++ b/code/datums/diseases/gbs.dm @@ -30,5 +30,5 @@ to_chat(affected_mob, span_userdanger("Your body feels as if it's trying to rip itself apart!")) if(SPT_PROB(30, seconds_per_tick)) affected_mob.investigate_log("has been gibbed by GBS.", INVESTIGATE_DEATHS) - affected_mob.gib() + affected_mob.gib(DROP_ALL_REMAINS) return FALSE diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 1447224543d..599bc9ce1b2 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -893,7 +893,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) switch(rand(0,6)) if(0) investigate_log("has been gibbed by DNA instability.", INVESTIGATE_DEATHS) - gib() + gib(DROP_ALL_REMAINS) if(1) investigate_log("has been dusted by DNA instability.", INVESTIGATE_DEATHS) dust() @@ -909,7 +909,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) BP.dismember() else investigate_log("has been gibbed by DNA instability.", INVESTIGATE_DEATHS) - gib() + gib(DROP_ALL_REMAINS) else set_species(/datum/species/dullahan) if(4) diff --git a/code/datums/martial/plasma_fist.dm b/code/datums/martial/plasma_fist.dm index ed8ac5fe812..5ebc5ce45fc 100644 --- a/code/datums/martial/plasma_fist.dm +++ b/code/datums/martial/plasma_fist.dm @@ -68,7 +68,7 @@ log_combat(attacker, defender, "gibbed (Plasma Fist)") var/turf/Dturf = get_turf(defender) defender.investigate_log("has been gibbed by plasma fist.", INVESTIGATE_DEATHS) - defender.gib() + defender.gib(DROP_ALL_REMAINS) if(nobomb) return if(!hasclient) diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm index 8800969c685..30be64e13f4 100644 --- a/code/datums/mutations/body.dm +++ b/code/datums/mutations/body.dm @@ -484,7 +484,7 @@ to_chat(borgo, span_userdanger("Your sensors are disabled by a shower of blood!")) borgo.Paralyze(6 SECONDS) owner.investigate_log("has been gibbed by the martyrdom mutation.", INVESTIGATE_DEATHS) - owner.gib() + owner.gib(DROP_ALL_REMAINS) /datum/mutation/human/headless name = "H.A.R.S." diff --git a/code/datums/status_effects/debuffs/cursed.dm b/code/datums/status_effects/debuffs/cursed.dm index 285fb86348e..8d331bbe90a 100644 --- a/code/datums/status_effects/debuffs/cursed.dm +++ b/code/datums/status_effects/debuffs/cursed.dm @@ -102,7 +102,7 @@ to_chat(owner, span_userdanger("Why couldn't I get one more try?!")) owner.investigate_log("has been gibbed by the cursed status effect after accumulating [curse_count] curses.", INVESTIGATE_DEATHS) - owner.gib() + owner.gib(DROP_ALL_REMAINS) qdel(src) return diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm index bb63b177bb5..44ad9313c8f 100644 --- a/code/datums/status_effects/debuffs/debuffs.dm +++ b/code/datums/status_effects/debuffs/debuffs.dm @@ -691,7 +691,7 @@ /datum/status_effect/dna_melt/on_remove() if(!ishuman(owner)) - owner.gib() //fuck you in particular + owner.gib(DROP_ALL_REMAINS) //fuck you in particular return var/mob/living/carbon/human/H = owner INVOKE_ASYNC(H, TYPE_PROC_REF(/mob/living/carbon/human, something_horrible), kill_either_way) diff --git a/code/datums/storage/subtypes/bag_of_holding.dm b/code/datums/storage/subtypes/bag_of_holding.dm index 9176588b5fc..9e3a486cdcd 100644 --- a/code/datums/storage/subtypes/bag_of_holding.dm +++ b/code/datums/storage/subtypes/bag_of_holding.dm @@ -32,6 +32,6 @@ user.log_message("detonated a bag of holding at [loc_name(loccheck)].", LOG_ATTACK, color="red") user.investigate_log("has been gibbed by a bag of holding recursive insertion.", INVESTIGATE_DEATHS) - user.gib(TRUE, TRUE, TRUE) + user.gib() new/obj/boh_tear(loccheck) qdel(resolve_parent) diff --git a/code/game/machinery/computer/arcade/arcade.dm b/code/game/machinery/computer/arcade/arcade.dm index 28034872289..58a7280e864 100644 --- a/code/game/machinery/computer/arcade/arcade.dm +++ b/code/game/machinery/computer/arcade/arcade.dm @@ -582,7 +582,7 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list( var/mob/living/living_user = user if (istype(living_user)) living_user.investigate_log("has been gibbed by an emagged Orion Trail game.", INVESTIGATE_DEATHS) - living_user.gib() + living_user.gib(DROP_ALL_REMAINS) SSblackbox.record_feedback("nested tally", "arcade_results", 1, list("loss", "hp", (obj_flags & EMAGGED ? "emagged":"normal"))) user.lost_game() diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index e5a387d4e59..adb1c27ce81 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -504,7 +504,7 @@ for(var/mob/living/L in get_turf(src)) visible_message(span_danger("\The [src] is suddenly occupying the same space as \the [L]!")) L.investigate_log("has been gibbed by [src].", INVESTIGATE_DEATHS) - L.gib() + L.gib(DROP_ALL_REMAINS) RegisterSignal(src, COMSIG_ATOM_SINGULARITY_TRY_MOVE, PROC_REF(block_singularity)) /obj/machinery/shieldwall/Destroy() diff --git a/code/game/objects/items/debug_items.dm b/code/game/objects/items/debug_items.dm index 68ae291e736..e2febe30fcf 100644 --- a/code/game/objects/items/debug_items.dm +++ b/code/game/objects/items/debug_items.dm @@ -163,7 +163,7 @@ playsound(src, 'sound/voice/borg_deathsound.ogg') sleep(3 SECONDS) living_user.investigate_log("has been gibbed by [src].", INVESTIGATE_DEATHS) - living_user.gib() + living_user.gib(DROP_ALL_REMAINS) return var/turf/loc_turf = get_turf(src) for(var/spawn_atom in (choice == "No" ? typesof(path) : subtypesof(path))) diff --git a/code/game/objects/items/food/monkeycube.dm b/code/game/objects/items/food/monkeycube.dm index 5cf9db79fd0..0013fbcdadd 100644 --- a/code/game/objects/items/food/monkeycube.dm +++ b/code/game/objects/items/food/monkeycube.dm @@ -48,7 +48,7 @@ return Expand() user.visible_message(span_danger("[user]'s torso bursts open as a primate emerges!")) - user.gib(null, TRUE, null, TRUE) + user.gib(DROP_BRAIN|DROP_BODYPARTS|DROP_ITEMS) // just remove the organs /obj/item/food/monkeycube/syndicate faction = list(FACTION_NEUTRAL, ROLE_SYNDICATE) diff --git a/code/game/objects/items/food/pizza.dm b/code/game/objects/items/food/pizza.dm index fdbb1e33c87..b93cd7ed721 100644 --- a/code/game/objects/items/food/pizza.dm +++ b/code/game/objects/items/food/pizza.dm @@ -389,7 +389,7 @@ if(istype(item, /obj/item/food/pineappleslice)) to_chat(user, "If you want something crazy like pineapple, I'll kill you.") //this is in bigger text because it's hard to spam something that gibs you, and so that you're perfectly aware of the reason why you died user.investigate_log("has been gibbed by putting pineapple on an arnold pizza.", INVESTIGATE_DEATHS) - user.gib() //if you want something crazy like pineapple, i'll kill you + user.gib(DROP_ALL_REMAINS) //if you want something crazy like pineapple, i'll kill you else if(istype(item, /obj/item/food/grown/mushroom) && iscarbon(user)) to_chat(user, span_userdanger("So, if you want mushroom, shut up.")) //not as large as the pineapple text, because you could in theory spam it var/mob/living/carbon/shutup = user diff --git a/code/game/objects/items/food/sandwichtoast.dm b/code/game/objects/items/food/sandwichtoast.dm index fec714ad850..8b91b04621e 100644 --- a/code/game/objects/items/food/sandwichtoast.dm +++ b/code/game/objects/items/food/sandwichtoast.dm @@ -302,5 +302,5 @@ /obj/item/food/sandwich/death/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] starts to shove [src] down [user.p_their()] throat the wrong way. It looks like [user.p_theyre()] trying to commit suicide!")) qdel(src) - user.gib(TRUE, TRUE, TRUE) + user.gib() return MANUAL_SUICIDE diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm index 5902298032c..d5f3b0dec9d 100644 --- a/code/game/objects/items/grenades/plastic.dm +++ b/code/game/objects/items/grenades/plastic.dm @@ -161,7 +161,7 @@ user.visible_message(span_suicide("[user] activates [src] and holds it above [user.p_their()] head! It looks like [user.p_theyre()] going out with a bang!")) shout_syndicate_crap(user) explosion(user, heavy_impact_range = 2, explosion_cause = src) //Cheap explosion imitation because putting detonate() here causes runtimes - user.gib(1, 1) + user.gib(DROP_BODYPARTS) qdel(src) // X4 is an upgraded directional variant of c4 which is relatively safe to be standing next to. And much less safe to be standing on the other side of. diff --git a/code/game/objects/items/implants/implant_explosive.dm b/code/game/objects/items/implants/implant_explosive.dm index 70471a8e99a..c9f961b594e 100644 --- a/code/game/objects/items/implants/implant_explosive.dm +++ b/code/game/objects/items/implants/implant_explosive.dm @@ -166,7 +166,7 @@ explosion(src, devastation_range = explosion_devastate, heavy_impact_range = explosion_heavy, light_impact_range = explosion_light, flame_range = explosion_light, flash_range = explosion_light, explosion_cause = src) if(imp_in) imp_in.investigate_log("has been gibbed by an explosive implant.", INVESTIGATE_DEATHS) - imp_in.gib(TRUE) + imp_in.gib(DROP_ORGANS|DROP_BODYPARTS) qdel(src) ///Macrobomb has the strength and delay of 10 microbombs diff --git a/code/game/objects/items/manuals.dm b/code/game/objects/items/manuals.dm index c7096f82fbe..ffbeea5975c 100644 --- a/code/game/objects/items/manuals.dm +++ b/code/game/objects/items/manuals.dm @@ -431,9 +431,10 @@ H.gib_animation() sleep(0.3 SECONDS) H.adjustBruteLoss(1000) //to make the body super-bloody + // if we use gib() then the body gets deleted H.spawn_gibs() - H.spill_organs() - H.spread_bodyparts() + H.spill_organs(DROP_ALL_REMAINS) + H.spread_bodyparts(DROP_BRAIN) return BRUTELOSS /obj/item/book/manual/wiki/plumbing diff --git a/code/game/objects/items/rcd/RCD.dm b/code/game/objects/items/rcd/RCD.dm index bf6f5c2ab1f..27c04aa7479 100644 --- a/code/game/objects/items/rcd/RCD.dm +++ b/code/game/objects/items/rcd/RCD.dm @@ -259,7 +259,7 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window()) useResource(16, user) activate() playsound(loc, 'sound/machines/click.ogg', 50, 1) - user.gib() + user.gib(DROP_ALL_REMAINS) return MANUAL_SUICIDE user.visible_message(span_suicide("[user] pulls the trigger... But there is not enough ammo!")) diff --git a/code/game/objects/items/skub.dm b/code/game/objects/items/skub.dm index 7e9cd381e33..12e6da344d0 100644 --- a/code/game/objects/items/skub.dm +++ b/code/game/objects/items/skub.dm @@ -13,6 +13,6 @@ /obj/item/skub/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] has declared themself as anti-skub! The skub tears them apart!")) - user.gib() + user.gib(DROP_ALL_REMAINS) playsound(src, 'sound/items/eatfood.ogg', 50, TRUE, -1) return MANUAL_SUICIDE diff --git a/code/game/objects/items/spear.dm b/code/game/objects/items/spear.dm index b1702aaf50c..5590bfd3c2f 100644 --- a/code/game/objects/items/spear.dm +++ b/code/game/objects/items/spear.dm @@ -152,7 +152,7 @@ user.say("[war_cry]", forced="spear warcry") explosive.forceMove(user) explosive.detonate() - user.gib() + user.gib(DROP_ALL_REMAINS) qdel(src) return BRUTELOSS diff --git a/code/game/objects/items/teleportation.dm b/code/game/objects/items/teleportation.dm index 97bbb8f3887..e859938333e 100644 --- a/code/game/objects/items/teleportation.dm +++ b/code/game/objects/items/teleportation.dm @@ -484,7 +484,7 @@ destination.ex_act(EXPLODE_HEAVY) victim.unequip_everything() victim.investigate_log("has been gibbed by [src].", INVESTIGATE_DEATHS) - victim.gib() + victim.gib(DROP_ALL_REMAINS) ///Damage and stun all mobs in fragging_location turf, called after a teleport /obj/item/syndicate_teleporter/proc/telefrag(turf/fragging_location, mob/user) // Don't let this gib. Never let this gib. diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 21fc15572bf..8c949b36a79 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -922,7 +922,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 if(isliving(target)) var/mob/living/bug = target bug.investigate_log("has been splatted by a flyswatter.", INVESTIGATE_DEATHS) - bug.gib() + bug.gib(DROP_ALL_REMAINS) else qdel(target) return @@ -1099,7 +1099,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 if(living_target.stat == DEAD && prob(force*damage_mod*0.5)) living_target.visible_message(span_danger("[living_target] explodes in a shower of gore!"), blind_message = span_hear("You hear organic matter ripping and tearing!")) living_target.investigate_log("has been gibbed by [src].", INVESTIGATE_DEATHS) - living_target.gib() + living_target.gib(DROP_ALL_REMAINS) log_combat(user, living_target, "gibbed", src) else if(target.uses_integrity) target.take_damage(force*damage_mod*3, BRUTE, MELEE, FALSE, null, 50) diff --git a/code/game/objects/structures/divine.dm b/code/game/objects/structures/divine.dm index cda00d98d0b..ef9f650e42a 100644 --- a/code/game/objects/structures/divine.dm +++ b/code/game/objects/structures/divine.dm @@ -18,7 +18,7 @@ return to_chat(user, span_notice("Invoking the sacred ritual, you sacrifice [L].")) L.investigate_log("has been sacrificially gibbed on an altar.", INVESTIGATE_DEATHS) - L.gib() + L.gib(DROP_ALL_REMAINS) message_admins("[ADMIN_LOOKUPFLW(user)] has sacrificed [key_name_admin(L)] on the sacrificial altar at [AREACOORD(src)].") /obj/structure/healingfountain diff --git a/code/modules/admin/smites/bsa.dm b/code/modules/admin/smites/bsa.dm index cf0399acf26..bdf5f9e37b1 100644 --- a/code/modules/admin/smites/bsa.dm +++ b/code/modules/admin/smites/bsa.dm @@ -20,10 +20,7 @@ target_turf.break_tile() if (target.health <= 1) - target.gib( - /* no_brain = */ TRUE, - /* no_organs = */ TRUE, - ) + target.gib(DROP_BODYPARTS) else target.adjustBruteLoss(min(BSA_MAX_DAMAGE, target.health - 1)) target.Paralyze(BSA_PARALYZE_TIME) diff --git a/code/modules/admin/smites/gib.dm b/code/modules/admin/smites/gib.dm index 471479e7645..4c7c4324823 100644 --- a/code/modules/admin/smites/gib.dm +++ b/code/modules/admin/smites/gib.dm @@ -4,4 +4,4 @@ /datum/smite/gib/effect(client/user, mob/living/target) . = ..() - target.gib(/* no_brain = */ FALSE) + target.gib(DROP_ORGANS|DROP_BODYPARTS) diff --git a/code/modules/admin/smites/puzzgrid.dm b/code/modules/admin/smites/puzzgrid.dm index 481f85a191f..fe5f88d6a5f 100644 --- a/code/modules/admin/smites/puzzgrid.dm +++ b/code/modules/admin/smites/puzzgrid.dm @@ -91,7 +91,7 @@ span_bolddanger("You were unable to free [victim] from their fiendish prison, leaving them as nothing more than a smattering of mush!"), span_bolddanger("Your compatriates were unable to free you from your fiendish prison, leaving you as nothing more than a smattering of mush!"), ) - victim.gib() + victim.gib(DROP_ALL_REMAINS) victim = null qdel(src) diff --git a/code/modules/admin/verbs/adminfun.dm b/code/modules/admin/verbs/adminfun.dm index b1e0327510a..f51a922e419 100644 --- a/code/modules/admin/verbs/adminfun.dm +++ b/code/modules/admin/verbs/adminfun.dm @@ -78,9 +78,9 @@ if (istype(living_victim)) living_victim.investigate_log("has been gibbed by an admin.", INVESTIGATE_DEATHS) if(confirm == "Yes") - living_victim.gib() + living_victim.gib(DROP_ALL_REMAINS) else - living_victim.gib(TRUE) + living_victim.gib(DROP_ORGANS|DROP_BODYPARTS) SSblackbox.record_feedback("tally", "admin_verb", 1, "Gib") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! @@ -97,7 +97,7 @@ var/mob/living/ourself = mob if (istype(ourself)) - ourself.gib(TRUE, TRUE, TRUE) + ourself.gib() /client/proc/everyone_random() set category = "Admin.Fun" diff --git a/code/modules/antagonists/changeling/headslug_eggs.dm b/code/modules/antagonists/changeling/headslug_eggs.dm index 08733a7e6af..e4327aa3ed1 100644 --- a/code/modules/antagonists/changeling/headslug_eggs.dm +++ b/code/modules/antagonists/changeling/headslug_eggs.dm @@ -37,7 +37,7 @@ changeling_datum.regain_powers() owner.investigate_log("has been gibbed by a changeling egg burst.", INVESTIGATE_DEATHS) - owner.gib() + owner.gib(DROP_ALL_REMAINS) qdel(src) #undef EGG_INCUBATION_TIME diff --git a/code/modules/antagonists/changeling/powers/headcrab.dm b/code/modules/antagonists/changeling/powers/headcrab.dm index 7daebc4cfb2..f608d1620b8 100644 --- a/code/modules/antagonists/changeling/powers/headcrab.dm +++ b/code/modules/antagonists/changeling/powers/headcrab.dm @@ -35,7 +35,7 @@ user.transfer_observers_to(user_turf) // user is about to be deleted, store orbiters on the turf if(user.stat != DEAD) user.investigate_log("has been gibbed by headslug burst.", INVESTIGATE_DEATHS) - user.gib() + user.gib(DROP_ALL_REMAINS) . = TRUE addtimer(CALLBACK(src, PROC_REF(spawn_headcrab), stored_mind, user_turf, organs), 1 SECONDS) diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index de8a26187ae..30cb3d4467c 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -370,7 +370,7 @@ structure_check() searches for nearby cultist structures required for the invoca if(sacrificial) playsound(sacrificial, 'sound/magic/disintegrate.ogg', 100, TRUE) sacrificial.investigate_log("has been sacrificially gibbed by the cult.", INVESTIGATE_DEATHS) - sacrificial.gib() + sacrificial.gib(DROP_ALL_REMAINS) return TRUE /obj/effect/rune/empower @@ -946,8 +946,8 @@ structure_check() searches for nearby cultist structures required for the invoca affecting = null rune_in_use = FALSE -/mob/living/carbon/human/cult_ghost/spill_organs(no_brain, no_organs, no_bodyparts) //cult ghosts never drop a brain - no_brain = TRUE +/mob/living/carbon/human/cult_ghost/spill_organs(drop_bitflags=NONE) + drop_bitflags &= ~DROP_BRAIN //cult ghosts never drop a brain . = ..() /mob/living/carbon/human/cult_ghost/get_organs_for_zone(zone, include_children) diff --git a/code/modules/antagonists/heretic/heretic_knowledge.dm b/code/modules/antagonists/heretic/heretic_knowledge.dm index ea22955d83e..260f56540d0 100644 --- a/code/modules/antagonists/heretic/heretic_knowledge.dm +++ b/code/modules/antagonists/heretic/heretic_knowledge.dm @@ -733,6 +733,6 @@ /datum/heretic_knowledge/ultimate/cleanup_atoms(list/selected_atoms) for(var/mob/living/carbon/human/sacrifice in selected_atoms) selected_atoms -= sacrifice - sacrifice.gib() + sacrifice.gib(DROP_ALL_REMAINS) return ..() diff --git a/code/modules/antagonists/heretic/influences.dm b/code/modules/antagonists/heretic/influences.dm index baf33b9f9bb..9ae5cb0d2f0 100644 --- a/code/modules/antagonists/heretic/influences.dm +++ b/code/modules/antagonists/heretic/influences.dm @@ -174,7 +174,7 @@ head.dismember() qdel(head) else - human_user.gib() + human_user.gib(DROP_ALL_REMAINS) human_user.investigate_log("has died from using telekinesis on a heretic influence.", INVESTIGATE_DEATHS) var/datum/effect_system/reagents_explosion/explosion = new() explosion.set_up(1, get_turf(human_user), TRUE, 0) diff --git a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm index 3e37c173923..e2887d73757 100644 --- a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm +++ b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm @@ -492,7 +492,7 @@ /datum/heretic_knowledge/hunt_and_sacrifice/proc/disembowel_target(mob/living/carbon/human/sac_target) if(heretic_mind) log_combat(heretic_mind.current, sac_target, "disemboweled via sacrifice") - sac_target.spill_organs() + sac_target.spill_organs(DROP_ALL_REMAINS) sac_target.apply_damage(250, BRUTE) if(sac_target.stat != DEAD) sac_target.investigate_log("has been killed by heretic sacrifice.", INVESTIGATE_DEATHS) diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm index 2436898eefa..77f3bd56690 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm @@ -643,7 +643,7 @@ GLOBAL_VAR(station_nuke_source) to_chat(gibbed, span_userdanger("You are shredded to atoms by [source]!")) gibbed.investigate_log("has been gibbed by a nuclear blast.", INVESTIGATE_DEATHS) - gibbed.gib() + gibbed.gib(DROP_ALL_REMAINS) return TRUE /** diff --git a/code/modules/antagonists/wizard/grand_ritual/finales/armageddon.dm b/code/modules/antagonists/wizard/grand_ritual/finales/armageddon.dm index 876f2475d55..c4bba539c35 100644 --- a/code/modules/antagonists/wizard/grand_ritual/finales/armageddon.dm +++ b/code/modules/antagonists/wizard/grand_ritual/finales/armageddon.dm @@ -33,7 +33,7 @@ /datum/grand_finale/armageddon/trigger(mob/living/carbon/human/invoker) priority_announce(pick(possible_last_words), null, 'sound/magic/voidblink.ogg', sender_override = "[invoker.real_name]") var/turf/current_location = get_turf(invoker) - invoker.gib() + invoker.gib(DROP_ALL_REMAINS) var/static/list/doom_options = list() if (!length(doom_options)) diff --git a/code/modules/bitrunning/event.dm b/code/modules/bitrunning/event.dm index 0ac35a2df8f..6a4d54adcd8 100644 --- a/code/modules/bitrunning/event.dm +++ b/code/modules/bitrunning/event.dm @@ -139,7 +139,7 @@ /// Spawns a cybercop on the mutation target /datum/round_event/ghost_role/bitrunning_glitch/proc/spawn_cybercop(mob/living/mutation_target, datum/mind/player_mind) var/mob/living/carbon/human/new_agent = new(mutation_target.loc) - mutation_target.gib() + mutation_target.gib(DROP_ALL_REMAINS) mutation_target = null player_mind.transfer_to(new_agent) diff --git a/code/modules/cargo/coupon.dm b/code/modules/cargo/coupon.dm index fc1c3a6cc65..5c4e1e930b5 100644 --- a/code/modules/cargo/coupon.dm +++ b/code/modules/cargo/coupon.dm @@ -44,7 +44,7 @@ /// Play stupid games, win stupid prizes /obj/item/coupon/proc/curse_heart(mob/living/cursed) if(!iscarbon(cursed)) - cursed.gib() + cursed.gib(DROP_ALL_REMAINS) return TRUE var/mob/living/carbon/player = cursed diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm index 7e85402781e..43736994959 100644 --- a/code/modules/cargo/supplypod.dm +++ b/code/modules/cargo/supplypod.dm @@ -271,7 +271,7 @@ if (effectGib) //effectGib is on, that means whatever's underneath us better be fucking oof'd on target_living.adjustBruteLoss(5000) //THATS A LOT OF DAMAGE (called just in case gib() doesnt work on em) if (!QDELETED(target_living)) - target_living.gib() //After adjusting the fuck outta that brute loss we finish the job with some satisfying gibs + target_living.gib(DROP_ALL_REMAINS) //After adjusting the fuck outta that brute loss we finish the job with some satisfying gibs else target_living.adjustBruteLoss(damage) var/explosion_sum = B[1] + B[2] + B[3] + B[4] diff --git a/code/modules/clothing/head/mind_monkey_helmet.dm b/code/modules/clothing/head/mind_monkey_helmet.dm index 31bbc3b17ba..c1ac5a1805a 100644 --- a/code/modules/clothing/head/mind_monkey_helmet.dm +++ b/code/modules/clothing/head/mind_monkey_helmet.dm @@ -89,7 +89,7 @@ if(3) //primal gene (gorilla) magnification.gorillize() if(4) //genetic mass susceptibility (gib) - magnification.gib() + magnification.gib(DROP_ALL_REMAINS) //either used up correctly or taken off before polling finished (punish this by destroying the helmet) UnregisterSignal(magnification, COMSIG_SPECIES_LOSS) playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE) diff --git a/code/modules/experisci/destructive_scanner.dm b/code/modules/experisci/destructive_scanner.dm index ef89dc9b94a..de0b03b0f09 100644 --- a/code/modules/experisci/destructive_scanner.dm +++ b/code/modules/experisci/destructive_scanner.dm @@ -89,7 +89,7 @@ if(isliving(movable_atom)) var/mob/living/fucked_up_thing = movable_atom fucked_up_thing.investigate_log("has been gibbed by [src].", INVESTIGATE_DEATHS) - fucked_up_thing.gib() + fucked_up_thing.gib(DROP_ALL_REMAINS) SEND_SIGNAL(src, COMSIG_MACHINERY_DESTRUCTIVE_SCAN, scanned_atoms) diff --git a/code/modules/experisci/handheld_scanner.dm b/code/modules/experisci/handheld_scanner.dm index 97aa034afa1..92031107ba5 100644 --- a/code/modules/experisci/handheld_scanner.dm +++ b/code/modules/experisci/handheld_scanner.dm @@ -59,6 +59,6 @@ icon_state = "experiscanner" remove_atom_colour(ADMIN_COLOUR_PRIORITY, "#FF0000") - user.gib(FALSE, TRUE, TRUE) //we delete everything but the brain, as it's going to be moved to the cistern + user.gib(DROP_BRAIN) //we delete everything but the brain, as it's going to be moved to the cistern toilet_brain.forceMove(result_toilet) result_toilet.w_items += toilet_brain.w_class diff --git a/code/modules/food_and_drinks/machinery/deep_fryer.dm b/code/modules/food_and_drinks/machinery/deep_fryer.dm index b9aade6392a..73114812c2d 100644 --- a/code/modules/food_and_drinks/machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/machinery/deep_fryer.dm @@ -216,7 +216,7 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list( if(target_temp < TCMB + 10) // a tiny bit of leeway dunking_target.visible_message(span_userdanger("[dunking_target] explodes from the entropic difference! Holy fuck!")) dunking_target.investigate_log("has been gibbed by entropic difference (being dunked into [src]).", INVESTIGATE_DEATHS) - dunking_target.gib() + dunking_target.gib(DROP_ALL_REMAINS) log_combat(user, dunking_target, "blew up", null, "by dunking them into [src]") return diff --git a/code/modules/food_and_drinks/machinery/gibber.dm b/code/modules/food_and_drinks/machinery/gibber.dm index 29249f4e691..15ae66158d2 100644 --- a/code/modules/food_and_drinks/machinery/gibber.dm +++ b/code/modules/food_and_drinks/machinery/gibber.dm @@ -256,4 +256,4 @@ if(victim.loc == input) victim.forceMove(src) - victim.gib() + victim.gib(DROP_ALL_REMAINS) diff --git a/code/modules/food_and_drinks/machinery/processor.dm b/code/modules/food_and_drinks/machinery/processor.dm index 691a5be5784..6a9d6090c1f 100644 --- a/code/modules/food_and_drinks/machinery/processor.dm +++ b/code/modules/food_and_drinks/machinery/processor.dm @@ -76,7 +76,7 @@ if(isliving(what)) var/mob/living/themob = what - themob.gib(TRUE,TRUE,TRUE) + themob.gib() else qdel(what) LAZYREMOVE(processor_contents, what) diff --git a/code/modules/hydroponics/grown/melon.dm b/code/modules/hydroponics/grown/melon.dm index 80962a2d182..f69f8a68317 100644 --- a/code/modules/hydroponics/grown/melon.dm +++ b/code/modules/hydroponics/grown/melon.dm @@ -17,7 +17,7 @@ /obj/item/seeds/watermelon/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] is swallowing [src]! It looks like [user.p_theyre()] trying to commit suicide!")) - user.gib() + user.gib(DROP_ALL_REMAINS) new product(drop_location()) qdel(src) return MANUAL_SUICIDE diff --git a/code/modules/industrial_lift/industrial_lift.dm b/code/modules/industrial_lift/industrial_lift.dm index dd1b3f9604a..0bcc2a49bc8 100644 --- a/code/modules/industrial_lift/industrial_lift.dm +++ b/code/modules/industrial_lift/industrial_lift.dm @@ -326,7 +326,7 @@ GLOBAL_LIST_INIT(all_radial_directions, list( if(violent_landing) // Violent landing = gibbed. But the nicest kind of gibbing, keeping everything intact. crushed.investigate_log("has been gibbed by [src].", INVESTIGATE_DEATHS) - crushed.gib(FALSE, FALSE, FALSE) + crushed.gib(DROP_ALL_REMAINS) else // Less violent landing simply crushes every bone in your body. crushed.Paralyze(30 SECONDS, ignore_canstun = TRUE) diff --git a/code/modules/library/bibles.dm b/code/modules/library/bibles.dm index 3cfc9c8b76b..5d3c6e276b4 100644 --- a/code/modules/library/bibles.dm +++ b/code/modules/library/bibles.dm @@ -132,7 +132,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list( to_chat(user, span_userdanger("[deity_name] SMITE thee!")) add_memory_in_range(user, 7, /datum/memory/witnessed_gods_wrath, protagonist = user, deuteragonist = src, antagonist = deity_name) user.client?.give_award(/datum/award/achievement/misc/gods_wrath, user) - user.gib() + user.gib(DROP_ALL_REMAINS) else to_chat(user, span_userdanger("[deity_name] cast a curse upon thee!")) user.AddComponent(/datum/component/omen/bible) diff --git a/code/modules/mapfluff/ruins/objects_and_mobs/ash_walker_den.dm b/code/modules/mapfluff/ruins/objects_and_mobs/ash_walker_den.dm index 99df8b43849..c9aee1ea542 100644 --- a/code/modules/mapfluff/ruins/objects_and_mobs/ash_walker_den.dm +++ b/code/modules/mapfluff/ruins/objects_and_mobs/ash_walker_den.dm @@ -83,7 +83,7 @@ to_chat(deliverymob, span_warning("The Necropolis is pleased with your sacrifice. You feel confident your existence after death is secure.")) ashies.players_spawned -= deliverykey H.investigate_log("has been gibbed by the necropolis tendril.", INVESTIGATE_DEATHS) - H.gib() + H.gib(DROP_ALL_REMAINS) atom_integrity = min(atom_integrity + max_integrity*0.05,max_integrity)//restores 5% hp of tendril for(var/mob/living/L in view(src, 5)) if(L.mind?.has_antag_datum(/datum/antagonist/ashwalker)) diff --git a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm index 5325f44aac3..d1926119a15 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm @@ -407,7 +407,7 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) if(unforeseen_consequences) to_chat(unforeseen_consequences, span_warning("\The [H] starts to resonate. Forcing it to enter itself induces a bluespace paradox, violently tearing your body apart.")) unforeseen_consequences.investigate_log("has been gibbed by using [H] while inside of it.", INVESTIGATE_DEATHS) - unforeseen_consequences.gib() + unforeseen_consequences.gib(DROP_ALL_REMAINS) var/turf/targetturf = find_safe_turf() if(!targetturf) diff --git a/code/modules/mob/living/basic/basic_defense.dm b/code/modules/mob/living/basic/basic_defense.dm index 8afb40f2912..87fe6f8fed1 100644 --- a/code/modules/mob/living/basic/basic_defense.dm +++ b/code/modules/mob/living/basic/basic_defense.dm @@ -148,7 +148,7 @@ apply_damage(500, damagetype = BRUTE) else investigate_log("has been gibbed by an explosion.", INVESTIGATE_DEATHS) - gib() + gib(DROP_ALL_REMAINS) if (EXPLODE_HEAVY) var/bloss = 60 diff --git a/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp.dm b/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp.dm index 292766be07b..f89009cc2d9 100644 --- a/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp.dm +++ b/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp.dm @@ -87,5 +87,5 @@ balloon_alert(src, "devouring...") if(!do_after(src, 5 SECONDS, target)) return - target.gib() + target.gib(DROP_ALL_REMAINS) adjustBruteLoss(-1 * heal_on_cannibalize) diff --git a/code/modules/mob/living/basic/pets/dog/corgi.dm b/code/modules/mob/living/basic/pets/dog/corgi.dm index cb0df08d198..9e120c4e8c0 100644 --- a/code/modules/mob/living/basic/pets/dog/corgi.dm +++ b/code/modules/mob/living/basic/pets/dog/corgi.dm @@ -482,7 +482,7 @@ prey.investigate_log("has been sacrificed by [src].", INVESTIGATE_DEATHS) if (isliving(prey)) var/mob/living/living_sacrifice = prey - living_sacrifice.gib() + living_sacrifice.gib(DROP_ALL_REMAINS) else qdel(prey) diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm index bc7a663206a..63ef8830435 100644 --- a/code/modules/mob/living/carbon/alien/alien_defense.dm +++ b/code/modules/mob/living/carbon/alien/alien_defense.dm @@ -103,7 +103,7 @@ In all, this is a lot like the monkey code. /N var/obj/item/organ/internal/ears/ears = get_organ_slot(ORGAN_SLOT_EARS) switch (severity) if (EXPLODE_DEVASTATE) - gib() + gib(DROP_ALL_REMAINS) if (EXPLODE_HEAVY) take_overall_damage(60, 60) diff --git a/code/modules/mob/living/carbon/alien/death.dm b/code/modules/mob/living/carbon/alien/death.dm index 718186c9078..f5a0b7ace1b 100644 --- a/code/modules/mob/living/carbon/alien/death.dm +++ b/code/modules/mob/living/carbon/alien/death.dm @@ -1,5 +1,5 @@ -/mob/living/carbon/alien/spawn_gibs(with_bodyparts) - if(with_bodyparts) +/mob/living/carbon/alien/spawn_gibs(drop_bitflags=NONE) + if(drop_bitflags & DROP_BODYPARTS) new /obj/effect/gibspawner/xeno(drop_location(), src) else new /obj/effect/gibspawner/xeno/bodypartless(drop_location(), src) diff --git a/code/modules/mob/living/carbon/alien/larva/death.dm b/code/modules/mob/living/carbon/alien/larva/death.dm index 8fd6329a0c1..4b7f9f93218 100644 --- a/code/modules/mob/living/carbon/alien/larva/death.dm +++ b/code/modules/mob/living/carbon/alien/larva/death.dm @@ -6,8 +6,8 @@ update_icons() -/mob/living/carbon/alien/larva/spawn_gibs(with_bodyparts) - if(with_bodyparts) +/mob/living/carbon/alien/larva/spawn_gibs(drop_bitflags=NONE) + if(drop_bitflags & DROP_BODYPARTS) new /obj/effect/gibspawner/larva(drop_location(), src) else new /obj/effect/gibspawner/larva/bodypartless(drop_location(), src) diff --git a/code/modules/mob/living/carbon/alien/organs.dm b/code/modules/mob/living/carbon/alien/organs.dm index 5ef9b23c418..af796c9ff68 100644 --- a/code/modules/mob/living/carbon/alien/organs.dm +++ b/code/modules/mob/living/carbon/alien/organs.dm @@ -336,7 +336,7 @@ if(owner) shake_camera(owner, 2, 5) owner.investigate_log("has been gibbed by something inside [owner.p_their()] stomach.", INVESTIGATE_DEATHS) - owner.gib() + owner.gib(DROP_ALL_REMAINS) qdel(src) /obj/item/organ/internal/stomach/alien/proc/eject_stomach(list/turf/targets, spit_range, content_speed, particle_delay, particle_count=4) diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index ebced66d766..22c528b0095 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -127,7 +127,7 @@ if(gib_on_success) new_xeno.visible_message(span_danger("[new_xeno] bursts out of [owner] in a shower of gore!"), span_userdanger("You exit [owner], your previous host."), span_hear("You hear organic matter ripping and tearing!")) owner.investigate_log("has been gibbed by an alien larva.", INVESTIGATE_DEATHS) - owner.gib(TRUE) + owner.gib(DROP_ORGANS|DROP_BODYPARTS) else new_xeno.visible_message(span_danger("[new_xeno] wriggles out of [owner]!"), span_userdanger("You exit [owner], your previous host.")) owner.log_message("had an alien larva within them escape (without being gibbed).", LOG_ATTACK, log_globally = FALSE) diff --git a/code/modules/mob/living/carbon/death.dm b/code/modules/mob/living/carbon/death.dm index 4d14fb7df66..bbf82ccefc5 100644 --- a/code/modules/mob/living/carbon/death.dm +++ b/code/modules/mob/living/carbon/death.dm @@ -24,9 +24,9 @@ M.Scale(1.8, 1.2) animate(src, time = 40, transform = M, easing = SINE_EASING) -/mob/living/carbon/gib(no_brain, no_organs, no_bodyparts, safe_gib = FALSE) +/mob/living/carbon/gib(drop_bitflags=NONE) add_memory_in_range(src, 7, /datum/memory/witness_gib, protagonist = src) - if(safe_gib) // If you want to keep all the mob's items and not have them deleted + if(drop_bitflags & DROP_ITEMS) for(var/obj/item/W in src) dropItemToGround(W) if(prob(50)) @@ -37,39 +37,33 @@ visible_message(span_danger("[M] bursts out of [src]!")) return ..() -/mob/living/carbon/spill_organs(no_brain, no_organs, no_bodyparts) +/mob/living/carbon/spill_organs(drop_bitflags=NONE) var/atom/Tsec = drop_location() - if(!no_bodyparts) - if(no_organs)//so the organs don't get transferred inside the bodyparts we'll drop. - for(var/organ in organs) - if(no_brain || !istype(organ, /obj/item/organ/internal/brain)) - qdel(organ) - else //we're going to drop all bodyparts except chest, so the only organs that needs spilling are those inside it. - for(var/obj/item/organ/organ as anything in organs) - if(no_brain && istype(organ, /obj/item/organ/internal/brain)) - qdel(organ) //so the brain isn't transferred to the head when the head drops. - continue - var/org_zone = check_zone(organ.zone) //both groin and chest organs. - if(org_zone == BODY_ZONE_CHEST) - organ.Remove(src) - organ.forceMove(Tsec) - organ.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1,3),5) - else - for(var/obj/item/organ/organ as anything in organs) - if(no_brain && istype(organ, /obj/item/organ/internal/brain)) - qdel(organ) - continue - if(no_organs && !istype(organ, /obj/item/organ/internal/brain)) - qdel(organ) - continue + + for(var/obj/item/organ/organ as anything in organs) + if((drop_bitflags & DROP_BRAIN) && istype(organ, /obj/item/organ/internal/brain)) + if(drop_bitflags & DROP_BODYPARTS) + continue // the head will drop, so the brain should stay inside + organ.Remove(src) organ.forceMove(Tsec) - organ.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1,3),5) + organ.throw_at(get_edge_target_turf(src, pick(GLOB.alldirs)), rand(1,3), 5) + continue -/// Launches all bodyparts away from the mob. skip_head will keep the head attached. -/mob/living/carbon/spread_bodyparts(skip_head = FALSE) + if((drop_bitflags & DROP_ORGANS) && !istype(organ, /obj/item/organ/internal/brain)) + if((drop_bitflags & DROP_BODYPARTS) && (check_zone(organ.zone) != BODY_ZONE_CHEST)) + continue // only chest & groin organs will be ejected + + organ.Remove(src) + organ.forceMove(Tsec) + organ.throw_at(get_edge_target_turf(src, pick(GLOB.alldirs)), rand(1,3), 5) + continue + + qdel(organ) + +/mob/living/carbon/spread_bodyparts(drop_bitflags=NONE) for(var/obj/item/bodypart/part as anything in bodyparts) - if(skip_head && part.body_zone == BODY_ZONE_HEAD) + if(!(drop_bitflags & DROP_BRAIN) && part.body_zone == BODY_ZONE_HEAD) continue else if(part.body_zone == BODY_ZONE_CHEST) continue diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 74f9db5957d..b451d86935b 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -5,8 +5,8 @@ GLOBAL_LIST_EMPTY(dead_players_during_shift) /mob/living/carbon/human/dust_animation() new /obj/effect/temp_visual/dust_animation(loc, dna.species.dust_anim) -/mob/living/carbon/human/spawn_gibs(with_bodyparts) - if(with_bodyparts) +/mob/living/carbon/human/spawn_gibs(drop_bitflags=NONE) + if(drop_bitflags & DROP_BODYPARTS) new /obj/effect/gibspawner/human(drop_location(), src, get_static_viruses()) else new /obj/effect/gibspawner/human/bodypartless(drop_location(), src, get_static_viruses()) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 5d4f3d2887d..fafc9b49a69 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -412,7 +412,7 @@ if(EXPLODE_LIGHT) SSexplosions.low_mov_atom += thing investigate_log("has been gibbed by an explosion.", INVESTIGATE_DEATHS) - gib() + gib(DROP_ALL_REMAINS) return TRUE else brute_loss = 500 diff --git a/code/modules/mob/living/carbon/human/species_types/dullahan.dm b/code/modules/mob/living/carbon/human/species_types/dullahan.dm index 8fcb9b2fcd9..e59aa11375f 100644 --- a/code/modules/mob/living/carbon/human/species_types/dullahan.dm +++ b/code/modules/mob/living/carbon/human/species_types/dullahan.dm @@ -74,7 +74,7 @@ if(QDELETED(my_head)) my_head = null human.investigate_log("has been gibbed by the loss of [human.p_their()] head.", INVESTIGATE_DEATHS) - human.gib() + human.gib(DROP_ALL_REMAINS) return if(my_head.loc.name != human.real_name && istype(my_head.loc, /obj/item/bodypart/head)) @@ -87,7 +87,7 @@ if(illegal_head) my_head = null human.investigate_log("has been gibbed by having an illegal head put on [human.p_their()] shoulders.", INVESTIGATE_DEATHS) - human.gib() // Yeah so giving them a head on their body is really not a good idea, so their original head will remain but uh, good luck fixing it after that. + human.gib(DROP_ALL_REMAINS) // Yeah so giving them a head on their body is really not a good idea, so their original head will remain but uh, good luck fixing it after that. /datum/species/dullahan/proc/update_vision_perspective(mob/living/carbon/human/human) var/obj/item/organ/internal/eyes/eyes = human.get_organ_slot(ORGAN_SLOT_EYES) @@ -265,6 +265,6 @@ if(isdullahan(human)) var/datum/species/dullahan/dullahan_species = human.dna.species dullahan_species.my_head = null - owner.gib() + owner.gib(DROP_ALL_REMAINS) owner = null return ..() diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 79d4d228b72..7cb3abfff02 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -1,12 +1,14 @@ /** * Blow up the mob into giblets * - * Arguments: - * * no_brain - Should the mob NOT drop a brain? - * * no_organs - Should the mob NOT drop organs? - * * no_bodyparts - Should the mob NOT drop bodyparts? -*/ -/mob/living/proc/gib(no_brain, no_organs, no_bodyparts) + * drop_bitflags: (see code/__DEFINES/blood.dm) + * * DROP_BRAIN - Gibbed mob will drop a brain + * * DROP_ORGANS - Gibbed mob will drop organs + * * DROP_BODYPARTS - Gibbed mob will drop bodyparts (arms, legs, etc.) + * * DROP_ITEMS - Gibbed mob will drop carried items (otherwise they get deleted) + * * DROP_ALL_REMAINS - Gibbed mob will drop everything +**/ +/mob/living/proc/gib(drop_bitflags=NONE) var/prev_lying = lying_angle if(stat != DEAD) death(TRUE) @@ -15,25 +17,46 @@ gib_animation() ghostize() - spill_organs(no_brain, no_organs, no_bodyparts) + spill_organs(drop_bitflags) - if(!no_bodyparts) - spread_bodyparts(no_brain, no_organs) + if(drop_bitflags & DROP_BODYPARTS) + spread_bodyparts(drop_bitflags) - spawn_gibs(no_bodyparts) - SEND_SIGNAL(src, COMSIG_LIVING_GIBBED, no_brain, no_organs, no_bodyparts) + spawn_gibs(drop_bitflags) + SEND_SIGNAL(src, COMSIG_LIVING_GIBBED, drop_bitflags) qdel(src) /mob/living/proc/gib_animation() return -/mob/living/proc/spawn_gibs() +/** + * Spawn bloody gib mess on the floor + * + * drop_bitflags: (see code/__DEFINES/blood.dm) + * * DROP_BODYPARTS - Gibs will spawn with bodypart limbs present +**/ +/mob/living/proc/spawn_gibs(drop_bitflags=NONE) new /obj/effect/gibspawner/generic(drop_location(), src, get_static_viruses()) -/mob/living/proc/spill_organs() +/** + * Drops a mob's organs on the floor + * + * drop_bitflags: (see code/__DEFINES/blood.dm) + * * DROP_BRAIN - Mob will drop a brain + * * DROP_ORGANS - Mob will drop organs + * * DROP_BODYPARTS - Mob will drop bodyparts (arms, legs, etc.) + * * DROP_ALL_REMAINS - Mob will drop everything +**/ +/mob/living/proc/spill_organs(drop_bitflags=NONE) return -/mob/living/proc/spread_bodyparts() +/** + * Launches all bodyparts away from the mob + * + * drop_bitflags: (see code/__DEFINES/blood.dm) + * * DROP_BRAIN - Detaches the head from the mob and launches it away from the body +**/ +/mob/living/proc/spread_bodyparts(drop_bitflags=NONE) return /** diff --git a/code/modules/mob/living/silicon/ai/ai_defense.dm b/code/modules/mob/living/silicon/ai/ai_defense.dm index ae17e13f269..7445815c9d7 100644 --- a/code/modules/mob/living/silicon/ai/ai_defense.dm +++ b/code/modules/mob/living/silicon/ai/ai_defense.dm @@ -43,7 +43,7 @@ switch(severity) if(EXPLODE_DEVASTATE) investigate_log("has been gibbed by an explosion.", INVESTIGATE_DEATHS) - gib() + gib(DROP_ALL_REMAINS) if(EXPLODE_HEAVY) if (stat != DEAD) adjustBruteLoss(60) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index d7f5d3e901f..24e40c38ae5 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -377,7 +377,7 @@ else explosion(src, devastation_range = -1, light_impact_range = 2) investigate_log("has self-destructed.", INVESTIGATE_DEATHS) - gib() + gib(DROP_ALL_REMAINS) /mob/living/silicon/robot/proc/UnlinkSelf() set_connected_ai(null) diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index f820d3ca1cf..09440ec22a3 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -414,14 +414,14 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real adjustBruteLoss(30) else investigate_log("has been gibbed a blob.", INVESTIGATE_DEATHS) - gib() + gib(DROP_ALL_REMAINS) return TRUE /mob/living/silicon/robot/ex_act(severity, target) switch(severity) if(EXPLODE_DEVASTATE) investigate_log("has been gibbed by an explosion.", INVESTIGATE_DEATHS) - gib() + gib(DROP_ALL_REMAINS) return if(EXPLODE_HEAVY) if (stat != DEAD) diff --git a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm index cceb0cdf58c..6f5952382c6 100644 --- a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm +++ b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm @@ -92,8 +92,8 @@ /mob/living/simple_animal/hostile/gorilla/CanSmashTurfs(turf/T) return iswallturf(T) -/mob/living/simple_animal/hostile/gorilla/gib(no_brain) - if(!no_brain) +/mob/living/simple_animal/hostile/gorilla/gib(drop_bitflags=DROP_BRAIN) + if(drop_bitflags & DROP_BRAIN) var/mob/living/brain/gorilla_brain = new(drop_location()) gorilla_brain.name = real_name gorilla_brain.real_name = real_name diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 8a92ca680f7..5c63ca4e884 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -607,7 +607,7 @@ holder_animal.mind.transfer_to(possessor) possessor.mind.grab_ghost(force = TRUE) holder_animal.investigate_log("has been gibbed by [src].", INVESTIGATE_DEATHS) - holder_animal.gib() + holder_animal.gib(DROP_ALL_REMAINS) return ..() return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm index 58d9988256f..d91f312b454 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm @@ -211,7 +211,7 @@ mother.children_list -= src visible_message(span_warning("[src] explodes!")) explosion(src, flame_range = 3, adminlog = FALSE) - gib() + gib(DROP_ALL_REMAINS) /obj/effect/goliath_tentacle/broodmother grapple_time = 1 SECONDS diff --git a/code/modules/mob_spawn/ghost_roles/mining_roles.dm b/code/modules/mob_spawn/ghost_roles/mining_roles.dm index 35f8ece5c8f..66837628cdc 100644 --- a/code/modules/mob_spawn/ghost_roles/mining_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/mining_roles.dm @@ -200,7 +200,7 @@ yolk.underwear = "Nude" yolk.equipOutfit(/datum/outfit/ashwalker)//this is an authentic mess we're making yolk.update_body() - yolk.gib() + yolk.gib(DROP_ALL_REMAINS) QDEL_NULL(egg) return ..() diff --git a/code/modules/mod/modules/modules_ninja.dm b/code/modules/mod/modules/modules_ninja.dm index 90c731a7c36..7a38238594d 100644 --- a/code/modules/mod/modules/modules_ninja.dm +++ b/code/modules/mod/modules/modules_ninja.dm @@ -275,7 +275,7 @@ var/mob/living/living_user = user to_chat(living_user, span_danger("fATaL EERRoR: 382200-*#00CODE RED\nUNAUTHORIZED USE DETECteD\nCoMMENCING SUB-R0UTIN3 13...\nTERMInATING U-U-USER...")) living_user.investigate_log("has been gibbed by using a MODsuit equipped with [src].", INVESTIGATE_DEATHS) - living_user.gib() + living_user.gib(DROP_ALL_REMAINS) /obj/item/mod/module/dna_lock/reinforced/on_emp(datum/source, severity) return diff --git a/code/modules/power/apc/apc_malf.dm b/code/modules/power/apc/apc_malf.dm index f13b588842a..3b070368804 100644 --- a/code/modules/power/apc/apc_malf.dm +++ b/code/modules/power/apc/apc_malf.dm @@ -69,7 +69,7 @@ if(forced) occupier.forceMove(drop_location()) INVOKE_ASYNC(occupier, TYPE_PROC_REF(/mob/living, death)) - occupier.gib() + occupier.gib(DROP_ALL_REMAINS) if(!occupier.nuking) //Pinpointers go back to tracking the nuke disk, as long as the AI (somehow) isn't mid-nuking. for(var/obj/item/pinpointer/nuke/disk_pinpointers in GLOB.pinpointer_list) diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm index 2963afbaa51..82f24e21b73 100644 --- a/code/modules/projectiles/guns/ballistic/launchers.dm +++ b/code/modules/projectiles/guns/ballistic/launchers.dm @@ -98,7 +98,7 @@ REMOVE_TRAIT(user, TRAIT_NO_TRANSFORM, REF(src)) process_fire(user, user, TRUE) if(!QDELETED(user)) //if they weren't gibbed by the explosion, take care of them for good. - user.gib() + user.gib(DROP_ALL_REMAINS) return MANUAL_SUICIDE else sleep(0.5 SECONDS) diff --git a/code/modules/projectiles/projectile/special/rocket.dm b/code/modules/projectiles/projectile/special/rocket.dm index 899f737d8cc..08a2c18c2f7 100644 --- a/code/modules/projectiles/projectile/special/rocket.dm +++ b/code/modules/projectiles/projectile/special/rocket.dm @@ -53,7 +53,7 @@ among other potential differences. This granularity is helpful for things like t if(random_crit_gib) var/mob/living/gibbed_dude = target new /obj/effect/temp_visual/crit(get_turf(gibbed_dude)) - gibbed_dude.gib() + gibbed_dude.gib(DROP_ALL_REMAINS) /// PM9 HEAP rocket - the anti-anything missile you always craved. /obj/projectile/bullet/rocket/heap diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index a72efc8ea82..67fb8104efa 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -855,4 +855,4 @@ span_userdanger("GORE! GORE! GORE! YOU'RE GORE! TOO MUCH GORE! YOU'RE GORE! GORE! IT'S OVER! GORE! GORE! YOU'RE GORE! TOO MUCH G-"), ) new /obj/structure/bouncy_castle(gored.loc, gored) - gored.gib(TRUE, TRUE, TRUE) //no brain, no organs, no bodyparts + gored.gib() diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index b3bda10a53a..2723d72eff1 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -584,7 +584,7 @@ var/location = get_turf(M) if(iscarbon(M)) if(ismonkey(M)) - M.gib() + M.gib(DROP_ALL_REMAINS) else M.vomit(VOMIT_CATEGORY_BLOOD) new /mob/living/carbon/human/species/monkey(location, TRUE) diff --git a/code/modules/religion/honorbound/honorbound_rites.dm b/code/modules/religion/honorbound/honorbound_rites.dm index 6ba557d5a30..c9c9e711354 100644 --- a/code/modules/religion/honorbound/honorbound_rites.dm +++ b/code/modules/religion/honorbound/honorbound_rites.dm @@ -59,7 +59,7 @@ if(joining_now.mind.has_antag_datum(/datum/antagonist/cult))//what the fuck?! to_chat(user, span_warning("[GLOB.deity] has seen a true, dark evil in [joining_now]'s heart, and they have been smitten!")) playsound(get_turf(religious_tool), 'sound/effects/pray.ogg', 50, TRUE) - joining_now.gib(TRUE) + joining_now.gib(DROP_ORGANS|DROP_BODYPARTS) return FALSE var/datum/brain_trauma/special/honorbound/honor = user.has_trauma_type(/datum/brain_trauma/special/honorbound) if(joining_now in honor.guilty) diff --git a/code/modules/research/anomaly/anomaly_core.dm b/code/modules/research/anomaly/anomaly_core.dm index 56220956182..febb25add53 100644 --- a/code/modules/research/anomaly/anomaly_core.dm +++ b/code/modules/research/anomaly/anomaly_core.dm @@ -23,7 +23,7 @@ /obj/item/assembly/signaler/anomaly/manual_suicide(mob/living/carbon/user) user.visible_message(span_suicide("[user]'s [src] is reacting to the radio signal, warping [user.p_their()] body!")) user.set_suicide(TRUE) - user.gib() + user.gib(DROP_ALL_REMAINS) /obj/item/assembly/signaler/anomaly/attack_self() return diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index f81f328c0f3..b3945fe60c4 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -460,7 +460,7 @@ to_chat(user, span_userdanger("You explode!")) explosion(user, devastation_range = 1, heavy_impact_range = 3, light_impact_range = 6, explosion_cause = src) user.investigate_log("has been gibbed by an oil slime extract explosion.", INVESTIGATE_DEATHS) - user.gib() + user.gib(DROP_ALL_REMAINS) return to_chat(user, span_notice("You stop feeding [src], and the feeling passes.")) diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index 89fc0fc6c8e..c65a9ad123a 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -35,7 +35,7 @@ All ShuttleMove procs go here SSblackbox.record_feedback("tally", "shuttle_gib", 1, M.type) log_shuttle("[key_name(M)] was shuttle gibbed by [shuttle].") M.investigate_log("has been gibbed by [shuttle].", INVESTIGATE_DEATHS) - M.gib() + M.gib(DROP_ALL_REMAINS) else //non-living mobs shouldn't be affected by shuttles, which is why this is an else diff --git a/code/modules/spells/spell_types/shapeshift/_shape_status.dm b/code/modules/spells/spell_types/shapeshift/_shape_status.dm index 10d42760c91..94e1d549af2 100644 --- a/code/modules/spells/spell_types/shapeshift/_shape_status.dm +++ b/code/modules/spells/spell_types/shapeshift/_shape_status.dm @@ -115,7 +115,7 @@ // Our caster inside was gibbed, mirror the gib to our mob if(gibbed) - owner.gib() + owner.gib(DROP_ALL_REMAINS) // Otherwise our caster died, just make our mob die else diff --git a/code/modules/spells/spell_types/shapeshift/_shapeshift.dm b/code/modules/spells/spell_types/shapeshift/_shapeshift.dm index a5e590685c0..5aecd863bce 100644 --- a/code/modules/spells/spell_types/shapeshift/_shapeshift.dm +++ b/code/modules/spells/spell_types/shapeshift/_shapeshift.dm @@ -132,7 +132,7 @@ // Gib our caster, and make sure to leave nothing behind // (If we leave something behind, it'll drop on the turf of the pipe, which is kinda wrong.) cast_on.investigate_log("has been gibbed by shapeshifting while ventcrawling.", INVESTIGATE_DEATHS) - cast_on.gib(TRUE, TRUE, TRUE) + cast_on.gib() /// Callback for the radial that allows the user to choose their species. /datum/action/cooldown/spell/shapeshift/proc/check_menu(mob/living/caster) diff --git a/code/modules/spells/spell_types/touch/smite.dm b/code/modules/spells/spell_types/touch/smite.dm index bcd234979c6..f02ea8247dd 100644 --- a/code/modules/spells/spell_types/touch/smite.dm +++ b/code/modules/spells/spell_types/touch/smite.dm @@ -48,7 +48,7 @@ return TRUE victim.investigate_log("has been gibbed by the smite spell.", INVESTIGATE_DEATHS) - victim.gib() + victim.gib(DROP_ALL_REMAINS) return TRUE /obj/item/melee/touch_attack/smite diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm index fdb53c47572..0652c554b8a 100644 --- a/code/modules/vehicles/mecha/_mecha.dm +++ b/code/modules/vehicles/mecha/_mecha.dm @@ -323,7 +323,7 @@ if(!ai.linked_core) // we probably shouldnt gib AIs with a core unlucky_ai = occupant ai.investigate_log("has been gibbed by having their mech destroyed.", INVESTIGATE_DEATHS) - ai.gib() //No wreck, no AI to recover + ai.gib(DROP_ALL_REMAINS) //No wreck, no AI to recover else mob_exit(ai,silent = TRUE, forced = TRUE) // so we dont ghost the AI continue diff --git a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm index dae449d8388..e3926aa7d35 100644 --- a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm +++ b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm @@ -212,7 +212,7 @@ to_chat(crushed_victim, span_userdanger("[chassis] crashes down on you from above!")) if(crushed_victim.stat != CONSCIOUS) crushed_victim.investigate_log("has been gibbed by a falling Savannah Ivanov mech.", INVESTIGATE_DEATHS) - crushed_victim.gib(FALSE, FALSE, FALSE) + crushed_victim.gib(DROP_ALL_REMAINS) continue crushed_victim.adjustBruteLoss(80) diff --git a/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm index 6aae4adaaee..de96f3ad5f6 100644 --- a/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm @@ -122,7 +122,7 @@ SEND_SIGNAL(src, COMSIG_MECHA_DRILL_MOB, chassis, target) else target.investigate_log("has been gibbed by [src] (attached to [chassis]).", INVESTIGATE_DEATHS) - target.gib() + target.gib(DROP_ALL_REMAINS) else //drill makes a hole var/obj/item/bodypart/target_part = target.get_bodypart(target.get_random_valid_zone(BODY_ZONE_CHEST)) diff --git a/code/modules/vehicles/mecha/mecha_mob_interaction.dm b/code/modules/vehicles/mecha/mecha_mob_interaction.dm index c5f440ac97e..07b13a27ec0 100644 --- a/code/modules/vehicles/mecha/mecha_mob_interaction.dm +++ b/code/modules/vehicles/mecha/mecha_mob_interaction.dm @@ -120,7 +120,7 @@ if(forced)//This should only happen if there are multiple AIs in a round, and at least one is Malf. if(!AI.linked_core) //if the victim AI has no core AI.investigate_log("has been gibbed by being forced out of their mech by another AI.", INVESTIGATE_DEATHS) - AI.gib() //If one Malf decides to steal a mech from another AI (even other Malfs!), they are destroyed, as they have nowhere to go when replaced. + AI.gib(DROP_ALL_REMAINS) //If one Malf decides to steal a mech from another AI (even other Malfs!), they are destroyed, as they have nowhere to go when replaced. AI = null mecha_flags &= ~SILICON_PILOT return diff --git a/code/modules/vehicles/vehicle_key.dm b/code/modules/vehicles/vehicle_key.dm index e1b45d55f0a..f6e5f7c4e28 100644 --- a/code/modules/vehicles/vehicle_key.dm +++ b/code/modules/vehicles/vehicle_key.dm @@ -41,7 +41,7 @@ switch(user.mind?.get_skill_level(/datum/skill/cleaning)) if(SKILL_LEVEL_NONE to SKILL_LEVEL_NOVICE) //Their mind is too weak to ascend as a janny user.visible_message(span_suicide("[user] is putting \the [src] in [user.p_their()] mouth and is trying to become one with the janicart, but has no idea where to start! It looks like [user.p_theyre()] trying to commit suicide!")) - user.gib() + user.gib(DROP_ALL_REMAINS) return MANUAL_SUICIDE if(SKILL_LEVEL_APPRENTICE to SKILL_LEVEL_JOURNEYMAN) //At least they tried user.visible_message(span_suicide("[user] is putting \the [src] in [user.p_their()] mouth and has inefficiently become one with the janicart! It looks like [user.p_theyre()] trying to commit suicide!")) diff --git a/code/modules/wiremod/shell/drone.dm b/code/modules/wiremod/shell/drone.dm index dce5dca46ad..6f7afcfea04 100644 --- a/code/modules/wiremod/shell/drone.dm +++ b/code/modules/wiremod/shell/drone.dm @@ -32,7 +32,7 @@ /mob/living/circuit_drone/updatehealth() . = ..() if(health < 0) - gib(no_brain = TRUE, no_organs = TRUE, no_bodyparts = TRUE) + gib() /mob/living/circuit_drone/welder_act(mob/living/user, obj/item/tool) . = ..() diff --git a/code/modules/zombie/items.dm b/code/modules/zombie/items.dm index 65716c0dbfa..dca26d366d8 100644 --- a/code/modules/zombie/items.dm +++ b/code/modules/zombie/items.dm @@ -74,7 +74,7 @@ if(target.stat == DEAD) var/hp_gained = target.maxHealth target.investigate_log("has been devoured by a zombie.", INVESTIGATE_DEATHS) - target.gib() + target.gib(DROP_ALL_REMAINS) var/need_mob_update need_mob_update = user.adjustBruteLoss(-hp_gained, updating_health = FALSE) need_mob_update += user.adjustToxLoss(-hp_gained, updating_health = FALSE)