From 5669008080f61b101aadd930eac27e565bb3da61 Mon Sep 17 00:00:00 2001 From: JJRcop Date: Fri, 22 Sep 2017 01:42:21 -0400 Subject: [PATCH 1/2] Suiciding with a gun blows your brain out --- code/__HELPERS/mobs.dm | 8 ++++++-- code/modules/projectiles/guns/ballistic.dm | 18 +++++++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 719ddad65b9..d43073127f6 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -378,13 +378,17 @@ Proc for attack log creation, because really why not if(H.dna && istype(H.dna.species, species_datum)) . = TRUE -/proc/spawn_atom_to_turf(spawn_type, target, amount, admin_spawn=FALSE) +/proc/spawn_atom_to_turf(spawn_type, target, amount, admin_spawn=FALSE, list/extra_args) var/turf/T = get_turf(target) if(!T) CRASH("attempt to spawn atom type: [spawn_type] in nullspace") + var/list/new_args = list(T) + if(extra_args) + new_args += extra_args + for(var/j in 1 to amount) - var/atom/X = new spawn_type(T) + var/atom/X = new spawn_type(arglist(new_args)) X.admin_spawned = admin_spawn /proc/spawn_and_random_walk(spawn_type, target, amount, walk_chance=100, max_walk=3, always_max_walk=FALSE, admin_spawn=FALSE) diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index d65364c0628..1145a0c8ce8 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -137,13 +137,27 @@ boolets += magazine.ammo_count() return boolets +#define BRAINS_BLOWN_THROW_RANGE 3 +#define BRAINS_BLOWN_THROW_SPEED 1 /obj/item/gun/ballistic/suicide_act(mob/user) - if (chambered && chambered.BB && can_trigger_gun(user) && !chambered.BB.nodamage) + var/obj/item/organ/brain/B = user.getorganslot("brain") + if (B && chambered && chambered.BB && can_trigger_gun(user) && !chambered.BB.nodamage) user.visible_message("[user] is putting the barrel of [src] in [user.p_their()] mouth. It looks like [user.p_theyre()] trying to commit suicide!") sleep(25) if(user.is_holding(src)) + var/turf/T = get_turf(user) process_fire(user, user, 0, zone_override = "head") user.visible_message("[user] blows [user.p_their()] brain[user.p_s()] out with [src]!") + var/turf/target = get_ranged_target_turf(user, turn(user.dir, 180), BRAINS_BLOWN_THROW_RANGE) + B.forceMove(T) + B.Remove(user) + var/datum/dna/user_dna + if(iscarbon(user)) + var/mob/living/carbon/C = user + user_dna = C.dna + B.add_blood(user_dna) + var/datum/callback/gibspawner = CALLBACK(GLOBAL_PROC, /proc/spawn_atom_to_turf, /obj/effect/gibspawner/generic, B, 1, FALSE, list(user_dna)) + B.throw_at(target, BRAINS_BLOWN_THROW_RANGE, BRAINS_BLOWN_THROW_SPEED, callback=gibspawner) return(BRUTELOSS) else user.visible_message("[user] panics and starts choking to death!") @@ -152,6 +166,8 @@ user.visible_message("[user] is pretending to blow [user.p_their()] brain[user.p_s()] out with [src]! It looks like [user.p_theyre()] trying to commit suicide!") playsound(loc, 'sound/weapons/empty.ogg', 50, 1, -1) return (OXYLOSS) +#undef BRAINS_BLOWN_THROW_SPEED +#undef BRAINS_BLOWN_THROW_RANGE From 69669be0ad1f109252cf2c93a36f7b2c0377ed02 Mon Sep 17 00:00:00 2001 From: JJRcop Date: Fri, 22 Sep 2017 02:54:34 -0400 Subject: [PATCH 2/2] Possibly fixes runtimes with gun suicide oops --- code/modules/projectiles/guns/ballistic.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 1145a0c8ce8..888cd2483a5 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -149,8 +149,8 @@ process_fire(user, user, 0, zone_override = "head") user.visible_message("[user] blows [user.p_their()] brain[user.p_s()] out with [src]!") var/turf/target = get_ranged_target_turf(user, turn(user.dir, 180), BRAINS_BLOWN_THROW_RANGE) - B.forceMove(T) B.Remove(user) + B.forceMove(T) var/datum/dna/user_dna if(iscarbon(user)) var/mob/living/carbon/C = user